反射技术代码:
package myreflect;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;
import java.util.Set;
public class T1 {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
/**
* 获取反射技术的三种方式
*
/
//1.使用Class获取
Class cls1 = Preson.class;
Preson preson1 = cls1.newInstance();
preson1.show();
//2、通过.getClass方式得到字节码对象
Class<? extends Preson> cls2 = new Preson().getClass();
Class<? extends Preson> cls22 = new Preson().getClass();
Preson preson2 = cls2.newInstance();
Preson preson22 = cls22.newInstance();
preson2.show();
System.out.println(“判断不同反射技术得到的两个对象是否式一个:”+(preson1preson2));
System.out.println(“判断不同反射技术得到的两个对象是否式一个:”+(cls2cls22));
System.out.println(“判断同一种反射技术得到的两个对象是否式一个:”+(preson2==preson22));
// //3、通过Class.forName(文本路径)的形式
// String path = “com.tude.cn.myreflect.Preson”;
// Class prethon3 = Class.forName(path);
}
// Set strings = properties.stringPropertyNames();
// for (String s:strings){
// System.out.println(properties.get(s));
// }
@Test
public void mq1() throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {
//3、通过Class.forName(文本路径)的形式
String path = “myreflect.Preson”;
Class preson3 =(Class) Class.forName(path);
Preson preson33 = (Preson) preson3.newInstance();
Field field = preson3.getDeclaredField(“age”);
//改变值
field.setAccessible(true);
field.set(preson33,22);
Object o = field.get(preson33);
System.out.println(o);
preson33.show();
}
/*
* 利用Class.forname的方式getconstruct获得构造器
*/
@Test
public void t1() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
String path = “myreflect.Preson”;
Class preson = (Class)Class.forName(path);
Constructor constructor = preson.getDeclaredConstructor();//无参构造器
Constructor constructor1 = preson.getDeclaredConstructor(String.class,int.class);//无参构造器
Preson p = (Preson) constructor.newInstance();
Preson p1 = (Preson) constructor1.newInstance(“白菜”,50);
}
/**
* 利用第二种反射的方式获得构造器
* Class<? extends Preson> cls2 = new Preson().getClass();
* Preson preson2 = cls2.newInstance();
*/
@Test
public void t2() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//2、通过.getClass方式得到字节码对象
Class<? extends Preson> cls2 = new Preson().getClass();
Constructor constructor = cls2.getDeclaredConstructor();
Constructor constructor1 = cls2.getConstructor(String.class);
Preson p = (Preson)constructor.newInstance();
Preson p1 = (Preson)constructor1.newInstance("cvhj");
Constructor constructor2 = cls2.getConstructor(int.class);
Preson p2 = (Preson)constructor2.newInstance(22);
p2.setName("fghjkl");
System.out.println(p2.getName());
}
/**
* 利用第一种反射技术的方式获得构造器
*/
@Test
public void t3(){
Preson preson = new Preson("hi解开纽扣",32);
System.out.println(preson.toString());
}
/**
* 利用field方法获取值
* 利用第一种反射方式
*
*/
@Test
public void t4() throws IllegalAccessException, InstantiationException, NoSuchFieldException {
//1.使用Class获取
Class<Preson> cls1 = Preson.class;
Preson preson1 = cls1.newInstance();
Field field = cls1.getField("name");
field.set(preson1, "办卡实现");
// System.out.println(“名字是:”+preson1.name);
//获取属性值
Object o = field.get(preson1);
System.out.println(o);
}
@Test
public void t5() throws IllegalAccessException, InstantiationException, NoSuchFieldException {
//1.使用Class获取
Class<Preson> cls1 = Preson.class;
Preson preson1 = cls1.newInstance();
Field[] field = cls1.getFields();
for (int i = 0; i < field.length; i++) {
field[i].setAccessible(true);
//获取属性值
Object password = field[i].get(preson1);
System.out.println(field[i].getName()+"----->"+password);
};
// System.out.println(“名字是:”+preson1.age);
}
}
package myreflect;
public class Preson {
protected String name = "存储技术的";
private int age = 12;
private String major = "DRFGUYHIJOK";
public Preson() {
System.out.println("无参构造器!");
}
public Preson(String name, int age) {
System.out.println("有参构造器!");
this.name = name;
this.age = age;
}
public Preson(String name) {
System.out.println("有参构造器!");
this.name = name;
}
public Preson(int age) {
System.out.println("有参构造器!");
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Preson{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
private void show1(String a){
System.out.println("私有化显示名字为:"+name);
}
public void show(){
System.out.println("显示名字为:"+name);
}
}