JavaEE进阶(15) 类、接口、数组、数据类型+void获得Class字节码对象的方法

获得Class字节码对象【就是获得具体的类型 】       ==》得到了一个具体的类  ==》一个类只有一个Class对象:一个类型只有一个字节码对象

1.类获取字节码对象 
     方式①:类名.class
     方式②:对象名.getClass()
     方式③:Class.forName("类的完全限定名 ")
2.接口获取字节码对象
    方式①:接口名.class
    方式②:Class.forName("接口的完全限定名")    
3.数组获取字节码对象
    方式①:类型.class()
    方式②:类型名.getClass()
4.数据类型+void获取字节码对象
    方式①:类型.class
    方式②:包装类.TYPE
  
反射技术:可以在运行时期后动态的去修改类的属性 (可理解为:使用一种技术在程序运行时就能去操作java对象中的属性、方法、构造方法等)
注意:实际开发中 一个类并不存在,但是我们还是可以使用哪个类[开发过程中可以这个样子写,但是真正运行的时候这个类还是必须存在]

package com.zhengqing.Demo;

/**
 * 获得Class对象【就是获得具体的类型 】       ==》得到了一个具体的类  ==》一个类只有一个Class对象:一个类型只有一个字节码对象
 * 1.类获取字节码对象 
 *    方式①:类名.class
 *    方式②:对象名.getClass();
 *    方式③:Class.forName("类的完全限定名 ");
 * 2.接口获取字节码对象
 *    方式①:接口名.class
 *    方式②: Class.forName("接口的完全限定名")	
 * 3.数组获取字节码对象
 *    方式①:类型名.getClass()
 *    方式②: 类型.Class()
 * 4.数据类型+void获取字节码对象
 *    方式①:类型.class
 *    方式②:包装类.TYPE
 *   
 * 反射技术:可以在运行时期后动态的去修改类的属性 (可理解为:使用一种技术在程序运行时就能去操作java对象中的属性、方法、构造方法等)
 * 注意:实际开发中 一个类并不存在,但是我们还是可以使用哪个类[开发过程中可以这个样子写,但是真正运行的时候这个类还是必须存在]
 * @author 郑清
 */
public class GetClassObjectDemo {
 
	public static void main(String[] args) throws ClassNotFoundException {
		getClassObject();//类获取字节码对象       (包含枚举)
		getInterfaceClassObject();//接口获取字节码对象
		getArrayClassObject();//数组获取字节码对象     (包含一维数组、二维数组)
		getDataOrVoidClassObject();//数据类型+void获取字节码对象
	}
	
	public static void getClassObject() throws ClassNotFoundException{
		//Person类
		Class cla1 = Person.class;
		Class cla2 = new Person().getClass();
		Class cla3 = Class.forName("com.zhengqing.Demo.Person");
		System.out.println("类获取字节码对象:\n" + (cla1==cla2));//true
		System.out.println(cla1==cla3);//true
		System.out.println(cla2==cla3);//true
		//枚举 Sex
		Class cla4 = Sex.class;
		Class cla5 = Sex.man.getClass();
		Class cla6 = Class.forName("com.zhengqing.Demo.Sex");
		System.out.println("枚举获取字节码对象:\n" + (cla4==cla5));
		System.out.println(cla4==cla6);
		System.out.println(cla5==cla6);
	}
	public static void getInterfaceClassObject() throws ClassNotFoundException{
		Class cla1 = Runnable.class;
		Class cla2 = Class.forName("java.lang.Runnable");
		System.out.println("接口获取字节码对象:" + (cla1==cla2));//true
	}
	public static void getArrayClassObject() {
		//数组
		int[] arr = new int[10];
		Class cla1 = int[].class;
		Class cla2 = arr.getClass();
		System.out.println("一维数组获取字节码对象:" + (cla1==cla2));//true
		int[][] arr2 = new int[20][15];
		Class cla3 = arr2.getClass();
		System.out.println("二维数组获取字节码对象:" + (cla1==cla3));//false
	}
	public static void getDataOrVoidClassObject() throws ClassNotFoundException{
		//数据类型
		Class cla1 = int.class;//基本数据类型
		Class cla2 =Integer.class;//引用数据类型
		Class cla3 = Integer.TYPE;//TYPE获取的基本数据类型
		System.out.println("数据类型获取字节码对象:\n" + (cla1 == cla2));//false
		System.out.println(cla1 == cla3);//true
		System.out.println(cla2==cla3);//false
		//void
		Class cla4 = void.class;
		Class cla5 = Void.class;
		Class cla6 = Void.TYPE;
		System.out.println("void获取字节码对象:\n" + (cla4==cla5));//false
		System.out.println(cla4==cla6);//true
		System.out.println(cla5==cla6);//false
	}
}
class Person{}
enum Sex{
	man
}

运行结果图:

JavaEE进阶(15) 类、接口、数组、数据类型+void获得Class字节码对象的方法_第1张图片

你可能感兴趣的:(-----❷,JavaEE进阶)