java反射技术

反射技术代码:

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(“判断不同反射技术得到的两个对象是否式一个:”+(cls2
cls22));
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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值