java Class简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23013309/article/details/80550357
//java 类在编译后会产生一个以.class结尾的字节码文件
//该文件内存储了Class对象的相关信息,Class对象表示的是类在运行时的类型信息
//Class与java.lang.reflect构成了java的反射技术
//当我们要使用类时,例如使用new 操作符实例化一个新对象,访问类的静态方法,
//jvm会先检查该类的有无加载,若有加载了就会直接进行相应的操作
//若检查到没有加载,jvm就会先去加载这个类的对应的字节码文件(这里会进行相应的检查)
//当加载成功后,就可以进行相应的操作了
public class ClassTest{
	public static void main(String [] args) throws Exception{
		System.out.println("before loading Circle.");
		// 可以指定要加载的类
		Class.forName("Circle"); // 这里需要捕获异常或者抛出异常到下一级
		System.out.println("after loading Circle.");
		System.out.println("before loading Rectangle.");
		Rectangle re = new Rectangle();
		System.out.println("after loading Rectangle.");
		System.out.println("************************************");
		System.out.println("before loading A1.");
		System.out.println(A1.trueFinal);
		
		System.out.println("before loading A2.");
		System.out.println(A2.noFinal);
		System.out.println("************************************");
		
		//使用类字面常量来得到Class,利用反射来构建实例对象(调用的是默认构造函数)
		// 调用类字面常量不会触发类的初始化
		Class<?> c = A3.class;
		System.out.println("before loading A3.");
		A3 a3 = (A3)c.newInstance();
		System.out.println("************************************");
		//根据运行结果:在继承关系里,在类的初始化时总是先初始化父类,在初始化子类
		//实例化时也是如此
		System.out.println("before loading D1.");
		D1 d1 = new D1();
	}
}

class Circle {
	static {
		//类在加载初始时,会执行这段static代码块
		System.out.println("loading Circle...");
	}
}

class Rectangle {
	static {
		//类在加载初始时,会执行这段static代码块
		System.out.println("loading Rectangle...");
	}
}

class A1 {
	// 编译期常量,不会触发类的初始化
	public static final int trueFinal = 10;
	
	static {
		//类在加载初始时,会执行这段static代码块
		System.out.println("loading A1...");
	}
}

class A2 {
	// 静态常量,触发类的初始化
	public static int noFinal = 5;
	static {
		//类在加载初始时,会执行这段static代码块
		System.out.println("loading A2...");
	}
}

class A3 {
	static {
		//类在加载初始时,会执行这段static代码块
		System.out.println("loading A3...");
	}
}

class B1 {
	static {
		System.out.println("loading B1");
	}
	public B1(){
		System.out.println("B1's instance");
	}
}

class D1 extends B1{
	static {
		System.out.println("loading D1");
	}
	public D1(){
		System.out.println("D1's instance");
	}
}


猜你喜欢

转载自blog.csdn.net/qq_23013309/article/details/80550357