Java反射复习笔记
反射
获取反射的三种方式:
Class.forName(全类名):将字节码文件加载进内存,返回Class对象,全类名要加上类的包名,例top.linzeliang.example.RelfectTest(多用于配置文件,将类名定义在配置文件中,先读取文件,获取文件名,然后加载类)类名.class:通过类名的属性class获取(多用于参数传递)对象.getClass():用于对象获取字节码的方式
Class对象的功能
获取 成员变量/成员变量们
Field[] getFields():获取所有public修饰符修饰的变量,包括从父类继承来的字段,即protected、default、private无法被获取Field getField(String name):获取指定变量名称的public修饰符修饰的变量Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符(只要是成员变量就可以被获取)Filed getDeclaredField(String name):可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 ( 这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true))
获取 成员方法/成员方法们
Method[] getMethods()Mathod getMethod(String name, 类<?>... parameterTypes)Method[] getDeclaredMethods()Method getDeclaredMethod(String name, 类<?>... parameterTypes)
获取构造方法们
Constructor<?>[] getConstructors()Constructor<T> getConstructor(类<?>... parameterTypes)Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)Constructor<?>[] getDeclaredConstructors()
获取全类名
String getName()
Field:成员变量
void set(Object obj, Object value):设置值get(Object obj):获取值setAccessible(true):忽略访问权限修饰符的安全检查,即暴力反射
Method:成员方法
invoke(Object obj, Object args):执行方法String getName():获取方法名
Constructor:构造方法
newInstance(Object... initargs):创建对象- 如果使用空参构造器创建对象,则可以直接
Class对象.newInstance()
通过框架创建对象
public class Demo {
public static void main(String[] args) throws Exception {
//加载配置文件,配置文件路径要在src目录下
Properties pro = new Properties();
InputStream is = Demo.class.getClassLoader().getResourceAsStream("pro.properties");
pro.load(is);
//获取配置文件中的数据
String className = pro.getProperty("className");
//通过全类名将该类加载进入内存
Class c = Class.forName(className);
//创建对象
Object obj = c.newInstance();
System.out.println(obj);
}
}
public class ReflectTest {
public int a = 1;
protected int b = 2;
int c = 3;
private int d = 4;
public void m1() {
System.out.println("miaoa");
}
protected void m2() {
}
void m3() {
}
private void m4() {
}
}
Java反射复习笔记的更多相关文章
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Java基础复习笔记系列 十三 反射机制
主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...
- java反射学习笔记
1.java反射概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功 ...
- Java反射机制--笔记
1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...
随机推荐
- 基于Intel x86 Android的RAD游戏开发
zip文件还包含编译的"MonkeyGame-debug".可以在模拟器中运行的二进制文件.在"game.build"文件夹中有一个HTML5 build.在C ...
- S3C2440 LCD驱动(FrameBuffer)实例开发<二>(转)
开发板自带的LCD驱动是基于platform总线写的,所以如果要使其它的LCD能够在自己的开发板上跑起来,那么就先了解platform驱动的架构,下面简单记录下自己看platform驱动时体会,简单的 ...
- 在实际开发中Java中enum的用法
在日常项目的开发中,往往会存在一些固定的值,而且"数据集"中的元素是有限的. 例如:st_code// 一些状态机制:01-激活 02-未激活 03 -注册..等等 还有一特性 ...
- 多测师讲解python _unttest框架001(基本格式)_高级讲师肖sir
1.unittest基本介绍 import unittest #导入unittest模块 #class Test(unittest.TestCase): def setUp(self): #创建dri ...
- Linux Centos7 安装Docker-CE
先确保yum 是最新版本 执行: sudo yum update 添加docker源地址 sudo yum-config-manager --add-repo https://download.doc ...
- 一文看懂Vue3.0的优化
1.源码优化: a.使用monorepo来管理源码 Vue.js 2.x 的源码托管在 src 目录,然后依据功能拆分出了 compiler(模板编译的相关代码).core(与平台无关的通用运行时代码 ...
- 如何写好 C语言 main 函数!你准备好编写 C 程序了吗?
学习如何构造一个 C 文件并编写一个 C main 函数来成功地处理命令行参数. 我知道,现在孩子们用 Python 和 JavaScript 编写他们的疯狂"应用程序".但是 ...
- docket镜像
1.是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 1.1.什么是UnionF ...
- Linux基础命令cp之拷贝隐藏文件
创建一个用户名为test211的普通用户 [23:35:09 root@C8[ ~]#useradd test211 [23:37:37 root@C8[ ~]#getent passwd test2 ...
- Win10中装Win10---virtualbox虚拟机的安装及拓展
最近在准备一档专栏时,发现我电脑中已经把一些环境配置完了,卸掉重装又显得麻烦,于是我就求助于虚拟机,虚拟机确实是个很好的东西,不久前我的一个伙伴向我请教虚拟机怎么装,发现这玩意三言两语还很难说清,于是 ...