Home > Java > javaTutorial > A brief discussion on the loading order of parent classes and subclasses in Java

A brief discussion on the loading order of parent classes and subclasses in Java

高洛峰
Release: 2017-01-13 09:19:00
Original
1429 people have browsed it

class Parent {
   // 静态变量
   public static String p_StaticField = "父类--静态变量";
   // 变量(其实这用对象更好能体同这一点,如专门写一个类的实例)
  
   //如果这个变量放在初始化块的后面,是会报错的,因为你根本没有被初始化
   public String p_Field = "父类--变量";
   // 静态初始化块
   static {
       System.out.println(p_StaticField);
       System.out.println("父类--静态初始化块");
   }
   // 初始化块
   {
       System.out.println(p_Field);
       System.out.println("父类--初始化块");
   }
   // 构造器
   public Parent() {
       System.out.println("父类--构造器");
   }
}
public class SubClass extends Parent {
   // 静态变量
   public static String s_StaticField = "子类--静态变量";
   // 变量
   public String s_Field = "子类--变量";
   // 静态初始化块
   static {
       System.out.println(s_StaticField);
       System.out.println("子类--静态初始化块");
   }
   // 初始化块
   {
       System.out.println(s_Field);
       System.out.println("子类--初始化块");
   }
   // 构造器
   public SubClass() {
       //super();
       System.out.println("子类--构造器");
   }
   // 程序入口
   public static void main(String[] args) {
       System.out.println("*************in main***************");
       new SubClass();
       System.out.println("*************second subClass***************");
       new SubClass();
   }
}
Copy after login

Output result
Parent class--static variable
Parent class--static initialization block
Subclass--static variable
Subclass--static initialization block
*************in main****************
Parent class--Variable
Parent class--Initialization block
Parent class--Constructor
Subclass--Variable
Subclass--Initialization block
Subclass--Constructor
******************second subClass ***************
Parent class--Variable
Parent class--Initialization block
Parent class--Constructor
Subclass--Variable
Subclass--Initialization block
Subclass--Constructor

Result analysis:
Obviously after loading the main method, the static variables are executed regardless of the parent class or the subclass. Then there are the ordinary variables and constructors of the parent class and subclass. This is because when you want to create an object of a subclass, you find that this class needs a parent class, so you load the .class of the parent class in, then initialize its ordinary variables and initialization code blocks in sequence, and finally its constructor, and then you can start For the work of the subclass, load the .class of the subclass and do the work of the subclass.

In addition, in Java, subclasses will have a default constructor called super() of the parent class. When there is only a default constructor,
Java will do it for you, we can do an experiment. , if you comment out the default constructor in the parent class and add a constructor with parameters, if
super(argument) is not added to the subclass, a syntax error will be reported
If we put it in the Main method Comment out all the contents, you will find that only

will be output. Parent class--static variable
Parent class--static initialization block
Subclass--static variable
Subclass-- Static initialization block
Others will not be output. The reason? ​Also study


For more detailed explanations of the loading order of parent classes and subclasses in Java, please pay attention to the PHP Chinese website for related articles!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template