1,总结Java字段初始化的规律。
Java初始化的地方有两个:初始化块和构造函数,其中初始化又分为实例初始化块和静态初始化块,实例初始化块没有关键字修饰,而静态初始化块由static修饰。
执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”
执行类的构造函数:类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。
2.当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。请自行编写示例代码验证以上结论
示例代码:
public class Jicheng {
public static void main(String[] args){
Son a=new Son();
a.show();
}
}
class Father{
String name;
{
name="Father";
}
}
class Son extends Father{
int age=20;
void show()
{
System.out.println("名字"+name);
System.out.println("年龄"+age);
}
}
3.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?请编写代码验证你的想法。
代码
class Exercise{
int a=0;
static int b;
static public int getb(int newb)
{
b=newb;
System.out.println(b);
return b;
}
public int num()
{
int a=1;
return a;
}
}
public class Shi {
public static void main(String[] args){
Exercise e=new Exercise();
e.getb(10);
e.num();
}
}
4.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”
代码:
class Jishu{
private static int a;
public Jishu()
{
a++;
}
public static int get()
{
return a;
}
}
public class DuixiangNum {
public static void main(String[] args){
Jishu j1=new Jishu();
Jishu j2=new Jishu();
System.out.println("创建对象的个数为:"+Jishu.get());
}
}