• 类加载与对象初始化


    1. 初始化原因:避免发生空指向异常。

    2. 类加载与初始化的顺序:

        2.1 类加载时间:

             每个类的编译代码都存在于他自己的独立文件中,该文件的加载通常发生在创建类的第一个对象时,或是访问类的static域或static方法时。

        2.2 初始化顺序:(先父类后子类,创建对象之前先对类中的域进行初始化)

           首先,类加载器主动加载主类(主类的初始化顺序与下面普通类一样),找到main方法,在main方法中根据第一行要创建的对象,加载该类的字节码文件,如果编译器注意到她有基类(这是由extends关键字得知)则继续加载(,不管是否需要创建基类对象,这都要发生。)在根基类中首先的static初始化,static代码块,依次是子类,至此类加载和静态初始化及静态代码快的执行已经完毕,对象就可以被创建。首先对象中所有的域都会设为默认值,然后在调用父类的构造方法之前普通域会被初始化,依次执行直到完成初始化工作。

    3. 代码验证:

        class Person{
     private static String city = "shanxi" ;
     private String name = new String("wh") ;
     private String age ;
     static{
      System.out.println(city+"perosn静态代码块");
     }
     {
      System.out.println(name+"普通块"+age);
     }
     public Person(String name,String age){
      System.out.println(city+"---------->"+this.name+"----------->"+this.age);
      this.name = name ;
      this.age  = age ;
      System.out.println(city+"---------->"+this.name+"----------->"+this.age);
     }
    }
    class Student extends Person{
     private static String school = "xd" ;
     private String sname = new String("sn") ;
     private String sage ;
     static{
      System.out.println(school+"   student静态代码块");
     }
     {
      System.out.println(sname+"   student普通块"+sage);
     }
     public Student(String name,String age){
      super(name,age) ;
      System.out.println(Student.school+"------------>"+this.sname+"------->"+this.sage);
      this.sname = name ;
      this.sage = age ;
      System.out.println(Student.school+"------------>"+this.sname+"------->"+this.sage);
     }
    }
    public class InitSort {
     public static void main(String[] args) {
      Student s1 = new Student("cjt","23") ;
      Student s2 = new Student("cjr","21") ;
     }
    }

    输出:

    shanxiperosn静态代码块
    xd   student静态代码块
    wh普通块null
    shanxi---------->wh----------->null
    shanxi---------->cjt----------->23
    sn   student普通块null
    xd------------>sn------->null
    xd------------>cjt------->23
    wh普通块null
    shanxi---------->wh----------->null
    shanxi---------->cjr----------->21
    sn   student普通块null
    xd------------>sn------->null
    xd------------>cjr------->21

  • 相关阅读:
    集合综合练习<三>
    集合综合练习<二>
    集合综合练习<一>
    java打分系统
    mysql存储过程
    mysql的视图、索引、触发器、存储过程
    mysql
    Java 集合底层原理剖析(List、Set、Map、Queue)
    HashMap底层实现
    Gradle
  • 原文地址:https://www.cnblogs.com/java-cjt/p/3844723.html
Copyright © 2020-2023  润新知