美文网首页
Java基础整理(三)

Java基础整理(三)

作者: _笑口常开 | 来源:发表于2020-06-06 07:03 被阅读0次

理论基础

类的代码块种类:

  • 静态代码块
  • 初始化块
  • 构造方法

类的继承 调用顺序

  1. 首先调用父类静态代码块
  2. 然后调用子类静态代码块
  3. 调用父类初始化块
  4. 调用父类构造方法
  5. 调用子类初始化块
  6. 调用子类构造方法

类的静态变量实例化只会一次

代码实践

定义一个父类B

class B {
    static { 
        System.out.println("父类静态代码块");
    }
    public B() { 
        System.out.println("父类构造方法");
    }
    {
        System.out.println("父类初始化块");
    }
}

定义一个子类A继承自父类B

public class A extends B{
    static { 
        System.out.println("子类静态代码块");
    }
    public A() { 
        System.out.println("子类构造方法"+"\n");
    }
    {
        System.out.println("子类初始化块");
    }
    private static int x = 100;
}

子类加main函数运行程序观察调用情况

public static void main(String[] args){
} 
/*只打印
父类静态代码块
子类静态代码块*/

//创建一个实例
public static void main(String[] args){
  new A();
} 
/*父类子类初始化构造方法全打印出来了
父类静态代码块
子类静态代码块
父类初始化块
父类构造方法
子类初始化块
子类构造方法*/

对类静态变量进行操作,进行验证

x的修饰符为 static,所以 x 为类静态变量,即对于所有的实例来说,他们访问的x为同一个x;
类变量存储在方法区,不属于每个实例的私有。

A a1 = new A();
a1.x++; //x为101
        
A a2 = new A();
a2.x++; //x为102
        
a1 = new A(); //a1指向了一个新的A实例,但是依然访问的是同一个X
a1.x++; //x为103
        
A.x--; //x为102
System.out.println("x= "+ x);//x=102

相关文章

网友评论

      本文标题:Java基础整理(三)

      本文链接:https://www.haomeiwen.com/subject/dhszzhtx.html