1、
public class a1 { public static void main(String[] args) { Foo obj1=new Foo(); } } class Foo { int value; public Foo(int initValue) { value=initValue; } }
以下代码为何无法通过编译?哪儿出错了?
这串代码,类Foo已经定义了构造函数,构造函数中有参数,当开辟新空间的时候需要进行初始化;
没有构造函数的时候,系统会自动出没有参数的构造函数;
2、public int field=100;在类初始化后面时:
public class a1 { { filed=200; } public int filed=100; public a1(int value) { this.filed=value; } public a1() { } public static void main(String[] args) { a1 obj1=new a1(); System.out.println(obj1.filed); obj1=new a1(300); System.out.println(obj1.filed); } }
public int field=100;在类初始化前面时:
public class a1 { public int filed=100; { filed=200; } public a1(int value) { this.filed=value; } public a1() { } public static void main(String[] args) { a1 obj1=new a1(); System.out.println(obj1.filed); obj1=new a1(300); System.out.println(obj1.filed); } }
Java字段初始化的规律
执行类成员定义时指定的默认值或类的初始化块(类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。),到底执行哪一个要看哪一个“排在前面”。
执行类的构造函数。
3、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
class a1 { public static void main(String[] args) { Myclass m=new Myclass(); m.output(); } } class Myclass { int i=100; static public void output() { Myclass a=new Myclass(); System.out.println(a.i); } }