Home > Java > javaTutorial > Detailed explanation of the loading order of classes in Java

Detailed explanation of the loading order of classes in Java

高洛峰
Release: 2017-01-13 09:10:11
Original
1165 people have browsed it

This article introduces the loading sequence of classes in Java. Let’s take a look at the detailed introduction:

1. When the virtual machine loads a Java class for the first time, it will Static initialization blocks, static member variables, and static methods are initialized once

2. An instance of the class will only be created when the new method is called

3. Class instance creation process: Initialization is carried out according to the parent-child inheritance relationship. First, execute the initialization block part of the parent class, then the construction method of the parent class; then execute the initialization block of the subclass inherited by this class. Finally, there is the construction method of the subclass

4. When the class instance is destroyed, first destroy the subclass part, and then destroy the parent class part

Example

<span style="font-size: 14px;">public class Parent<br/>{<br/> public static int t = parentStaticMethod2();<br/> {<br/> System.out.println("父类非静态初始化块");<br/> }<br/> static<br/> {<br/> System.out.println("父类静态初始化块");<br/> }<br/> public Parent()<br/> {<br/> System.out.println("父类的构造方法");<br/> }<br/> public static int parentStaticMethod()<br/> {<br/> System.out.println("父类类的静态方法");<br/> return 10;<br/> }<br/> public static int parentStaticMethod2()<br/> {<br/> System.out.println("父类的静态方法2");<br/> return 9;<br/> }<br/> <br/> @Override<br/> protected void finalize() throws Throwable<br/> {<br/> // TODO Auto-generated method stub<br/> super.finalize();<br/> System.out.println("销毁父类");<br/> }<br/> <br/>}<br/>public class Child extends Parent<br/>{<br/> {<br/> System.out.println("子类非静态初始化块");<br/> }<br/> static<br/> {<br/> System.out.println("子类静态初始化块");<br/> }<br/> public Child()<br/> {<br/> System.out.println("子类的构造方法");<br/> }<br/> public static int childStaticMethod()<br/> {<br/> System.out.println("子类的静态方法");<br/> return 1000;<br/> }<br/> @Override<br/> protected void finalize() throws Throwable<br/> {<br/> // TODO Auto-generated method stub<br/> super.finalize();<br/> System.out.println("销毁子类");<br/> }<br/>}<br/>public class Test<br/>{<br/> <br/> public static void main(String[] args)<br/> {<br/> // TODO Auto-generated method stub<br/> Parent.parentStaticMethod();<br/>// Child child = new Child();<br/> <br/> }<br/><br/>}<br/></span>
Copy after login

Output

<span style="font-size: 14px;">父类的静态方法2<br/>父类静态初始化块<br/>父类类的静态方法<br/></span>
Copy after login

The static method in the class is loaded when it is called for the first time, and the static members in the class are loaded in the class Loaded in the order they appear. Output when calling static method 2

<span style="font-size: 14px;">父类的静态方法2<br/>父类静态初始化块<br/>父类的静态方法2<br/></span>
Copy after login

Comment out Parent.parentStaticMethod();

Remove the comment Child child = new Child();

<span style="font-size: 14px;">父类的静态方法2<br/>父类静态初始化块<br/>子类静态初始化块<br/>父类非静态初始化块<br/>父类的构造方法<br/>子类非静态初始化块<br/>子类的构造方法<br/></span>
Copy after login

Summary

The above is the entire content of this article. I hope the content of this article can bring some benefits to everyone’s study or work. For help, if you have any questions, you can leave a message to communicate.

For more detailed articles on the loading order of classes in Java, please pay attention to the PHP Chinese website!

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