博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射机制简单介绍
阅读量:4314 次
发布时间:2019-06-06

本文共 1638 字,大约阅读时间需要 5 分钟。

1.字节码。所谓的字节码就是当java虚拟机载入某个类的对象时,首先须要将硬盘中该类的源码编译成class文件的二进制代码(字节码),然后将class文件的字节码载入到内存中,之后再创建该类的对象

2.java反射的基础是Class类(注意不是小写的class),Class类实例代表着内存中的一份字节码。常见的获取Class类对象的方法例如以下(第一种为对象的方法,另外一种为类的方法):

Dog dog = new Dog();Class dogClass = dog.getClass();Class dogClass = Class.forName("Dog");Class dogClass = Dog.class;

3.
获取反射的构造函数
。有了主要的Class类,要获取类的对象,首先要获取类的构造函数,这里主要使用的是Class类的getConstructor方法,例如以下所看到的:
//使用StringBuffer来构造String对象		String str1 = new String(new StringBuffer("hello"));		//获取String类对应的构造函数对象		Constructor c1 = String.class.getConstructor(StringBuffer.class);		//错误,这里的參数类型必须和获取构造函数时的參数类型(及StringBuffer.class)一致		String str2 = (String)c1.newInstance(new String("world"));		//正确		String str3 = (String)c1.newInstance(new StringBuffer("world"));		System.out.println(str3);
4.获取反射的字段。

import java.lang.reflect.Field;class Point{	public int x;//这里是public	private int y;//注意这里是private	Point(int x,int y){		this.x = x;		this.y = y;	}}public class ReflectTest {	public static void main(String[] args) throws Exception {		Point p = new Point(2,3);		//getField仅仅能获得public的字段		Field fieldX = p.getClass().getField("x");		//获取x的值		System.out.println(fieldX.get(p));		//getDeclaredField能够获取全部字段		Field fieldY = p.getClass().getDeclaredField("y");		//设置y的属性		fieldY.setAccessible(true);		System.out.println(fieldY.get(p));			}}

5.获取反射的方法。
public static void main(String[] args) throws Exception {		String s1 = "hello";		//參数为函数名,函数的參数(可变长)		Method m = s1.getClass().getMethod("charAt", int.class);		//參数为要调用的对象,以及函数的參数。这里假设第一个參数为null,表示调用的是类的静态方法		System.out.println(m.invoke(s1, 1));	}



转载于:https://www.cnblogs.com/yxwkf/p/3819748.html

你可能感兴趣的文章
springMVC如何判断入参是默认参数还是请求传过来的参数?
查看>>
事务是什么,以及事务四个特性
查看>>
替换空格
查看>>
如何动态生成 JavaScript 文件
查看>>
HDU 2050 折线分割平面
查看>>
HDU 2035 人见人爱A^B
查看>>
HDU 4662 MU Puzzle
查看>>
人工智能一:Al学习路线
查看>>
maven常用命令
查看>>
洛谷 P4112 [HEOI2015]最短不公共子串 解题报告
查看>>
ubuntu12.04安装vsftp
查看>>
HDU 5723 Abandoned country (最小生成树+dfs)
查看>>
小甲鱼OD学习第19讲
查看>>
Light oj 1233 - Coin Change (III) (背包优化)
查看>>
0-1背包之四
查看>>
Mysql 创建存储过程 更新表
查看>>
Qt Creator键盘快捷键速查
查看>>
Jquery Ajax处理,服务端三种页面aspx,ashx,asmx的比较
查看>>
JVM读书笔记PART3
查看>>
我的四则运算
查看>>