public class InitializeBlockDemo {
/**
* @param args
*/
public static void main(String[] args) {
InitializeBlockClass obj=new InitializeBlockClass();
System.out.println(obj.field);
obj=new InitializeBlockClass(300);
System.out.println(obj.field);
}
}
class InitializeBlockClass{
//下面这句在初始化块之前与之后,会影响到field字段的初始值
//public int field=100;
{
field=200;
}
public int field=100;
public InitializeBlockClass(int value){
this.field=value;
}
public InitializeBlockClass(){
}
}
结果为100 300;明显java中类的初始化块会优先运行切只运行一次,如果类中再对这个变量赋值就会改变这个变量的值,其中也包括调用函数赋值。
package demo;
public class In extends Father{
public static void main(String[] args) {
// TODO Auto-generated method stub
In x;
x = new In();
}
}
class Father{
{
int i = 100;
System.out.println(i);
}
}
结果为100 说明当当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行
package demo;
public class In{
static int n = 10;
public static void main(String[] args){
Stac s = new Stac();
n = s.fuzhi();
s.Output(n);
}
}
class Stac{
int a = 20;
int fuzhi(){
int x;
x = a;
return x;
}
static void Output(int b){
System.out.println(b);
}
}
结果为 20
用静态方法访问类的实例成员是将类的实例变量赋值给静态变量再用静态方法输出。