`
QI程序猿
  • 浏览: 17764 次
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java类初始化时若干模块顺序

 
阅读更多

参考文章:

Java类的初始化顺序

Java中变量的初始化

 

Java类有两种成员变量,一是没有static修饰的,叫做实例变量,另外一种有static修饰的,叫做类变量或者静态变量。

 

对于静态变量,静态初始化块,实例变量,构造代码块,构造器,初始化时这几个模块的顺序就是静态变量,静态初始化块,实例变量,构造代码块,构造器。

 

class Teacher {

	public static String name = "t1";
	public int age = 24;

	static {
		System.out.println(name);
		System.out.println("static code block");
	}

	{
		System.out.println(age);
		System.out.println("initial code block");
	}

	public Teacher() {
		System.out.println("contructor");
	}
	
}

 

测试main方法:

 

public static void main(String[] args) {
		new Teacher();
		System.out.println();
		new Teacher();
	}

 

执行结果:

 

t1
static code block
24
initial code block
contructor

24
initial code block
contructor

 

当涉及父类的操作时,子类和父类的模块初始化顺序如下:

父类—静态变量

父类—静态初始化块

子类—静态变量

子类—静态初始化块

 

父类—实例变量

父类—构造代码块

父类—构造器

 

子类—实例变量

子类—构造代码块

子类—构造器

 

另外,假如父类在构造方法中引用的某个方法在子类中进行了重写,那由于在子类的构造方法中要先调用父类的构造方法,此时父类的构造方法只根据方法名调用将调用到子类的重写后的该方法。

 

class Super {
	public Super() {
		service();
	}

	public void service() {
		System.out.println("super service method");
	}
}

class Sub extends Super {
	public Sub() {
		service();
		super.service();
	}

	public void service() {
		System.out.println("sub service method");
	}
}

 

new Sub();执行后的结果:

 

sub service method
sub service method
super service method

 

按照先执行父类的构造方法,可以看出父类构造方法中调用的方法是子类的,而它本身的方法没有发生变化。

 

对于类的成员变量,如果程序初始化时没有显式地赋值,JVM都会为其赋默认值

 

 

 

另外再说一些关于成员变量和局部变量:

成员变量可以被public protect private static修饰符修饰,而局部变量不能被控制修饰符和static修饰,但两者都可以定义为final类型。成员变量存储在堆,局部变量存储在栈。

  • 大小: 55.9 KB
分享到:
评论

相关推荐

    使用Maven构建多模块项目

    Maven多模块项目通常遵循一个标准的目录结构,包括一个顶级父 pom.xml(如test-hd-parent),和若干子模块,每个子模块都有自己的pom.xml。这种结构有助于保持项目的清晰和有序。 2. 顶级父POM与子模块POM: - **...

    JAVA-puzzle-game.zip_JAVA 拼图 作业_java 拼图

    3. 打乱顺序:游戏初始化时,通过随机算法打乱拼图块的顺序,增加游戏难度。这可能涉及到对数组或集合的操作,以及随机数生成器。 4. 状态检查:当用户尝试重新组合拼图时,需要实时检查当前状态是否正确。这可以...

    Java虚拟机规范(Java_SE_7).rar_JAVA 虚拟机规范_JAVA虚拟机

    JVM采用“加载”、“验证”、“准备”、“解析”和“初始化”五个阶段来确保类的正确性。双亲委托模型是类加载器的主要设计原则,保证了类加载的安全性和一致性。 2. **字节码执行**:JVM通过解释器或即时编译器...

    JAVA核心知识点整理.pdf

    类的加载过程通常包括加载、验证、准备、解析、初始化等步骤。加载阶段,JVM负责加载类的二进制数据;验证阶段,确保加载的类符合JVM规范;准备阶段,为类变量分配内存并设置类变量的默认值;解析阶段,将常量池中的...

    java考试真题 java考试真题

    ### Java考试真题知识点解析 ...- 在Java中,数组初始化时需指定数组大小。示例中的数组`arr`虽然声明了但未指定大小,这将导致编译错误。正确的做法是在创建数组时指定长度,如`int arr[] = new int[10];`。

    JAVA数据结构与算法

    - **数组**:详细阐述了数组的声明、初始化以及访问方式。 - **Java的面向对象特性** - **类与对象**:解释了如何定义类以及如何创建对象,并探讨了类与对象之间的关系。 - **继承**:介绍了一种机制,允许一个...

    2021-2022计算机二级等级考试试题及答案No.15687.docx

    9. 字符数组初始化:在C/C++等编程语言中,字符数组的初始化需要注意字符串的结束符,选项A中缺少结束的空字符('\0'),因此是错误的初始化方式。 10. FoxBase 数据操作:在FoxBase或类似的数据库管理系统中,USE...

    美团系统交易面试资料整理

    - **初始化**:执行类的初始化语句,包括静态块和静态变量的赋值。 - **类构造器()**:用于初始化类的静态成员。 - **类加载器**: - **启动类加载器(Bootstrap ClassLoader)**:C++编写,加载`rt.jar`中的核心...

    2021-2022计算机二级等级考试试题及答案No.17366.docx

    这实际上指的是Java中对象的状态一旦初始化完成之后,某些属性可能无法被更改,尤其是对于final类型的变量而言。这表明Java中的对象一旦创建并初始化,其某些属性可能会变得不可变。 - **正确答案**:根据题目的描述...

    2021-2022计算机二级等级考试试题及答案No.2742.docx

    7. 构造函数在类定义时不是必需的,但它是初始化对象时常用的方法,用于设置对象的状态。 8. 在类的继承关系中,应遵循单一继承原则,即一个子类只能有一个父类。 9. SQL的NOT操作符与OR和AND结合使用时,等价于...

    2021-2022计算机二级等级考试试题及答案No.245.docx

    16. 数组初始化:在C/C++中,当声明一个数组并初始化时,如果没有提供足够的初始值,剩余的元素会被自动初始化为0。 17. RGB颜色模型:RGB函数通过红、绿、蓝三基色混合产生颜色,为了确保输入的有效性,滚动条的...

    2021-2022计算机二级等级考试试题及答案No.16445.docx

    - **数组元素初始化**:在 Java 中,数组在创建时会被默认初始化。对于整型数组,默认值为 0。因此,题目中的正确答案是 “A. x[24] 为 0”,表示数组最后一个元素被初始化为 0。 ### 27. 文件读取操作 - **文件...

    计算机科学与技术专业毕业设计论文.doc

    - **创建表的脚本文件**:编写SQL语句来创建和初始化数据库表,包括字段定义、约束条件等。 5. **目录结构与通用模块**: - **目录结构**:合理的文件组织结构有利于团队协作和代码管理,通常包括源码、资源文件...

    2021-2022计算机二级等级考试试题及答案No.4087.docx

    题目中提到的选项B `new int[3][]` 是正确的,它表示一个长度为3的一维数组,每个一维数组的长度可以在初始化时单独指定。 2. 宏定义与程序输出:预处理器宏在C语言中用来替换文本。题目中的程序使用了宏`M(x, y, z...

    拼图小游戏原代码

    1. **图像处理**:在游戏初始化阶段,需要读取原始图片,将其分割成若干个相等大小的小块。这通常通过计算图片的宽度和高度来决定每个小块的尺寸,然后按照网格布局进行切割。例如,一个4x4的拼图游戏会将图片分为16...

    2021-2022计算机二级等级考试试题及答案No.12357.docx

    2. 构造函数:在面向对象编程中,构造函数是一个特殊的方法,用于初始化新创建的对象。每个类至少有一个构造函数,可以在创建对象时设置初始状态。 3. WPS 办公自动化软件:WPS Office是由金山软件开发的一款办公...

Global site tag (gtag.js) - Google Analytics