JVM实践

package com.lsw.classloader;

class Parent{
 public static int a=3;
 public int b = 4;
 static {
  System.out.println("Parent static block");
 }
}
public class Test {
 public static void main(String[] args) throws ClassNotFoundException{
  //初始化流程  1.给类的静态变量赋默认值 a=0 执行静态代码块 
  //       2.给静态变量赋初始值a=3
  System.out.println(Parent.a);
  //static方法没有this的方法,在static方法内部不能调用非静态方法,反过来可以
  //而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法,这实际上是static方法的主要用途
  //静态变量和非静态变量的区别:静态变量被所有对象共享,在内存这种只有一个副本,在类初次加载的时候初始化。非静态变量是对象拥有,在对象创建的时候被初始化,存在多个副本
  /*System.out.println(Parent.b); 这种写法可以,因为类没有创建*/
  //连续创建两个Parent对象,静态代码块还是执行一次。说明静态代码块已在内存区域存在(存储在哪里?堆、栈)
  System.out.println(new Parent().b);
  System.out.println(new Parent().b);
  System.out.println("***********************");
  //java.lang.String 由根加载器进行加载 bootstrap
     Class clazz = Class.forName("java.lang.String");
  System.out.println(clazz.getClassLoader());   //结果为null
  //系统加载器或应用加载器加载
     clazz = Class.forName("com.lsw.classloader.Parent");
     System.out.println(clazz.getClassLoader());
 }
}

猜你喜欢

转载自www.cnblogs.com/mutong1228/p/8970888.html