文档章节

学习笔记—反射

o
 osc_a22drz29
发布于 2019/03/28 18:44
字数 605
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

反射的概念和作用

概念

  动态获取信息以及动态调用对象方法的一种反射机制。可以在程序运行时动态的获取类的属性、方法和构造器。

作用

  可以动态的创建对象,不需要导入类的所在包,只需要知道类的完整路径就可以知道该类中的所有信息。

 

反射获取类的三种方式

1、根据全限定路径获取

Class.forName("路径");

2、根据对象获取

对象名.getClass();

3、根据类名获取

类名.class;

 注意:一个类只有一个类对象。

常用方法:

System.out.println("获取类对象的包名:" + c.getPackage());
        System.out.println("获取类的修饰符:" + c.getModifiers());
        System.out.println("获取类的名称(全限定):" + c.getName());
        System.out.println("获取类的名称(类名):" + c.getSimpleName());
        System.out.println("获取类的父类的类对象:" + c.getSuperclass());

 

反射操作属性

获取该类及其所有父类的所有公共字段

// 获取该类及其所有父类的所有公共字段
Field[] fields = c.getFields();        
for(Field f : fields) {
    System.out.println("获取属性名:" + f.getName());
    System.out.println("获取修饰符" + f.getModifiers());
    System.out.println("获取类型" + f.getType());        //返回的是类型的Class对象
}

 获取该类声明的所有字段

// 获取该类声明的所有字段
        Field[] fieldall = c.getDeclaredFields();
        for(Field f : fieldall) {
            System.out.println("获取属性名:" + f.getName());
            System.out.println("获取修饰符" + f.getModifiers());
            System.out.println("获取类型" + f.getType());        //返回的是类型的Class对象
        }

获取指定字段

// 指定获取类及其父类的公共字段
        Field field = c.getField("pname");    
        
        // 指定获取类的所有字段
        Field field2 = c.getDeclaredField("snull");        
        
        // 指定获取父类声明字段
        Field field3 = c.getSuperclass().getDeclaredField("pname");

操作类属性

// 操作静态属性
        类属性对象.get(null)        // 返回静态属性的值
        类属性对象.set(null,"")    // 赋值
// 操作非静态属性
        类属性对象.get(Object obj);
        类属性对象.set(Object obj,"");

 

反射操作方法

获取该类及其所有父类的所有公共方法

// 获取所有的公共方法(包括父类)
        Method[] methods = c.getMethods();
        for(Method method:methods) {
            System.out.println(method.getName());
        }

获取该类声明的所有方法

// 获取所有声明的方法(不包括父类)
        Method[] methodall= c.getDeclaredMethods();
        for(Method method:methodall) {
            System.out.println(method.getName());
        }

获取指定方法

// 获取指定的公共方法
getMethod(String name, Class ... cla);

// 获取指定的方法
getDeclaredMethod(String name,Class ... cla);

/**  参数
  * String : name   表示方法名
  * Class ... cla 表示方法接收的参数类型的类对象
  *
*/

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Golang学习笔记目录

Golang 介绍 Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。...

ChainZhang
2017/12/26
0
0
Golang学习笔记目录

介绍 Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 学习笔...

ChainZhang
2017/12/26
0
0
Golang学习笔记目录

介绍 Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 学习笔...

Ocean_K
2019/04/03
23
0
Golang学习笔记目录

介绍 Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 学习笔...

小田天
2019/03/12
13
0
Golang 学习笔记(12)—— ORM实现

本文为转载,原文:Golang 学习笔记(12)—— ORM实现 Golang 介绍 本文将利用之前所学习到的内容实现一个简单的orm,实现比较简单,没有考虑过多的设计原则,以及性能安全之类的,只是单纯...

ChainZhang
2018/01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 那么长的绳子,你这是放风筝呢

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @ 巴拉迪维:黑豹乐队的单曲《无地自容》 耳畔突然响起旋律,是那首老歌。中国摇滚有了《一无所有》不再一无所有;中国摇滚有了《无地自容》不...

小小编辑
47分钟前
55
1
《吐血整理》-顶级程序员书单集

你知道的越多,你不知道的越多 给岁月以文明,而不是给文明以岁月 前言 王潇:格局决定了一个人的梦想,梦想反过来决定行为。 那格局是什么呢? 格局是你能够看见的深度、广度和密度。 王潇认...

敖丙
2019/12/11
8
0
我可以在Android版式中加下划线吗? - Can I underline text in an Android layout?

问题: 如何在Android布局xml文件中定义带下划线的文本? 解决方案: 参考一: https://stackoom.com/question/A31z/我可以在Android版式中加下划线吗 参考二: https://oldbug.net/q/A31z/...

法国红酒甜
50分钟前
26
0
干掉ELK | 使用Prometheus+Grafana搭建监控平台

什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 Prometheus的特点 · 多维度...

木九天
今天
34
0
拉勾网拉你上勾

预览 需求简介 拉勾网是一个互联网行业的一个招聘网站,上面有许多职位,于是乎,小编想提取指定职位的基本信息(职位名,薪水,工作经验,工作地点,教育背景),然后插入 MongoDB 数据库,...

木下瞳
2019/04/17
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部