Java分享笔记:关于Java反射机制
[1] 关于Java反射机制的概述
1.反射机制的概念:允许程序在执行期,借助于反射相关的API,取得任何类的内部信息,并能直接操作任意对象内部的属性和方法。
2.与反射相关的主要的API:java.lang.Class(代表一个类),java.lang.reflect.Field(代表一个属性),java.lang.reflect.Method(代表一个方法),java.lang.reflect.Constructor(代表类的构造器)。
3.关于类的Class实例的说明:创建一个类(.java文件),通过编译(javac.exe)生成对应的字节码文件(.class)。之后使用java.exe进行加载(类加载器)。将字节码文件加载进内存以后,就是所谓的运行时类,被存在缓存区。那么这个运行时类本身就是系统创建的Class的实例,这就是反射的源头。程序员可以对某个类的Class实例进行获取。
以下是与反射相关的程序演示,分为Person.java,TestClass.java两个文件
[2] Person.java文件
package pack01; public class Person { public String name;
private int age; //构造方法
public Person() { }
public Person(String name, int age) {
this.name = name;
this.age = age;
} //操作name
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
} //操作age
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
} //重写toString方法
public String toString() {
return "name=" + name + " , age=" + age;
} //其他方法
public void displayInfo(String s) {
System.out.println("info: " + s);
}
}
[3] TestClass.java文件
package pack01; import org.junit.Test;
import java.lang.reflect.*; public class TestClass { //*******************获取运行时类的Class实例,常见的4种方法********************
@Test
@SuppressWarnings("rawtypes") //取消泛型警告
public void testMethod1() throws ClassNotFoundException { //1.通过运行时类的class属性获取
Class classOfPerson1 = Person.class;
System.out.println( classOfPerson1 ); //2.通过运行时类的对象获取,调用getClass()方法
Person p1 = new Person();
Class classOfPerson2 = p1.getClass();
System.out.println( classOfPerson2 ); //3.通过Class的静态方法forName()获取
Class classOfPerson3 = Class.forName("pack01.Person");
System.out.println( classOfPerson3 ); //4.通过类的加载器ClassLoader获取
ClassLoader cl = this.getClass().getClassLoader();
Class classOfPerson4 = cl.loadClass("pack01.Person");
System.out.println( classOfPerson4 ); } //*****************通过反射创建运行时类的对象,并调用运行时类的属性和方法****************
@Test
public void testMethod2() throws Exception { //1.使用类的class属性,获取运行时类Person类的Class实例
Class<Person> classOfPerson = Person.class; //2.使用反射创建Person类的一个对象
Person p1 = classOfPerson.newInstance(); //3.使用反射获取Person类中的公有属性,并修改p1中的该属性
Field f1 = classOfPerson.getField("name");
f1.set(p1, "ZhangSan"); //4.使用反射获取Person类中的私有属性,并修改p1中的该属性
Field f2 = classOfPerson.getDeclaredField("age");
f2.setAccessible(true);
f2.set(p1, 20); //5.使用反射获取Person类的无参方法,并令p1执行该方法
Method m1 = classOfPerson.getMethod("toString");
String str = (String) m1.invoke(p1);
System.out.println(str); //6.使用反射获取Person类的有参方法,并令p1执行该方法
Method m2 = classOfPerson.getMethod("displayInfo", String.class);
m2.invoke(p1, "I am from China."); }
}
注:希望与各位读者相互交流,共同学习进步。
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:等线;
mso-ascii-font-family:等线;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:等线;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:等线;
mso-hansi-theme-font:minor-latin;
mso-font-kerning:1.0pt;}
Java分享笔记:关于Java反射机制的更多相关文章
- Java分享笔记:Java网络编程--TCP程序设计
[1] TCP编程的主要步骤 客户端(client): 1.创建Socket对象,构造方法的形参列表中需要InetAddress类对象和int型值,用来指明对方的IP地址和端口号. 2.通过Socke ...
- Java系列笔记(2) - Java RTTI和反射机制
目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...
- 【转载】Java系列笔记(3) - Java 内存区域和GC机制
Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...
- 【转载】Java系列笔记(1) - Java 类加载与初始化
Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...
- Java基础复习笔记系列 十三 反射机制
主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...
- Android(java)学习笔记106-2:反射机制
1.反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- Android(java)学习笔记46:反射机制
1. 反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
- Java系列笔记(3) - Java 内存区域和GC机制
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- Java学习笔记之使用反射+泛型构建通用DAO
PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...
随机推荐
- scss-null在@mixin传参中的应用
可以给混合器声明参数,以便灵活的配置相关属性值,看如下scss代码: @mixin antzone-div($color, $font-size) { color:$color; font-size: ...
- scss-传递内容块到@mixin
样式块被传递给混入用于放置内的样式.在@content指令的位置,样式被包含进mixin. 内容块被传递到块被定义一个混合的范围进行计算. 下面的例子演示了mixin使用内容块的SCSS代码: @mi ...
- 【数据库】1.0 MySQL入门学习(一)——常识性知识
1.0 什么是MySQL(官方发音 My Ess Que Ell)? 是一个快速.多线程.多用户和强壮的SQL数据库服务器,SQL是世界上最流行的标准化数据库语言. 名字来源:共同创办人Monty W ...
- js上拉加载下拉刷新
写在前边: 工作需要,使用ajax在原来的列表下边使用ajax请求后台数据,拼接在列表最下边,在github转了好久,发现了一个bug极多的js刷新插件,尝试了一个下午,就在快放弃的时候,发现下边有留 ...
- k-近邻算法(kNN)
1.算法工作原理 存在一个训练样本集,我们知道样本集中的每一个数据与所属分类的对应关系,输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应特征进行比较,然后算法提取样本集中特征最相似的数据( ...
- git 无法忽略Android Studio 生成的 .idea目录解决办法
在Android Studio中导入了别的人Gradle项目,产生了 .idea文件夹, 然后git 发现了这个变动,修改了 .gitignore不起作用,仍然不能忽略这个文件夹 在项目目录里面 右键 ...
- SOL的补充
之前写过一些关于远程安装系统的文档,但是对于SOL还是糊涂不清. Serial Console 可以将输入输出转发到串行接口(com1, com2), 假如你有串行读取设备,就可以看到显示,控制输入. ...
- 学习笔记-java 集合
背景: 看的是<java核心技术 第8版>,覆盖jdk1.6.主要是对集合全局和细节进行全面掌握,较深入的理解集合.本人对java比较熟悉,但是对于细节的理解不深,知识点还不全,这是知识的 ...
- 【Spring实战】—— 7 复杂集合类型的注入
之前讲解了Spring的基本类型和bean引用的注入,接下来学习一下复杂集合类型的注入,例如:List.Set.Map等. 对于程序员来说,掌握多种语言是基本的技能. 我们这里做了一个小例子,程序员们 ...
- 【Hibernate那点事儿】—— Hibernate应该了解的知识
前言: 最近由于有点时间,就像深入的学习一下Hibernate.之前只是简单的使用,并没领会它的妙处.这里就趁着分享的机会,好好整理一下. 这篇主要讲到了下面几个部分: Hibernate框架 Hib ...