对java反射机制的一点理解

1、什么是java反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。java的翻着原理其实就是将类中的各个成分(成员变量、方法、属性等)

2、反射的基本原理

下图是JVM加载类的基本原理,利用了反射机制
JVM加载类过程
反射可以
(1)将.class文件反编译成为.java文件
(2)通过反射机制访问对象的属性、方法、构造方法
(3)开发各种通用框架(最重要的使用),比如Spring,里面很多的参数是配置化的,为了保证通用性,需要通过配置文件加载不同的类、对象或者调用不同的方法。

3、反射的基本使用

1、获取Class,主要有三种不同的方法:

(1)利用Object的getClass()方法,但是需要先产生类的对象才可以

import java.util.Date;
Date date = new Date();
Class<?> cls = date.getClass();

(2)利用“类.class”的形式取得Class类的对象。

import java.util.Date;
Class<?> cls = Date.class;

(3)利用Class类提供的forName()方法完成

Class<?> cls = Class.forName("java.util.Date");
创建对象,通过反射生成对象的两种方式

(1)使用Class对象的newInstance()方法来创建Class对象对应类的实例。

import java.util.Date;
Class<?> cls = Date.class;
Date date = (Date)cls.newInstance();     //实例化Date类的对象,调用.newInstance()方法之后返回的是Object对象,所以需要强制转型

(2)先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建对象,这种方法可以用指定的构造器构造类的实例。

//获取String的Class对象
Class<?> str = String.class;
//通过Class对象获取指定的Constructor构造器对象
Constructor constructor=str.getConstructor(String.class);
//根据构造器创建实例:
String s = (String)constructor.newInstance(“hello reflection”);

(3)获取方法并调用:使用**Class类的getMethod()**方法获取方法,然后进行方法的反射调用

import java.long.reflect.Method;
class Book{
	private String title;
	public void setTitle(String title){
		this.title = title;
	}
	public String getTitle(){
		return title;
	}
}
public class TestReflect{
	public static void main(String args[]) throws Exception{
		String filedName = "title";       //要操作的属性
		String titleValue  = "Spring 实战";
		Class<?> cls = Class.forName("Book");
		Object obg = cls.newInstance();
		Method setMethod = cls.getMethod("set"+initcap(fileName),String.class);
		Method getMethod = cls.getMethod("get"+initcap(fileName));
		setMethod.invoke(obj,titleValue);          //对象.setTile()调用
		System.out.println(getMethod.invoke(obj));  //对象.getTitle()调用
	}
	public static String initcap(String s){
		return s.substring(0,1).toUpperCase()+s.substring(1);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值