以下代码为何无法通过编译?哪儿出错了?
public class test { 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 test { { filed=200; } public int filed=100; public test(int value) { this.filed=value; } public test() { } public static void main(String[] args) { a1 obj1=new test(); System.out.println(obj1.filed); obj1=new test(300); System.out.println(obj1.filed); } }
public int field=100;在类初始化前面时
public class test { public int filed=100; { filed=200; } public test(int value) { this.filed=value; } public test() { } public static void main(String[] args) { test obj1=new test(); System.out.println(obj1.filed); obj1=new test(300); System.out.println(obj1.filed); } }
Java字段初始化的规律
执行类成员定义时指定的默认值或类的初始化块(类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。),到底执行哪一个要看哪一个“排在前面”。执行类的构造函数。
3、静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)
class test { 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); } }