什么是JAVA反射机制

 

首先我们先来讨论三个问题,JAVA反射机制它是什么,它能做什么,他怎么做

什么是JAVA反射机制

一、是什么

专业说法:

java反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有方法和属性,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能就是java语言的反射机制,

注意:动态获取、动态获取、动态获取。重要的事情说三遍

通俗点讲:

你想吃猪肉,你去大街上买腰子或者大腿或者做好的猪头肉。而反射机制就是,你想吃猪肉,直接抬过来一头猪放在案板上,你用刀随意想吃啥就剁哪个部位,外到猪皮,内到心肺,全部给你暴露出来,拿到之后,可以任你宰割。相比而言,到大街上买猪肉更方便些,想吃什么就买什么,而搞了一头猪你还要自己去剁,自己去洗,自己去做,但是,自己家里做饭可以买,要是饭店做菜呢,饭店的客人需求都不一样,难道来一位客人你还要到大街上买一块猪肉吗。这就是反射机制应用场景的优点。你到某个城市出差可能住两三个月,当然选择住酒店更好一点,但是你要在这个城市生活一辈子,想必肯定要买一套房子了。当然,房价的问题我们不在这里讨论。

 

二、能做什么

在实际开发中,我们需要把一个包中的class new出来,但是这个包中的类总是需要变动,那么怎么办,难道总是修改main方法中xxx=new xxx()吗。这样无疑是麻烦的。而运用反射。我们可以相应的增加一个配置文件,在里面记录包中所有的类名,包中类增加时就加一个类名,删除时就删除一个类名。让main方法去读取这个配置文件中的类名,通过反射获得实例,完全不用我们去修改main方法中的代码。说起来可能比较枯燥,也很难理解,可以去看我另一篇文章:《》你会对能做什么有一个新的认知高度

三、怎么做

为什么要用反射机制,简单一句话:获取java的class文件,使java类完全暴露出来,任你宰割,这里只简单介绍如何获取class文件

java虚拟机在加载类文件的时候,将我们能看懂的代码文件转换成java虚拟机能看懂但是我们看不懂的的二进制文件,也就是类的加载,而反射机制就是指通过包名+类名的方式获取到此类的字节码文件,然后通过一系列的操作,获取到此类的实例,进而对此类的方法或属性进行一系列的操作。

获取class文件方法有三:

此时此刻有一个Person类,类的结构如下

public class Person {

    private int age;
    private  String name;

    public void show(){
        System.out.println("show 方法");
    }

    public void song(){
        System.out.println("song 方法");
    }

}

 从现在开始抛弃你习惯的用法

Person person = new Person(); 然后 person.show(); 调用show()方法,看下面方式你会对创建对象实例有一个新的认识

public class Main {

    public static void main(String[] args) throws ClassNotFoundException {
        //方式一
        Class<Person> personClass = Person.class;

        //方式二
        Person person = new Person();
        Person person1 = new Person();
        Class<? extends Person> aClass = person.getClass();
        Class<? extends Person> aClass1 = person1.getClass();

        //方式三、 重点掌握的一种方法,此方式可扩展性非常强
        //注意看这个String类型的name,具体我不给你讲,你自己思考为什么这样做
        String name = "com.Person";
        Class<?> aClass2 = Class.forName(name);
        //newInstance获取类实例
        Object obj = aClass2.newInstance();
        //此时此刻我已经获得了Person的类,既没有导包,也没有new仅仅是用了 包名+类名的方式
    }
}

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值