栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java反射机制(1)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java反射机制(1)

提示:该文章主要根据b站韩顺平老师的视频学习而来

文章目录
  • 前言
  • 一、反射是什么?
  • 二、使用步骤
    • 1.加载类
    • 2.获取对象实例
    • 3.得到所加载类的方法
    • 4.调用
  • 总结


前言

Java的反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,例如:Field 成员变量、Constructer 构造器、 Method 成员方法),并且能够操作对象的属性以及方法。

反射在设计模式和底层框架中被广泛使用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、反射是什么?

首先我们根据一个例子引出反射:

现在有一个Cat类:

public class Cat {
    public String name;
    public void hi(){
        System.out.println("小猫喵喵叫");
    }
    public void cry(){
        System.out.println("小猫哭了哦");
}
}

在同包下还有一个properties文件re.properties:

classfullpath=reflection_.Cat
method=hi

 此时,问题来了,如果我们要根据配置文件re.properties读取Cat的类信息并调用其方法,该怎么做呢?

我们的常规操作

Cat cat = new Cat(); 

cat.hi();

当我们需要调用cry时呢?是不是还得去修改源码?

我们不妨也可以想到,可以利用Properties类读写配置文件的方法

public class Test {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.load(new FileInputStream("src\reflection_\re.properties"));
        String classfullpath = properties.get("classfullpath").toString();
        String method = properties.get("method").toString();
        System.out.println("classfullpath="+classfullpath);
        System.out.println("method="+method);
    }
}

 然后呢?

然后呢?

new classfullpath()? 显然是行不通的,Java虚拟机时不会给你编译通过的。

所以后面我们试试用Java的反射机制来搞一搞。

二、使用步骤

1.加载类

代码如下(示例):

//加载类 返回对应的cls对象
Class cls = Class.forName(classfullpath);

2.获得对象实例

通过cls对象,我们可以通过newInstance()方法获得对象实例。

代码如下(示例):

Object o = cls.newInstance();//因为newInstance返回的编译类型为Object
Syetem.out.println(o.getClass());//输出为真正Class对象所对应的类,也是它的运行类型

补充:实际上newInstance()在目前已经过时了,Java现在不建议直接像上述方法一样创建对象,它更建议我们先获得构造器,再由构造器去调用newInstance()来创建对象。

例如:

Constructor constructor = cls.getConstructor();
Object o = constructor.newInstance();

3.得到所加载类的方法

代码如下(示例):

Method method = cls.getMethod("hi");
4.调用

反射中的调用与传统的调用不一样

代码如下(示例):

method.invoke(o)

总结

在加载完类之后,在堆中就产生了一个Class类型的对象(注意这个Class与class要区别开,Class也是一个跟普通类差不多的类),这个对象包含了类的完整结构信息。通过这个对象,我们可以得到这个类的结构。这个Class对象就像一面镜子,透过这个镜子呢,我们就可以看到类的结构,所以形象的称为:反射。

以上就是一些简单的对反射的认识,后面Java小菜鸡还会继续更新。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号