第一个:
class InitiallizeBlockClass { { field=200; } public int field=100; public InitiallizeBlockClass(int value) { this.field=value; } public InitiallizeBlockClass() { } } public class Example { public static void main(String args[]) { InitiallizeBlockClass obj=new InitiallizeBlockClass(); System.out.println(obj.field); obj=new InitiallizeBlockClass(300); System.out.println(obj.field); } }
输出结果:
Java字段初始化规律:若一个之前后被赋值两次,那么前一次的赋值会被第二次所覆盖。
第二个:
class people { public String species; { species="Human"; } } class man extends people { } public class Example { public static void main(String args[]) { man m=new man(); System.out.println(m.species); } }
People为父类,man为子类,子类中并未进行定义,但是可以输出结果,而且结果是在父类中定义的结果。所以当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行,成立。
第三个:
class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
输出结果:
静态初始化块的执行顺序:先执行static的赋值,之后再从上到下,依次进行各个类的赋值。
第四个:
class Employee { String name; long salary; static void information(Employee e) { System.out.println("姓名为:"+e.name); System.out.println("薪水为:"+e.salary); } } public class Example { public static void main(String args[]) { Employee e=new Employee(); e.name="Hui"; e.salary=5000; e.information(e); } }
输出结果:
静态方法中只允许访问静态数据,在静态方法中访问类的实例成员的话,就先实例化类,得到一个实例变量,将要使用的类作为参数传递给静态方法。