类与对象——动手动脑
1.以下代码为啥无法编译通过?
在java语言中,每个类至少有一个构造方法。如果程序中没有显式定义任何构造方法,
那么java语言将自动提供一个隐含的默认构造方法。只要程序中已经显式定义了构造方法。
那么java语言将不再提供隐含的默认构造方法。
2.自行总结Java字段初始化的规律
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(){
}
}
结论:初始化第一次是用了类的初始化块,第二次用了public的int初始化,所以第二次覆盖了第一次,输出了100;
在main函数中给类InitializeBlockClass赋初值300,所以覆盖100,输出300;
所以类的初始化有类的初始化块,还可以直接在类中赋值,还可以用一个函数为类的属性赋值,还可以构造函数。
3.如何在静态方法中访问类的实例成员。
public class Employee { static int n = 200; //静态变量 public static void main(String[] args) { New e = new New(); n = e.Shi(); //将实例变量赋值给静态变量 New.Jing(n); // } } class New{ int m = 100; //实例变量 int Shi(){ int x; x = m; return x;//实例函数,返回一个实例值 } static void Jing(int x){ System.out.println(x); //输出静态变量 } }
public static void main(String[] args) { New e = new New(); /*n = e.Shi(); //将实例变量赋值给静态变量*/ e.Shi(); New.Jing(); } } class New{ int m = 100; //实例变量 static int n = 200; void Shi(){ n = m; //实例函数,返回一个实例值 } static void Jing(){ System.out.println(n); //输出静态变量 } }