反射
反射机制是在运行状态中: 对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
反射提供的功能: 在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
package reflect;
public interface MyInterface
{
void interfaceMethod();
}
package reflect;
public interface MyInterface2
{
void inteface2Method();
}
package reflect;
public class Person implements MyInterface,MyInterface2
{
private int id;
private String name;
private int age;
public Person(){}
public Person(int id) {
this.id = id;
}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
private Person(String name){
this.name=name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private void privateMethod() {
System.out.println("private method...");
}
private void privateMethod2(String name) {
System.out.println("private method..."+name);
}
public static void staticMethod(){}
package reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectDemo01
{
//通过反射获取类
public static void demo01()
{
//获取反射对象(反射入口):Class, 1 Class.foName(全类名(包加类名)) 2.XX.class 3.对象.getClass()
try {
//1.Class.forName(全类名)
Class perClazz= Class.forName("reflect.Person");
System.out.println(perClazz);
/*
拿到了类
class reflect.Person
*/
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
//2.类名.class
Class perClaszz2=Person.class;
System.out.println(perClaszz2);
//3.对象.getClass()
Person per=new Person();
Class perClazz3=per.getClass();
System.out.println(perClazz3);
}
//获取公共方法
public static void demo02(){
//Class入口
Class perClazz=null;
try {
perClazz=Class.forName("reflect.Person");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
//获取所有的公共的方法(1.本类以及父类,接口中的所有方法 2.符合访问修饰符规律)
Method[] methods = perClazz.getMethods();
for (Method method:methods){
System.out.println(method);
}
System.out.println("=============");
//获取当前类的所有方法(1.只能是当前类 2.忽略访问修饰符限制)
Method[] declaredMethods = perClazz.getDeclaredMethods();
for (Method method:declaredMethods){
System.out.println(method);
}
}
//获取所有接口
public static void demo03(){
Class perClazz=null;
try {
perClazz=Class.forName("reflect.Person");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
Class[] interfaces = perClazz.getInterfaces();
for (Class intere:interfaces)
{
System.out.println(intere);
}
}
//获取所有父类
public static void demo04() {