反射的小demo记录

1、谈谈反射

反射概念:Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。


2、Java练习反射demo

Animal.java

package pang.three;

public class Animal {
    private String name;
    private Integer age;
    public void animalSay(String said) {
        System.out.println("name:" + name + ", age:" + age + ", say:" + said);
    }
    private String greet(String people) {
        return "Hello, " + people;
    }
}

Reflect.java

package pang.three;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflect {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class animalClass = Class.forName("pang.three.Animal");
        Animal animal = (Animal) animalClass.newInstance();
//        获取类的三种方法
//        System.out.println(animalClass);
//        System.out.println(Animal.class);
//        System.out.println(animal.getClass());
        System.out.println(animalClass.getName());
        Method animalGreet = animalClass.getDeclaredMethod("greet", String.class);
        animalGreet.setAccessible(true);
        Object greetStr = animalGreet.invoke(animal, "SmallPang");
        System.out.println("greetStr:" + greetStr);
        Method animalSay = animalClass.getMethod("animalSay", String.class);
        animalSay.invoke(animal, "叽叽叽");
        Field name = animalClass.getDeclaredField("name");
        name.setAccessible(true);
        name.set(animal, "chicken");
        Field age = animalClass.getDeclaredField("age");
        age.setAccessible(true);
        age.set(animal, 22);
        animalSay.invoke(animal, "叽叽叽");
    }
}

其中获取的类的三种方法:(面试常常也会考到)

1) Class.forName(类的完整路径)

2) 类.class

3) 类对象.getClass()

3、运行结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值