package com.bawei.com.reflection.fanshe;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Created by lenovo on 2018/1/24.
*/
public class reflection {
public static void main(String[] args) {
Person person = new Person();
//第一种
Class c1 = Person.class;
Class c2 = person.getClass();
Class c3 = null;
try {
c3 = Class.forName("com.bawei.com.reflection.fanshe.Person");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.print(c1 == c2);
System.out.print(c1 == c3);
try {
//建立对象
Person pp = (Person) c1.newInstance();
pp.fun();
} catch (Exception e) {
e.printStackTrace();
}
//获取无参构造函数
try {
// Constructor constructor = c1.getConstructor(null);//私有
Constructor declaredConstructor = c1.getDeclaredConstructor(null);//公有
Person pp1 = (Person) declaredConstructor.newInstance(null);
declaredConstructor.setAccessible(true);
pp1.fun();
} catch (Exception e) {
e.printStackTrace();
}
//获取有参构造
try {
//类型传惨
Constructor constructor = c1.getConstructor(String.class, int.class);
//数组的形式
// Constructor constructor1 = c1.getConstructor(new Class[]{String.class,Integer.class});
Person pp1 = (Person) constructor.newInstance("kson", 100);
pp1.fun();
} catch (Exception e) {
e.printStackTrace();
}
//获取公共的方法
try {
//获取方法 一个参数是 方法名 第2个是参数类型
Method method = c1.getMethod("fun", String.class);
//有反射调
method.invoke(c1.newInstance(), "张露");
} catch (Exception e) {
e.printStackTrace();
}
//获取私有的方法
try {
//获取方法 一个参数是 方法名 第2个是参数类型
Method method = c1.getDeclaredMethod("fun1", int.class);
//暴力
method.setAccessible(true);
//有反射调
method.invoke(c1.newInstance(), 100);
} catch (Exception e) {
e.printStackTrace();
}
//获取属性修改属性
try {
//获取私有属性
Person o= (Person) c1.newInstance();
Field field = c1.getDeclaredField("name");
field.setAccessible(true);
field.set(o,"zhanglu");
System.out.print(o.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.bawei.com.reflection.fanshe;
/**
* Created by lenovo on 2018/1/24.
*/
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.print("name=====" + name+"===========age==================="+age);
}
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;
}
public void fun() {
System.out.print("fun");
}
public void fun(String name) {
System.out.print("+name=====" + name);
}
private void fun1(int age) {
System.out.print("+age=====" + age);
}
}