反射--01--案例演示

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射--01--案例演示相关的知识,希望对你有一定的参考价值。

概述:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

普通方法:

Person 类

public class Person {

    private String name;
    public int age;

    @Override
    public String toString() {
        return "Person{" +
                "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 Person(String name, int age) {

        this.name = name;
        this.age = age;
    }

    private Person(String name) {
        this.name = name;
    }

    public Person() {
        System.out.println("Person()");
    }

    public void show(){
        System.out.println("你好,我是一个人");
    }

    private String showNation(String nation){
        System.out.println("我的国籍是:" + nation);
        return nation;
    }
}

其中 私有性质 :

  • 属性 :

private String name;

  • 方法 :

private String showNation(String nation){
System.out.println(“我的国籍是:” + nation);
return nation;
}

  • 构造方法:

private Person(String name) {
this.name = name;
}

普通调用:

在Person类外部,不可以通过Person类的对象调用其内部私有结构


    //反射之前,对于Person的操作
    @Test
    public void test1() {

        //1.创建Person类的对象
        Person p1 = new Person("Tom", 12);

        //2.通过对象,调用其内部的属性、方法
        p1.age = 10;
        System.out.println(p1.toString());

        p1.show();

        //在Person类外部,不可以通过Person类的对象调用其内部私有结构。
        //比如:name、showNation()以及私有的构造器
    }

生成 运行时类对象

在这里插入图片描述

newInstance():调用此方法,创建对应的运行时类的对象。内部调用了运行时类的空参的构造器

@Test
    public void test1() throws IllegalAccessException, InstantiationException {

        Class<Person> clazz = Person.class;
        Person obj = clazz.newInstance();

        System.out.println(obj);

    }

在这里插入图片描述

反射调用 公共属性:

@Test
    public void  test2() throws Exception {
        Class clazz = Person.class;
        //1.通过反射,创建Person类的对象
        Constructor cons = clazz.getConstructor(String.class,int.class);
        Object obj = cons.newInstance("Tom", 12);
        Person p = (Person) obj;
        System.out.println(p.toString());
        //2.通过反射,调用对象指定的属性、方法
        //调用属性
        Field age = clazz.getDeclaredField("age");
        age.set(p,10);
        System.out.println(p.toString());

        //调用方法
        Method show = clazz.getDeclaredMethod("show");
        show.invoke(p);
    }

在这里插入图片描述

反射调用 私有属性:

    @Test
    public void  test3() throws Exception {
        Class clazz = Person.class;
        //通过反射,可以调用Person类的私有结构的。比如:私有的构造器、方法、属性
        //调用私有的构造器
        Constructor cons1 = clazz.getDeclaredConstructor(String.class);
        cons1.setAccessible(true);
        Person p1 = (Person) cons1.newInstance("Jerry");
        System.out.println(p1);

        //调用私有的属性
        Field name = clazz.getDeclaredField("name");
        name.setAccessible(true);
        name.set(p1,"HanMeimei");
        System.out.println(p1);

        //调用私有的方法
        Method showNation = clazz.getDeclaredMethod("showNation", String.class);
        showNation.setAccessible(true);
        String nation = (String) showNation.invoke(p1,"中国");//相当于String nation = p1.showNation("中国")
        System.out.println(nation);

    }

在这里插入图片描述

常用方法:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以上是关于反射--01--案例演示的主要内容,如果未能解决你的问题,请参考以下文章

Pikachu-XSS模块与3个案例演示

java 反射代码片段

大数据必学Java基础(八十八):通过案例和概念体会反射的好处

time模块案例演示

JavaWeb的学习--XML&反射案例:通过解析xml,模拟浏览器路径访问servlet

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。