java反射机制简单介绍
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));
}
java反射机制简单介绍的更多相关文章
- java反射机制简单实例
目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...
- Java反射机制 —— 简单了解
一.概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...
- Java反射机制简单使用
1.Java反射相关类所在package: java.lang.reflect.* 2.开始使用Reflection: 使用reflect相关类,遵循三个步骤: a.获取想要操作类的 java.lan ...
- Java反射机制简单学习
java中除了基本数据类型,几乎都为对象.例如 Person p=new Person(); 这句语句表明了p是Person类的一个实例对象.但其实,Person也是一个实例对象,它是Class类的实 ...
- java反射机制-简单实例
public class Car { private String brand; private String color; private int maxSpeed; public Car() { ...
- java反射机制的简单介绍
参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...
- Java 反射机制介绍
参考文章:http://www.cnblogs.com/skywang12345/p/3345205.html Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还 ...
- Java反射机制剖析(三)-简单谈谈动态代理
通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1. 代理模式 代理模式就是为其他对象提供一种代理来 ...
- java反射机制的简单使用
java 反射机制 反射机制简介 参考地址 什么是反射机制 反射机制指程序在运行时能够获取自身的信息.在java中只要给定类的名字,就可以通过反射机制获得类的所有信息 反射机制的优缺点 首先了解一下动 ...
随机推荐
- [ python ] 字典的使用
数据类型划分: 可变数据类型:list.dict.set 不可哈希 不可变数据类型:tuple.bool.int.str 可哈希 字典 python内置了字典类型,使用键-值( ...
- linux CentOS 上安装chrome
1.wget http://chrome.richardlloyd.org.uk/install_chrome.sh (用wget下载shell文件)2.chmod u+x install_chr ...
- BestCoder #88(1001 1002)
Find Q Accepts: 392 Submissions: 780 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131 ...
- EF – 6.一对一关联
5.6.6 <一对一关联概述> 5.6.7 <一对一关联CRUD演示> 在两讲视频中,首先介绍了数据库中一对一关联表的设计规范,接着通过实例介绍了如何合适Entity Fr ...
- jupyter notebook,弄起来
- JavaScript 七种数据类型
在 JavaScript 规范中,共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined ...
- RabbitMQ指南之二:工作队列(Work Queues)
在上一章的指南中,我们写了一个命名队列:生产者往该命名队列发送消息.消费从从该命名队列中消费消息.在本章中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务.工作队列(即任务队列)的主要思想 ...
- loadrunner参数取值方法总结
在参数设置位置有两个地方:Select next row –下一行的取值方式(针对用户)Sequential 顺序的,即所有用户都是按照同一种方式取值(都是按照Update value on方式取值, ...
- ubuntu1604 安装samba
ubuntu1604 安装samba sudo apt-get install samba 更改/etc/samba/smb.conf添加[share]comment = sharepath = /h ...
- css特效-一道闪光在图片上划过
在百度音乐 http://music.baidu.com/ 看到这么一个图片效果,当鼠标移上去的时候,会有一道闪光在图片上划过,效果挺酷炫的.于是把这个效果再实现一下:大体思想是,设计一个透明层i,s ...