1.静态变量是被类中所有对象共享,静态方法不能访问类中实例成员
math类中的所有方法都是静态的:Math.Random,PI..
类名.方法名,类名.静态变量
类初始化阶段:先执行最顶层父类的静态初始化块,然后依次向下,直到执行当前类的静态初始化块
对象初始化阶段:先执行最顶层父类的初始化块,最顶层的构造器,然后依次向下,直到执行当前类的初始化块、当前类的构造器
(先加载类再初始化对象)
总的执行顺序:(优先级从高到低。)
静态变量-静态代码块-变量-初始化块-构造器
静态代码块>mian方法>构造代码块>构造方法>普通代码块(在方法中的代码块)。
静态代码块和构造代码块的异同点
相同点:都是JVM加载类后且在构造函数执行之前执行,在类中可定义多个,一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行。静态代码块只在第一次new时执行一次,之后不在执行。而非静态代码块每new一次就执行一次。
此外,还有同步代码块:
使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。
总结
1.静态代码块是用来给类做初始化的,类加载是就会被执行,(注意它只被执行了一次);
2.构造代码块是用来给对象做初始化的,每次创建对象都会被执行,而且优先于构造方法先执行;
3.构造方法是用来给对象进行初始化的,每次创建对象就会选择相应的构造方法执行
4.普通代码是在方法里或者语句中出现的{},执行方式由他们的出现顺序决定,依次从上到下,先出现先执行;
网友评论