JAVA中类内容的先后加载顺序
JAVA 内容 加载 顺序 中类 先后
2023-06-13 09:14:28 时间
目录
1. 类内容的几个概念
a. 静态代码块
- 静态代码块在类被加载的时候执行,并且只执行一次,它的优先级是最高的,在构造代码块和构造函数和main方法之前。如果有多个静态代码块,按代码编写的顺序执行。
- 静态代码块只能在类里,不能在方法里,对于静态方法:在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。
- 静态代码块不能访问普通变量。
b. 构造代码块
- 构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行。
- 只要创建对象,构造代码块都会执行一次,构造函数可能存在多个的问题,不一定都会执行固定一个。
c. 构造函数
- (1)构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
- (2)构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。
- (3)构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
- (4)默认先调用父类的无参构造函数
d. 普通代码块
- 普通代码块是在方法体中定义的。且普通代码块的执行顺序和书写顺序一致。
2. 类实例化的执行顺序
a. 代码
JVM代码:
public class JVM {
JVM(){
System.out.println(" JVM的无参构造函数 "+count);
}
// 静态变量
public static int count;
{
System.out.println(" JVM的构造代码块 "+count);
}
static {
System.out.println(" JVM的静态代码块 "+count);
}
}
JVMParent代码:
public class JVMParent extends JVM{
JVMParent(){
System.out.println(" JVMParent的无参构造函数 "+count);
}
// 静态变量
public static int count;
{
System.out.println(" JVMParent的构造代码块 "+count);
}
static {
System.out.println(" JVMParent的静态代码块 "+count);
}
JVMParent(String str){
System.out.println(" JVMParent的有参构造函数 "+str+" "+count);
}
}
JVMSons代码:
public class JVMSons extends JVMParent{
public static void main(String[] args) {
System.out.println("main");
new JVMSons();
}
static {
System.out.println(" JVMSons的静态代码块 ");
}
JVMSons(){
System.out.println(" JVMSons的无参构造函数 ");
}
JVMSons(String str){
System.out.println(" JVMSons的有参构造函数 "+str);
}
{
System.out.println(" JVMSons的构造代码块 ");
}
}
父子关系:
b. 执行结果
根据上面的代码可以看到,我们的main方法、构造代码块、静态代码块都是没有顺序的放置,但是在输出结果里可以看到他们的执行是有固定顺序的,看下图:
在开发过程中可以根据具体业务去定义如何使用静态代码块、构造方法块、构造函数
相关文章
- Java中数组的输入输出
- 中级java笔试题_Java中级面试题合集[通俗易懂]
- 用eclipse创建JAVA程序的步骤
- java开发常用四大框架_大牛经验!常用的5款Java框架汇总[通俗易懂]
- java工作流_Java 实现简单工作流
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- 【说站】Java著作权结果出炉,谷歌战胜甲骨文
- Java递归函数实例[通俗易懂]
- java 自动补全_eclipse自动补全的设置[通俗易懂]
- Java 线程池之Jetty 线程池学习总结
- 【JAVA】Java 日志打印规范
- 整数划分问题(Java递归)
- 【错误记录】生成 Java 文档错误 ( Xxx.java:xx: 错误: 编码GBK的不可映射字符 )
- Java封装MySQL让编程更简单(java封装mysql)
- 保证java的jar包在后台运行详解编程语言
- 之间的交互Redis与Java实现交互的探索(redis和java)
- Java实现Redis事务管理(redis事务java)
- 处理解决Redis Java中不同过期时间的问题(redisjava过期)
- 策略处理Redis中Java的过期策略(redisjava过期)
- 深入学习:Linux下Java环境建设与配置(linux下java环境)
- 实现Java认证让你离Oracle更近一步(java认证oracle)
- 使用java执行定时任务示例