Java
反射的API
反射中常常用的几个类如下所示:
java.lang
包中:
--Class
类:代表一个类
Java
中,无论生成某个类的多少个对象,这些对象都会对应同一个
Class
对象
Java.lang.reflect
包中:
--Field
类:代表类的成员变量(类的属性)
--Method
类:代表类的方法,一个方法对应一个
Method
对象
--Constructor
类:代表类的构造方法
--Array
类:提供动态创建数组,以及访问数组的元素的静态方法
利用反射机制调用某个类中的某个方法的步骤:
1.
获取该类的
Class
对象
常用方法有三种:
a)
通过
Class
的
forName
的静态方法获得(参数:包名
+
类名):
Class<?> classType =
Class.forName("java.lang.String");
b)
通过类名
+
点
class
的方法获得:
Class<?>
c = String.class;
通过类的对象的
getClass
的方法获得:
String str = "test";
Class<?> typeClass = str.getClass();
2.
实例化一个该类的对象
两种方法:
a)
通过
Class
对象的
newInstance
的方法创建(该方法只对无参构造方法适用):
Class<?> classType =
Class.forName("java.lang.String");
Object obj = = classType.newInstance();
b)
通过获取
Constructor
构造方法类的对象,然后通过该对象的
newInstance
(Object
... initargs)
方法获得:
Class<?> classType = cus.getClass();
Constructor con
= classType.getConstructor(new
Class[]{String.class,int.class});
Object object
= con.newInstance(new
Object[]{cus.getName(),cus.getAge()});
该方法中的若写成两个参数写成
Class[]{}
和
new Object[ ]{}
,就等同于
a)
的方法
3.
获取目标方法的
Method
对象
Method method = classType.getMethod
(
methodname,new
Class[]{
参数类型
.class}
)
;
4.
用
Method
对象调用目标方法:
Object result = method.invoke(object,new
Object[]{});
//
其中
object
为拥有该方法的对象,
object[]{}
为该方法的参数
5.
获取类中的属性值,
get
取值,
set
赋值
//
获取属性列表
Field fields[] = classType.getDeclaredFields();
Field
field = classType.getDeclaredFields(
属性名
);
//
获取“属性名”对应
Field
对象
field.set(
类的对象,
value);
//
给属性赋新值
例子:访问被private
修饰的方法和属性
采用反射机制,访问下边的类:
public class Private
{
private String name = "张三";
private String getName()
{
return name;
}
}
把该类中private修饰的
name
值改成“李四”,并且用反射机制调用
getName
方法,返回修改后的值。
package com.wangzhuo.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class PrivateTest
{
public static void main(String[] args)throws Exception
{
//获取Private类的Class对象
Class<?> classType = Class.forName("com.wangzhuo.reflect.Private");
//获取其构造方法对应的Constructor对象
Constructor con = classType.getDeclaredConstructor(new Class[]{});
//创建Private的对象
Object object =con.newInstance(new Object[]{});
//获取Private类中name属性对应的Field对象
Field field = classType.getDeclaredField("name");
//设置避开java访问控制检测
field.setAccessible(true);
//获取修改前的值
Object str = field.get(object);
System.out.println("修改之前name的值:"+(String)str);
//给name属性赋值
field.set(object, "李四");
//获取getName方法对应的Method对象
Method getNameMethod = classType.getDeclaredMethod("getName", new Class[]{});
//设置避开java访问控制检测
getNameMethod.setAccessible(true);
//调用方法,返回值
Object o = getNameMethod.invoke(object, new Object[]{});
System.out.println("修改之后name的值:"+(String)o);
}
}
以上,为java反射机制的使用例子。
分享到:
相关推荐
java学习笔记java学习笔记java学习笔记java学习笔记java学习笔记java学习笔记java学习笔记java学习笔记java学习笔记java学习笔记及源代码
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
java反射机制
java注解和反射的个人学习笔记
java学习笔记java反射机制
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
Java JDK 7学习笔记 PDF
Java后端学习笔记代码Java后端学习笔记代码Java后端学习笔记代码Java后端学习笔记代码Java后端学习笔记代码
Java反射机制笔记,简单易懂,轻松搞定Java反射机制
jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子
Java反射机制总结(实例分析) Java反射机制学习笔记
jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子
云的学习笔记系统代码 java云的学习笔记系统代码 基于SSM的云的学习笔记系统代码 1、云的学习笔记系统的技术栈、环境、工具、软件: ① 系统环境:Windows/Mac ② 开发语言:Java ③ 框架:SSM ④ 架构:B/S、MVC ⑤ ...
里面是学习JAVA过程中一些值得注意的重点知识点,还有很多促进理解的例子程序
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记