Loading

类与对象——动手动脑

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

 

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

posted @ 2018-10-21 16:40  李旭2018  阅读(111)  评论(0编辑  收藏  举报