1.变量初始化
1 package treat; 2 class InitializeBlockClass 3 { 4 public int field=100; 5 { 6 field=200; 7 } 8 public InitializeBlockClass(int value) 9 { 10 this.field=value; 11 } 12 public InitializeBlockClass() 13 { 14 15 } 16 } 17 18 public class treat { 19 public static void main(String args[]) 20 { 21 InitializeBlockClass obj=new InitializeBlockClass(); 22 System.out.println(obj.field); 23 obj=new InitializeBlockClass(300); 24 System.out.println(obj.field); 25 } 26 }
在main函数中第一次输出是200,第二次是300,这是因为第一次调用的是默认构造函数,而类中的变量在之前已经初始化,而构造函数并不能改变变量的值所以变量值是初始化框里的200,第二次调用了带参数的构造函数,构造函数直接将值返回,就算构造函数在前输出的值也一样都是300.
2.如何在静态方法中调用非静态方法和字段
1 package treat; 2 3 public class treat { 4 5 public int dg=0; 6 void fun() 7 { 8 System.out.println("hello world!!"); 9 } 10 static void play(treat a)//通过形参传递对象实现非静态方法的调用 11 { 12 a.fun(); 13 a.dg=8;//调用对象改变非静态字段的值 14 System.out.println(a.dg); 15 } 16 public static void main(String args[]) 17 { 18 treat a=new treat(); 19 treat.play(a); 20 } 21 }
在上面的程序中可以发现可以通过形参传递对象的方法来调用非静态方法和字段。