package com.aaa.reflect;
public class Person1 {
public static void main(String[] args) throws Exception{
Class<?> clazz1 =Class.forName("com.aaa.reflect.Person1");
System.out.println(clazz1);
Class<?> clazz2=Person1.class;
System.out.println(clazz2);
Person1 person=new Person1();
Class<?> clazz3=person.getClass();
System.out.println(clazz3);
}
}
package com.aaa.reflect;
import java.lang.reflect.Constructor;
public class Person2 extends Person{
public Person2(){
System.out.println("无参构造");
}
public Person2(String name){
System.out.println("有参构造");
}
private Person2(String name,Integer age){
System.out.println("私有有参构造");
}
public static void main(String[] args) throws Exception{
Class<?> clazz=Person2.class;
System.out.println("获取到所有的公共构造方法:");
Constructor<?>[] constructors = clazz.getConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}
System.out.println("根据参数获取构造方法:");
Constructor<?> constructor = clazz.getConstructor(String.class);
System.out.println(constructor);
System.out.println("获取所有的构造:");
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
for (Constructor<?> constructor2 : declaredConstructors) {
System.out.println(constructor2);
}
System.out.println("根据参数获取私有 的构造:");
Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(String.class,Integer.class);
System.out.println(declaredConstructor);
}
}
package com.aaa.reflect;
import java.lang.reflect.Method;
public class Person3 {
public void info(){
System.out.println("无参的方法");
}
public void info(String name){
System.out.println("有一个参数的方法");
}
private void info(String name,Integer age){
System.out.println("有两个参数的私有方法");
}
public static void main(String[] args)throws Exception {
Class<?> clazz=Person3.class;
System.out.println("获取所有的公共的方法, :");
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method);
}
System.out.println("获取有一个参数的方法");
Method method = clazz.getMethod("info",String.class);
System.out.println(method);
System.out.println("获取所有声明的方法:");
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method2 : declaredMethods) {
System.out.println(method2);
}
System.out.println("获取有两个参数的私有方法");
Method declaredMethod = clazz.getDeclaredMethod("info",String.class,Integer.class);
System.out.println(declaredMethod);
}
}
package com.aaa.reflect;
import java.lang.reflect.Field;
public class Person4 extends Person{
public String name;
public int age;
private String address;
public static void main(String[] args) throws Exception{
Class<?> clazz=Person4.class;
System.out.println("获取所有的属性,包含父类的属性:");
Field[] fields = clazz.getFields();
for (Field field : fields) {
System.out.println(field);
}
System.out.println("获取name属性:");
Field field = clazz.getField("name");
System.out.println(field);
System.out.println("获取所有声明的属性:");
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field2 : declaredFields) {
System.out.println(field2);
}
System.out.println("获取私有属性:");
Field declaredField = clazz.getDeclaredField("age");
System.out.println(declaredField);
}
}
package com.aaa.reflect;
import java.lang.reflect.Constructor;
public class Person5 {
private String name="张三";
private Integer age;
public Person5(){
System.out.println("无参构造");
}
public Person5(String name){
this.name=name;
System.out.println("有参构造");
}
public Person5(String name,Integer age){
this.name=name;
this.age=age;
System.out.println("私有有参构造");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public static void main(String[] args) throws Exception{
Class<?> clazz=Class.forName("com.aaa.reflect.Person5");
Person5 person1= (Person5)clazz.newInstance();
System.out.println(person1.getName());
Constructor<?> constructors = clazz.getConstructor(String.class);
Person5 person2= (Person5)constructors.newInstance("李四");
System.out.println(person2.getName());
Constructor<?> constructor= clazz.getConstructor(String.class,Integer.class);
Person5 person3= (Person5)constructor.newInstance("王五",20);
System.out.println(person3.getName()+" "+person3.getAge());
}
}
package com.aaa.reflect;
import java.lang.reflect.Method;
public class Person6 {
private String name;
public void info(){
System.out.println("无参方法");
}
public void info(String name){
this.name=name;
System.out.println("有参方法");
System.out.println(name);
}
private String info(String name,Integer age){
this.name =name;
System.out.println("私有有参方法");
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args)throws Exception {
Class<?> clazz=Person6.class;
Person6 p = (Person6) clazz.newInstance();
Method method = clazz.getMethod("info");
method.invoke(p );
method = clazz.getMethod("info", String.class);
method.invoke(p, "张三");
method=clazz.getDeclaredMethod("info",String.class,Integer.class);
System.out.println(method.invoke(p,"李四",20));
}
}
package com.aaa.reflect;
import java.lang.reflect.Field;
/**
* 利用反射设置属性值
*
* @author Administrator
*
*/
public class Person7 extends Person{
public String name;
public Integer age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static void main(String[] args) throws Exception {
Class<?> clazz = Person7.class;
Field filed = clazz.getDeclaredField("address");
//filed.setAccessible(true);
Person7 p7 = (Person7)clazz.newInstance();
filed.set(p7, "郑州");
System.out.println(p7.getAddress());
}
}
package com.aaa.reflect;
import java.lang.reflect.Field;
public class Person8 {
public static void main(String[] args) throws Exception {
Class<?> clazz = Person7.class;
Field filed = clazz.getDeclaredField("address");
filed.setAccessible(true);
Person7 p7 = (Person7)clazz.newInstance();
filed.set(p7, "郑州");
System.out.println(p7.getAddress());
}
}