[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反射机制的更多相关文章

  1. Java分享笔记:Java网络编程--TCP程序设计

    [1] TCP编程的主要步骤 客户端(client): 1.创建Socket对象,构造方法的形参列表中需要InetAddress类对象和int型值,用来指明对方的IP地址和端口号. 2.通过Socke ...

  2. Java系列笔记(2) - Java RTTI和反射机制

    目录 前言 传统的RTTI 反射 反射的实现方式 反射的性能 反射与设计模式 前言 并不是所有的Class都能在编译时明确,因此在某些情况下需要在运行时再发现和确定类型信息(比如:基于构建编程,),这 ...

  3. 【转载】Java系列笔记(3) - Java 内存区域和GC机制

    Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...

  4. 【转载】Java系列笔记(1) - Java 类加载与初始化

    Java系列笔记(1) - Java 类加载与初始化 原文地址:http://www.cnblogs.com/zhguang/p/3154584.html 目录 类加载器 动态加载 链接 初始化 示例 ...

  5. Java基础复习笔记系列 十三 反射机制

    主题:Java反射机制 学习资料参考网址: 1.http://www.icoolxue.com 1.Java反射机制. 各种框架中都使用到了Java的反射机制. 两个类:java.lang.Class ...

  6. Android(java)学习笔记106-2:反射机制

    1.反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  7. Android(java)学习笔记46:反射机制

    1. 反射机制: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...

  8. Java系列笔记(3) - Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  9. Java学习笔记之使用反射+泛型构建通用DAO

    PS:最近简单的学了学后台Servlet+JSP.也就只能学到这里了.没那么多精力去学SSH了,毕竟Android还有很多东西都没学完.. 学习内容: 1.如何使用反射+泛型构建通用DAO. 1.使用 ...

随机推荐

  1. PAT 1025 PAT Ranking

    #include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #i ...

  2. 04_Redis数据类型(set、zset)

    [set:集合类型(高中的集合知识)] 集合类型:无序.不可重复 列表类型:有序.可重复 [set类型] 1.添加元素 语法:sadd key member1 member2...... 返回值:返回 ...

  3. 3D开源推荐:全球卫星地图 Esri-Satellite-Map

    演示网址:http://richiecarmichael.github.io/sat/index.html 开源网址:https://github.com/richiecarmichael/Esri- ...

  4. matlab练习程序(单源最短路径Dijkstra)

    图的相关算法也算是自己的一个软肋了,当年没选修图论也是一大遗憾. 图像处理中,也有使用图论算法作为基础的相关算法,比如图割,这个算法就需要求最大流.最小割.所以熟悉一下图论算法对于图像处理还是很有帮助 ...

  5. 三大集合框架之Set

    Set介绍 Set相对于List.Map是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重复对象. 特点: 它不允许出现重复元素: 不保证和政集合中元素的顺序 允许包含值为null的元素, ...

  6. IEEP-网络设计

    IEEP-网络设计 网络设计概述 网络设计概述 1.负责把网络规划阶段获得的客户需求运用技术手段予以规范化体现 2.网络设计一般遵循模块化指导方针,分模块进行设计 3.网络设计的输出成果必须是规范的. ...

  7. Struts的学习-eclipse与idea与struts的连接

    1.建立一个空白工程(里面是没有文件的). 可以在文件放置找到项目文件夹 2.点击托管项目到码云 (ps:没有码云帐号的自己注册) 3.按快捷键:ctrl+alt+shift+s 呼出项目结构管理器, ...

  8. 西汉姆VS利物浦,铁锤『拳』出击,打回原『菱』形

    一.铁锤,还是铁桶?   铁锤帮西汉姆今晚摆出4-2-3-1对阵红军利物浦的4-3-3 ,阿勒戴斯曾在主场2-1战胜赫尔城时被球迷嘘,嫌他的足球太过丑陋『2010年的时候贝尼特斯也曾经诟病阿勒戴斯带队 ...

  9. IOS CoreLocation框架的使用(用于地理定位)

    ●  在移动互联网时代,移动app能解决用户的很多生活琐事,比如 ●  导航:去任意陌生的地方 ●  周边:找餐馆.找酒店.找银行.找电影院 ●  在上述应用中,都用到了地图和定位功能,在iOS开发中 ...

  10. Bootstrap table分页问题汇总

    首先非常感谢作者针对bootstrap table分页问题进行详细的整理,并分享给了大家,希望通过这篇文章可以帮助大家解决Bootstrap table分页的各种问题,谢谢大家的阅读. 问题1 :服务 ...