[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. 两个command的疑惑

    1.在cqrs模式中有command和query command  命令  没有返回值,但会更改对象的状态 query 查询  有返回值  但不会改变用户的状态,对下同而言没有副作用 2.在今天的实际 ...

  2. tp3.2博客详情页面查询上一篇下一篇

  3. shell 重启 tomcat 脚本

    #!/bin/sh # author hapday -- export TOMCAT_HOME=/usr/local/tomcat-pms tomcat_pid=$(ps -ef | grep ${T ...

  4. ${pageContext.request.contextPath}是JSP取得绝对路径(转载)

    ${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 也就是取出部署的应用程 ...

  5. 什么是SQL注入?什么是XSS攻击?什么是CSRF攻击?

    1. XSS(Cross Site Script,跨站脚本攻击) 是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式. 1.1跨站脚本攻击分有两种形式: 反射型攻击(诱使用户点 ...

  6. 任务二:零基础HTML及CSS编码练习

    任务目的 针对设计稿样式进行合理的HTML架构,包括以下但不限于: 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 掌握基本的 ...

  7. matlab练习程序(最大流/最小割)

    学习这个算法是为学习图像处理中的图割算法做准备的. 基本概念: 1.最大流是一个有向图. 2.一个流是最大流,当且仅当它的残余网络中不包括增广路径. 3.最小割就是网络中所有割中值最小的那个割,最小割 ...

  8. jquery:jqery表单属性 值操作

    重置表单(且清空隐藏域)  $('#myform')[0].reset() ​​ DOM属性相关操作 返回属性值 $(selector).attr(attribute) 设置属性值 $(selecto ...

  9. 再学UML-Bug管理系统UML2.0建模实例(一)

    1.项目概述       随着软件项目规模和复杂性的增大,有效跟踪和管理项目中存在的缺陷Bug变得越来越重要.每一个软件企业都需要妥善处理软件中的缺陷,这将直接关系到软件过程质量与软件产品质量,但并非 ...

  10. Database 2 Day DBA guide_Chapter3

    Chapter 3: Getting Started with Oracle Enterprise Manager 第三章:开始oracle企业管理器. Purpose(目的) This chapte ...