学习资料链接:https://www.bilibili.com/video/av30023103/
确保加载的类信息符合JVM的规范,没有安全方面的问题。
正式为类变量(static变量)分配内存并设置类变量初始值的阶段(该初始值只是默认的初始值,并不是代码中设定的值)这些内存都将在方法区进行分配。
虚拟机常量池内的符号引用替换为直接引用的过程。
类加载全过程
package classinit;
public class Demo01 {
static{
System.out.println("Demo01静态块初始化");
}
public static void main(String[] args){
System.out.println("Demo01的main方法执行");
new A();
}
}
class A extends A_Father{
public static int width = 100;
static{
System.out.println("静态初始化类A");
width = 300;
}
}
class A_Father{
static{
System.out.println("静态初始化A的父类");
}
}
public static void main(String[] args){
System.out.println("Demo01的main方法执行");
System.out.println(A.width);
}
package classinit;
public class Demo01 {
static{
System.out.println("Demo01静态块初始化");
}
public static void main(String[] args){
System.out.println("Demo01的main方法执行");
System.out.println(A.MAX);
}
}
class A extends A_Father{
public static int width = 100;
public static final int MAX = 200;
static{
System.out.println("静态初始化类A");
width = 300;
}
}
class A_Father{
static{
System.out.println("静态初始化A的父类");
}
}
package classinit;
public class Demo01 {
static{
System.out.println("Demo01静态块初始化");
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("Demo01的main方法执行");
//主动引用
//new A();
//System.out.println(A.width);
Class.forName("classinit.A");
//被动引用
//System.out.println(A.MAX);
}
}
class A extends A_Father{
public static int width = 100;
public static final int MAX = 200;
static{
System.out.println("静态初始化类A");
width = 300;
}
}
class A_Father{
static{
System.out.println("静态初始化A的父类");
}
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("Demo01的main方法执行");
//主动引用
//new A();
//System.out.println(A.width);
//Class.forName("classinit.A");
//被动引用
//System.out.println(A.MAX);
A[] as = new A[10];
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("Demo01的main方法执行");
//主动引用
//new A();
//System.out.println(A.width);
//Class.forName("classinit.A");
//被动引用
//System.out.println(A.MAX);
A[] as = new A[10];
}
声明数组不会初始化类
package classinit;
public class Demo01 {
static{
System.out.println("Demo01静态块初始化");
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("Demo01的main方法执行");
//主动引用
//new A();
//System.out.println(A.width);
//Class.forName("classinit.A");
//被动引用
//System.out.println(A.MAX);
//A[] as = new A[10];
System.out.println(B.width);
}
}
class A extends A_Father{
public static int width = 100;
public static final int MAX = 200;
static{
System.out.println("静态初始化类A");
width = 300;
}
}
class A_Father{
static{
System.out.println("静态初始化A的父类");
}
}
class B extends A{
//public static int width = 100;
static{
System.out.println("静态初始化类B");
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。