注册

Java反射机制
首页 > IT计算机 > Java    作者:RainFly   2018年1月10日 10:42 星期三   热度:6114°   字号:   评论:0    
时间:2018-1-10 10:42   热度:6114°  评论:0 条 

反射的核心就是加载类解剖出类的各个组成部分 例如:成员变量 、方法 、构造方法!

加载类的三种方法

/提取当前类的 Class 对象。 


方法1
Class claszz1=Class.forName("com.rain.demo.Person");
方法2
Class claszz2=Person.class;
方法3
Class claszz3=new Hero().getClass();


解剖类的常用方法

//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
public Constructor<T> getConstructor(Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法
public Method getMethod(String name, Class<?>... parameterTypes)
//返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
public Field getField(String name)


//私有
public Field getDeclaredField(String name)
//私有
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定私有构造方法。
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)


反射功能实际作用是用来开发框架如:spring

实例

Person.java

package com.rain.demo;

public class Person {
		public String name="123";
		public Person(){
			System.out.println("person");
		}
		public Person(String name){
			System.out.println("person name");
		}
		public Person(String name,int password){
			System.out.println("person name password");
		}
		public void getString(){
		       System.out.println(name);
		}
}


Demo1.java

package com.rain.demo;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.junit.Test;



public class Demo1 {
	//反射新建类的对象
	@Test
	public void test1() throws NoSuchMethodException, SecurityException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		Class claszzClass = Class.forName("com.rain.demo.Person");
		Constructor c = claszzClass.getConstructor(null);
		Person p = (Person)c.newInstance(null);
		System.out.println(p.name);
	}
	@Test
	public void test2() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException{
		//提取当前类的 Class 对象。 
		Class claszzClass1=Class.forName("com.rain.demo.Person");
		
		//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
		Constructor c =claszzClass1.getConstructor(String.class);
		
		//使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,
		Person p = (Person)c.newInstance("xxxx");
		
		System.out.println("test2");
		System.out.println(p.name);
		
	}
	
	@Test
	public void test3() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		Person p = new Person();
		Class claszzClass3=Class.forName("com.rain.demo.Person");
	    //
		Method method = claszzClass3.getMethod("getString", null);  //方法名 参数
		method.invoke(p, null);
	}
	
	
}







  您阅读这篇文章共花了:  
捐赠支持:如果觉得这篇文章对您有帮助,请 "扫一扫"鼓励作者!
二维码加载中...
本文作者:RainFly      文章标题: Java反射机制
本文地址:http://www.rainfly.cn/?post=302
版权声明:若无注明,本文皆为“雨夜轩”原创,转载请保留文章出处。

赶紧抢沙发哟!

QQ游客评论

返回顶部    首页    捐赠支持    手气不错    友情链接    关于我们    站长工具    站长介绍    手机版本    后台登陆   
版权所有:雨夜轩    站长:RainFly    特别鸣谢   文章归档   皖ICP备15003600号-1   百度统计
Copyright©2015 雨夜轩 Powered by emlog强力驱动 七牛CDN全球加速 360站长联盟安全认证 中国博客联盟荣誉成员 可信赖网站 站点地图   
页面加载耗时:0.029秒 数据库查询次数:11次
背景设置