Java中面向对象知识总结(2)

public class Test {
      public static final double PAI;
      public final double PAI2;
      public static double PAI3;
     
      public Test(){
        this.PAI =  3.1415926;    //错误,必须在定义时就赋值
        this.PAI2 =  3.1415926; //可以,初始化赋值。
        this.PAI3 = 3.1415926;//不可以 不能再构造方法中给静态变量赋值,因为静态变量加载时可能这个类并没有被加载。
      }
}

public class Test {
      public static final double PAI = 3.1415926;
      public final double PAI2  = 3.1415926;;
      public static double PAI3 = 3.1415926;;
      public double PAI4 = 3.1415926;     
     
      public static void test(){
        this.PAI = 3.14;
        this.PAI2 = 3.14;
        this.PAI3 = 3.14;
        this.PAI4 = 3.14;        //均存在错误,因为静态方法中不可以用this关键字
      }
}

public class Test {
      public static final double PAI;
      public final double PAI2;
      public static double PAI3 = 3.1415926;;
       
      public static void test(){
        PAI = 3.14;    //编译期常量不能在这赋值
        PAI2 = 3.14;  //静态方法不能直接调用成员变量,原因是这个成员变量还没有分配内存,需要通过对象调用
        PAI3 = 3.14;  //静态方法调用静态变量OK
}

package com.chen.test;
/**
 * 说出输出顺序
 * @author 陈家小哥
 *
 */
public class Test extends A {
    int num = 7777;
    private static A mm = new A();   
    static {
        System.out.println("1111");
    }
    {
        System.out.println("2222");
    }

public Test() {
        System.out.println("3333");
    }
    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.num);
    }
}

class A {
    int num = 5555;

public A() {
        System.out.println(num);
    }
}
输出结果:
5555
1111
5555
2222
3333
7777

解释:当类被加载时,先初始化静态的变量,输出5555和1111,然后调用父类的构造函数,输出5555,然后输出2222,最后调用子类的构造函数,输出子类的成员变量。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ae16f89347f14cb158436418d4d2ba07.html