java基础加强 反射 day01

获取反射的三种方式java.util.Date

                //类名.class
Class claz1 = Date.class;
//对象.getClass();
Class claz2 =  new Date().getClass();
//Class.forName();  此方法在框架中应用甚广
Class claz3 = Class.forName("java.util.Date");
//同一个类在jvm中只会加载一份字节码
System.out.println(claz1==claz2);//true
System.out.println(claz2==claz3);//true
System.out.println(claz1==claz3);//true

八大基本类型

                //八大基本类型和void是没有类的概念,但是却都有class属性所以
Class intClass = int.class;
Class voidClass = void.class;
//所有的包装类型中都有个TYPE属性返回的是该包装类的基本类型的字节码
//(Integer)的基本类型就是int但是泛型无法使用基本类型所以还是只能写(Integer)但实际上是int.class
Class<Integer> type = Integer.TYPE; 
System.out.println(type == intClass);//true

数组类型

                //由于并没有class来描述 数组 这个特殊类所以在数组中只能使用  对象和类
//使用对象很好理解  但是为什么能使用  类.class呢
int[] a = {1,2};
Class<int[]> class1 = (Class<int[]>) a.getClass();
Class<int[]> class2 = int[].class;

//Class类的api上写着这么一句话  所有的类型和维数都相同的数组共用一份字节码
//看下面代码
Class class3 = int[].class;
Class class4 = int[][].class;
System.out.println(class3 == class4);//false

Class class5 = int[].class;
Class class6 = String[].class;
System.out.println(class5 == class6);//false

int[] a7 = {1,2};
int[] a8 = {1,2,3,4};
Class class7 = a7.getClass();
Class class8 = a8.getClass();
System.out.println(class7 == class8);//true

通过反射来获取构造器Constructor

//getConstructors() 返回包含一个数组 Constructor对象反射由此表示的类的所有公共构造 类对象。
Class<User> clz = User.class;
Constructor<?>[] constructors = clz.getConstructors();//两个
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}
//getDeclaredConstructors() 返回包含一个数组 Constructor对象反射由此表示的类的所有构造 类对象(包括private)。
Constructor<?>[] constructors2 = clz.getDeclaredConstructors();//三个
for (Constructor<?> constructor : constructors2) {
System.out.println(constructor);
}
//getConstructor(类<?>... parameterTypes) 返回指定的一个 Constructor对象(只能返回public修饰的)。 
Constructor<User> constructor = clz.getConstructor();//无参构造
System.out.println(constructor);
Constructor<User> constructor2 = clz.getConstructor(String.class);//有且仅有一个String的构造器
System.out.println(constructor2);
Constructor<User> constructor3 =                 clz.getConstructor(String.class,int.class);//java.lang.NoSuchMethodException 找不到该方法
//getDeclaredConstructor(类<?>... parameterTypes) 返回一个 Constructor对象(获取一个,忽略权限修饰符)。 
Constructor<User> constructor4 = clz.getDeclaredConstructor(String.class,int.class);//String + int的构造器

System.out.println(constructor4);    

User类

class User{
	public User(){
		
	}
	public User(String name){
		
	}
	private User(String name,int age){
		
	}
	
}


猜你喜欢

转载自blog.csdn.net/qq_39205291/article/details/80834557