一.请依据代码的输出结果,自行总结Java字段初始化的规律

 1 public static void main(String[] args) {
 2         
 3         InitializeBlockClass obj=new InitializeBlockClass();
 4         System.out.println(obj.field);
 5         
 6         obj=new InitializeBlockClass(300);
 7         System.out.println(obj.field);
 8     }
 9 
10 }
11 
12 class InitializeBlockClass{
13     //下面这句在初始化块之前与之后,会影响到field字段的初始值
14     //public int field=100;
15     
16     {
17         field=200;
18     }
19     public int field=100;
20     public InitializeBlockClass(int value){
21         this.field=value;
22     }
23     public InitializeBlockClass(){
24         
25     }
26 }

运行结果:

结论:初始化第一次是用了类的初始化块,第二次用了public的int初始化,所以第二次覆盖了第一次,输出了100;

         在main函数中给类InitializeBlockClass赋初值300,所以覆盖100,输出300;

         所以类的初始化有类的初始化块,还可以直接在类中赋值,还可以用一个函数为类的属性赋值,还可以构造函数。

 

二.当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

public class Inherit extends Father{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Inherit x;
        x = new Inherit();

    }

}
class Father{
    {
        int i = 100;
        System.out.println(i);
    }
}

运行结果:可知创建主类对象的时候,也把主类的父类初始化块执行了。

 

三.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员。

方法(1):

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);  //输出静态变量
    }
    
}

结果截图:

方法(2):

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);  //输出静态变量
    }
    
}

结果截图:

 

四.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?“

public class Employee {

    public static void main(String[] args) {
        New x = new New();
        New y = new New();
        New z = new New();//三个对象
        New.Count();//输出数量
    }

}
 class New{
    static int n ;
     New(){
        n+=1;  //每定义一个对象,n+1
    }
    static void Count(){
        System.out.println(n);  //输出静态变量
    }
    
}

结果截图:

posted on 2015-10-16 19:17  小嵩  阅读(2784)  评论(0编辑  收藏  举报