设为首页 加入收藏

TOP

Java基础教程反射详解(二)
2018-04-29 06:06:46 】 浏览:431
Tags:Java 基础 教程 反射 详解
一个通用的设置某个对象的某个属性为指定的值)

  * A:案例演示

  * public void setProperty(Object obj, String propertyName, Object value){},此方法可将obj对象中名为propertyName的属性的值设置为value。

  ###10_反射(读取配置文件并赋值)

  * A:案例演示

  * 从properties文件中读取一个类和类的成员变量信息,通过反射机制构建该类对象,并且完成成员变量的赋值操作

  zhidisoft.className=com.zhidisoft.bean.Student

  no=10003

  name=\u5F20\u4E09

  age=20

  id=1

 

package com.zdsoft.yanshe.copy;

import com.zdsoft.beiyanshe.Student;

public class yanshe
{

	public static void main(String[] args) throws Exception
	{
		//从字节码阶段返回 class对象
		Class st=Student.class;
		
		//创建对象阶段获取class对象
		Student stu = new Student();
		//通过这对象获取这个对象的class对象
		Class st1 = stu.getClass();
		//源码阶段获取class对象    需要文件的地址
		 Class<?> st2= Class.forName("com.zdsoft.beiyanshe.Student");
		 	
		 //获取包装类对象的Class
		 Class i= Integer.TYPE;
		 Class ii= int.class;
		
		System.out.println(st==st1);
		System.out.println(st1==st2);
		System.out.println(i==ii);
		
	}

}
---------------------------工具类-------------------------------
package com.zdsoft.utils;

import java.lang.reflect.Field;

public class Tools
{
	public static void chou(Object dx,String mz,Object value) throws Exception, SecurityException
	{
		//获取字节码文件
		Class c1 = dx.getClass();
		//获取对象的属性
		Field fi = c1.getDeclaredField(mz);
		//获取权限
		fi.setAccessible(true);
		//写入值
		fi.set(dx, value);
	}
}
------------------暴力反射-------------------

package com.zdsoft.yanshe.copy;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;

import com.zdsoft.beiyanshe.Student;
import com.zdsoft.utils.Tools;

public class baolifanshe
{
	public static void main(String[] args) throws Exception, SecurityException
	{	
		//获取字节码
		Class stu= Student.class;
		//得到有参构造器
		Constructor con = stu.getConstructor(String.class,int.class);
		//实例化对象
		Student s = (Student) con.newInstance("张三",20);
		System.out.println(s);
		
		
		//通过暴力反射得到对象的 不管共有私有的方法
		Field f = stu.getDeclaredField("name");
		//让对象的私有属性修改权限对自己开放;
		f.setAccessible(true);
		//修改对象的属性值
		f.set(s, "李四");
		System.out.println(s);
		
		
		//获取对象的方法
		Method method = stu.getMethod("chi", int.class);
		//调用方法
		method.invoke(s, 3);
		//泛型去限制
		ArrayList<Integer> list = new ArrayList();
		list.add(1);
		Class cla1 = list.getClass();
		Method m2 = cla1.getMethod("add", Object.class);
		m2.invoke(list, "hahah");
		System.out.println(list);
		
		Tools tools = new Tools();
		tools.chou(s, "name", "哈哈");
		
		tools.chou(s, "age", 55);
		System.out.println(s);
		
	}
}
------------------作用对象--------------
package com.zdsoft.beiyanshe;

public class Student
{
	private String name;
	private int age;
	//给对象get set方法
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age = age;
	}
	//重载有参和无参的构造器
	public Student(String name, int age)
	{
		
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java基础教程包、 继承 、抽象讲解 下一篇disruptor 源码解读

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目