java反射经典总结

1:通过反射解析这个类的构造函数

public class person {

	public String name="jack";
	private int password=123;
	private static int age;
	public person()
	{
		System.out.println("person");
	}
	public person(String name) {
		System.out.println("person name:"+name);
	}
	public person(String name,int age) {
		System.out.println("person name:"+name+"person age:"+age);
	}
	private person(List list) {
		System.out.println("person list");
	}
	public void aa()
	{
		System.out.println("aa");
	}
	public void aa1(String name,int age)
	{
	System.out.println("name:"+name+"age:"+age);
	}
	private void aa2(InputStream inputStream)
	{
		System.out.println("in");
	}
	public static void aa3(int num)
	{
		System.out.println("aa3"+num);
	}
}

  2:反射这个类的构造函数

//反射类的构造函数,创建类的对象
/*
 * 反射類的構造方法的目的:創建類的對象,實例化對象
 * 1:加載類class.forname
 * 2:獲取構造函數getConstructor
 * 3:運行構造方法(實例化)newInstance()
 */
public class Demo1 {

    // 反射构造函数 public person()
    @Test
    public void test1() throws ClassNotFoundException, SecurityException,
            NoSuchMethodException, IllegalArgumentException,
            InstantiationException, IllegalAccessException,
            InvocationTargetException {
        // 先加载类,在获取类的构造函数(构造函数目的就是创建对象),在创建对象
        Class c = Class.forName("com.reflction.person");
        Constructor constructor = c.getConstructor(null);// 接受可变参数,null表示无参
        person person = (com.reflction.person) constructor.newInstance(null);
        System.out.println(person.name);

    }

    // 反射构造函数 public person(String name)
    @Test
    public void test2() {
        try {
            Class c = Class.forName("com.reflction.person");
            Constructor constructor1 = c.getConstructor(String.class);
            person person1 = (person) constructor1.newInstance("****");
            System.out.println(person1.name);

        } catch (Exception e) {
        }
    }
    //    反射構造函數public person(String name,int age)
    @Test
    public void test3()
    {
        try {

            Class c = Class.forName("com.reflction.person");
            Constructor constructor3 = c.getConstructor(String.class,int.class);
        person person3=    (person) constructor3.newInstance("jack",23);
        System.out.println(person3.name);
        } catch (Exception e) {
        }
    }
    //反射構造函數 private person(List list)
    @Test
    public void test4()
    {
try {
            Class c = Class.forName("com.reflction.person");
            Constructor constructor4=c.getDeclaredConstructor(java.util.List.class);
            //私有的東西外界不能訪問,但反射可以,強制打開
            constructor4.setAccessible(true);//暴力反射
            ArrayList<String> list=new ArrayList<String>();
            list.add("name");
            list.add("age");
          person person4=(person) constructor4.newInstance(list);
          System.out.println(person4.name);
        } catch (Exception e) {
        }
    }
}

3:反射类的方法

//反射類的方法
/*
 * 反射類的方法的目的:運行該方法
 * 1:加載類的對象Class.forname()
 * 2:獲取該方法getMethod,getDeclaredMethod()
 * 3:運行該方法invoke();
 */
public class Demo2{

	//反射類的public void aa()
	@Test
	public void test1()
	{
		try {
			person person=new person();
            //加載類
			Class c = Class.forName("com.reflction.person");
			//獲取方法
		Method method=c.getMethod("aa",null);//第一個參數那個方法,第二個參數
		//讓方法運行
		method.invoke(person, null);//讓那個對象運行
		//比如:上廁所方法,肯定要誰去上廁所,要傳個person對象

		} catch (Exception e) {
		}
	}

	//反射這個方法public void aa1(String name,int age)
	@Test
	public void test2()
	{
		try {
			person person=new person();
			Class c = Class.forName("com.reflction.person");
		Method method=c.getMethod("aa1",String.class,int.class);
		method.invoke(person,"jack",23);
		} catch (Exception e) {
		}
	} 

	//反射這個方法private void aa2(InputStream inputStream)
	@Test
	public void test3()
	{
		try {

			person person=new person();
			Class c = Class.forName("com.reflction.person");
		Method method=c.getDeclaredMethod("aa2",InputStream.class);//private
	    method.setAccessible(true);//暴力打開,沒有這句話的話private不能訪問
		method.invoke(person, new FileInputStream("F:\\1.txt"));

		} catch (Exception e) {
		}
	}

	//反射public static void aa3(int num)
	@Test
	public void test4()throws Exception
	{
		person person=new person();
		Class c = Class.forName("com.reflction.person");
		Method method=c.getMethod("aa3",int.class);
		method.invoke(null,23 );//static 方法不用傳入對象,當然也可以傳入

	}

}

 3:反射类的字段

 

//反射字段
/*
* 反射字段目的:獲取字段的值,或者為字段賦值封裝數據
* 1:加載類
* 2:獲取字段
* 3:取得那個字段的值
*/
//public String n
public class Demo3 {

@Test
public void test1()throws Exception
{
person person=new person();
//加載類
Class c = Class.forName("com.reflction.person");
//獲取字段
Field field=c.getField("name");
//獲取那個對象的字段,取字段的值
System.out.println(field.get(person));
//當然也可以設置字段的值
field.set(person, "xiaoli");
System.out.println(person.name);

}
//反射字段	private int password=123;
@Test
public void test2()throws Exception
{
person person=new person();
Class c = Class.forName("com.reflction.person");
Field field=c.getDeclaredField("password");
field.setAccessible(true);//暴力打開private
System.out.println(field.get(person));
field.set(person, 456);
System.out.println(field.get(person));
}
}

  

时间: 2024-12-14 05:51:25

java反射经典总结的相关文章

Java反射机制的学习

Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Java反射机制没啥用.或许在J2EE.J2SE等平台,Java反射机制没啥用(具体我也不了解,不多做评论),但是在Android应用开发中,该

[转载] Java反射机制的学习

本文转载自: http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Ja

java反射案例

Java反射经典实例 2007-08-29 17:55:25 分类: Java Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫——反射.反射机制是如今很多流行框架的实现基础,其中包括Spring.Hibernate等.原理性的问题不是本文的重点,接下来让我们在实例中学习这套精彩的机制. 1. 得到某个对象的属性 1 public Object getProperty(Object owner, String fieldName) throws Exception {

公共技术点之 Java反射 Reflection

公共技术之 Java反射 Reflection 1. 了解Java中的反射 1.1 什么是Java的反射 Java反射是可以让我们在运行时获取类的函数.字段.父类.接口等Class内部信息的机制.通过反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值,即使方法或字段是私有的的也可以通过反射的形式调用,这种"看透class"的能力被称为内省,这种能力在框架开发中尤为重要. 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此

Java反射学习总结

广州疯狂软件教育Java培训,iOS培训分享Class类是Reflection API中核心的类,他位于java.lang.Class列出一些常用的方法.- getName() : 获得类的完整名字- getFields() : 获得类的public类型的属性- getDeclaredFields() : 获得类的所有属性- getMethods() : 获得类的public类型的方法- getDeclaredMethods() : 获得类的所有方法- getMethod(String name

java反射基础知识(二)

1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种"看透 class"的能力被称为内省,这种能力在框架开发中尤为重要. 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此只能通过反射的形式来使用在运

【54】Java反射机制剖析

java反射机制: 1.指的是可以于运行时加载,探知和使用编译期间完全未知的类. 2.程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用他的任意一个方法和属性; 3.加载完类之后, 在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象), 这个对象包含了完整的类的结构信息,而且这个Class对象就像一面镜子,透过这个镜子看到类的结构,所以被称之为:反射. 4.每个类被加载进入内存之后,系统

java反射快速入门(一)

本文会从以下几个方面讲起 ① 反射的简单解释 ② java反射的API接口 及 demo ③ 反射的优缺点.应用场景 一.什么是反射? java反射:在程序运行中动态获取类的信息,及动态调用对象的方法,这就是java反射 二.java反射的API接口 常用API接口规律 getXX() : 获取类本身 及父类的public属性.方法等 getDeclaredXX() :  获取类本身的所有私有.保护属性.方法等 getDeclaredXX(String name) : 获取类本身的指定name的

Reflect Java反射机制

// 参考:http://blog.csdn.net/stevenhu_223/article/details/9286121 最近发现好多框架底层的实现与Java的reflect和cglib有关,看过原理后找了几篇经典的文档,以供后来复习使用 前言:我们知道,类和类的成员变量及方法都是要求有权限控制的(public.protected.private):而当类中的信息封装为私有时,外部对该类中私有的信息是没有访问权限的,也就是说当该类里的内容信息均受private权限控制时,外部想要获取和处理