标签:http 写法 com color 初始化块 载器 java 文件的 string
static { System.out.println("我是静态代码块"); }
1.执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。
2.随着类的加载而执行,而且只执行一次
先说一下类加载,一个程序要想运行,首先要把代码加载到内存中,然后才能去和CPU交流,这是冯诺依曼计算机规定的。Java也是一样,Java的.class字节码文件要想执行,首先也要加载到内存,由类加载器把字节码文件的代码加载到内存中,这一步就叫类加载,这是首先要进行的。
{ System.out.println("我是非静态代码块"); }
1.执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。
2.非静态代码块在每new一次就执行一次
都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋值。
1.静态代码块在非静态代码块之前执行(静态代码块--》非静态代码块--》构造方法)。
静态代码块只在第一次new执行一次,之后不在执行,而非静态代码块在每new一次就执行一次。非静态代码块可以 在普通方法中定义(个人感觉作用不大);而静态代码块不行。
2.静态代码块是自动执行的;
静态方法是被调用的时候才执行的;
静态代码块可以用来初始化一些项目最常用的变量和对象;静态方法可以用作不创建对象也可以能需要执行的代码。
public class Father{
Father(){
System.out.println("我是构造函数");
}
}
1.构造函数的名字必须和类名完全相同,构造函数不能有
2.返回值,不写void,构造函数不可以被子类继承
3.构造函数可以重载但是不可以被子类覆盖。
public class Father { static { System.out.println("父类的静态代码块"); } { System.out.println("父类的非静态代码块"); } Father() { System.out.println("父类的构造函数"); } public static void main(String[] args) { System.out.println("new父类前的main方法"); new Father(); System.out.println("new父类后的main方法"); } }
总结:
只在父类Class中的执行顺序:
静态代码块>new 对象前的main方法顺序执行>非静态代码块>构造函数>new 对象后的main方法顺序执行
public class Son extends Father { static { System.out.println("子类的静态代码块"); } { System.out.println("子类的非静态代码块"); } Son() { System.out.println("子类的构造函数"); } public static void main(String[] args) { System.out.println("new子类前的main方法"); new Son(); System.out.println("new子类后的main方法"); } }
总结:
在继承了父类的子类Class中的执行顺序:
父类的静态代码块>子类的静态代码块>new 对象前的main方法顺序执行>父类的非静态代码块>父类的构造函数>子类的非静态代码块>子类的构造函数>new 对象后的main方法顺序执行
标签:http 写法 com color 初始化块 载器 java 文件的 string
原文地址:https://www.cnblogs.com/mjtabu/p/11757528.html