1.反射获取包名和类名
People people=new People();
System.out.println(people.getClass().getName());
运行结果
类名称->com.java.reflect.People
类名称->com.java.reflect.People
类名称->com.java.reflect.People
2.所有对象是class的实例
private static void getPeopleClass(){
Class<?> demo1 = null;
Class<?> demo2 = null;
Class<?> demo3 = null;
try {
demo1 = Class.forName("com.java.reflect.People");
demo2 = new People("tom", "cat").getClass();
demo3 = People.class;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("类名称->" + demo1.getName());
System.out.println("类名称->" + demo2.getName());
System.out.println("类名称->" + demo3.getName());
}
运行结果
类名称->com.java.reflect.People
类名称->com.java.reflect.People
类名称->com.java.reflect.People
3.Class对象创建实例
3.1. 无参构造器声明对象
private static void initialBean(){
Class<?>demo=null;
try {
demo=Class.forName("com.java.reflect.People");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
People people=null;
try {
people=(People)demo.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
people.setFirstName("firstname");
people.setLastName("lastname");
System.out.println(people.toString());
}
运行结果
People{firstName='firstname', lastName='lastname'}
3.2有参构造器声明对象
private static void getBeanByArgs() {
Class<?> demo = null;
try {
demo = Class.forName("com.java.reflect.People");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
People p1 = null;
People p2 = null;
People p3 = null;
Constructor<?>[] constructors = demo.getConstructors();
try {
p1 = (People) constructors[2].newInstance();
p2 = (People) constructors[1].newInstance("name", 20);
p3 = (People) constructors[0].newInstance("firstname", "lastname");
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
}
People{firstName='null', lastName='null', age=0}
People{firstName='name', lastName='null', age=20}
People{firstName='firstname', lastName='lastname', age=0}
3.3利用特定的构造器声明对象
getConstructors();方法返回的构造器是无序的
private static void getBeanByDeclaredConstructor(){
Class<?> demo = null;
try {
demo = Class.forName("com.java.reflect.People");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
People people=null;
try {
people= (People) demo.getDeclaredConstructor(String.class,Integer.class).newInstance("name",20);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(people);
}
运行结果
People{firstName='name', lastName='null', age=20}
3.4获取构造器的修饰符以及方法参数
Class<?> demo = null;
try {
demo = Class.forName("com.java.reflect.People");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Constructor<?> cons[] = demo.getConstructors();
for (int i = 0; i < cons.length; i++) {
Class<?> p[] = cons[i].getParameterTypes();
System.out.print("构造方法->");
int mo = cons[i].getModifiers();
System.out.println(Modifier.toString(mo) + " " + cons[i].getName());
for (int j = 0; j < p.length; j++) {
System.out.print(p[j].getName() + " arg=" + j);
if (j<p.length-1){
System.out.print(",");
}
}
System.out.println();
}
运行结果
构造方法->public com.java.reflect.People
java.lang.String arg=0,java.lang.String arg=1
构造方法->public com.java.reflect.People
java.lang.String arg=0,java.lang.Integer arg=1
构造方法->public com.java.reflect.People
4.获取实现的接口
private static void getInterface() {
Class<?> demo = null;
try {
demo = Class.forName("com.java.reflect.People");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Class<?>[] intes = demo.getInterfaces();
for (int i = 0; i < intes.length; i++) {
System.out.println("实现的接口->" + intes[i].getName());
}
}
运行结果
实现的接口->com.java.reflect.Country