1.以下代码为何无法通过编译?哪出错了?
1 public class Test { 2 public static void main(String[] args) { 3 Foo obji=new Foo(); 4 } 5 } 6 class Foo{ 7 int value; 8 public Foo(int initValue) { 9 value=initValue; 10 } 11 }
出错原因:在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到java的构造函数的声明过程,因此,在类中没有书写构造函数的方法的时候,编译器默认继承Object类,并在编译的时候会产生一个参数为空的构造函数,然而在定义的Foo这个类的时候,给予了一个Foo(int)类型的构造方法,所以在上述Test的调用过程中,obj1并不能够调用到new Foo()这个构造函数的方法。
2.请根据代码的输出结果,自行总结JAVA字段初始化的规律。
规律如下:
所有类的变量都默认初始化为null
数字类的原始数据类型默认初始化为0
执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
执行类的构造参数
类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”
3.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
1 public class Test{ 2 int x=7; 3 static int y=8; 4 public static void test1(){ 5 System.out.println("非静态变量x为:"+new Test().x); 6 System.out.println("静态变量y为:"+y); 7 } 8 public static void main(String[] args) { 9 Test.test1(); 10 Test i=new Test(); 11 System.out.println("x="+ i.x); 12 } 13 }
运行结果如下:
非静态变量x为:7
静态变量y为:8
x=7