您的位置:首页 > 编程语言 > Java开发

JavaWeb学习12-13

2015-06-16 16:17 183 查看
12 反射

一个类有多个组成部分(成员变量,方法,构造函数)。反射就是加载类,并解剖出类的各个组成部分。

加载类

加载类的三种方式(获取类的字节码):

1、 Class clazz = Class.forName("类路径“);

2、 Class clazz = new 类().getClass();

3、 Class clazz = 类.class;

解剖类

Class对象提供了如下常用方法:

public属性

public Constructor getConstructor() 构造函数(创建对象)

public Method getMethod()方法 (执行)

public Field getField()成员变量 (封装数据)

private属性

public Constructor getDeclaredConstructor()

public Method getDeclaredMethod()

public Field getDeclaredField()

13 反射类的构造函数

利用Constructor创建对象

Person类

package JavaWeb.reflect;

import java.util.List;

public class Person {

public String name = "aaaaa";

public Person(){
System.out.println("person");
}

public Person(String name){
System.out.println(name);
}

public Person(String name,int password){
System.out.println(name+":::"+password);
}

private Person(List list){
System.out.println(list);
}
}


用反射对Person类创建对象

package JavaWeb.reflect;

import java.lang.reflect.Constructor;
import java.util.LinkedList;
import java.util.List;

import org.junit.Test;

//解剖类的构造函数,创建类的对象
public class Demo2 {

//反射构造函数: public Person()
@Test
public void test1() throws Exception{

Class clazz =  Class.forName("JavaWeb.reflect.Person");//加载类
Constructor c = clazz.getConstructor(null);//获取构造方法

Person p =(Person) c.newInstance(null);//创建对象

System.out.println(p.name);
}

//反射构造函数: public Person(String name)
@Test
public void test2() throws Exception{

Class clazz =  Class.forName("JavaWeb.reflect.Person");
Constructor c = clazz.getConstructor(String.class);

Person p =(Person) c.newInstance("bbb");

System.out.println(p.name);
}

//反射构造函数: public Person(String name,int password)
@Test
public void test3() throws Exception{

Class clazz =  Class.forName("JavaWeb.reflect.Person");
Constructor c = clazz.getConstructor(String.class,int.class);

Person p =(Person) c.newInstance("bbb",12);

System.out.println(p.name);
}

//反射构造函数:private Person(List list)
@Test
public void test4() throws Exception{

Class clazz =  Class.forName("JavaWeb.reflect.Person");
Constructor c = clazz.getDeclaredConstructor(List.class);

List list = new LinkedList();
list.add("aa");
list.add("bb");
list.add("vv");

c.setAccessible(true);//暴力反射
Person p =(Person) c.newInstance(list);

System.out.println(p.name);
}

//创建对象的另外一种途径 一下代码等效于test1
@Test
public void test5() throws Exception{

Class clazz =  Class.forName("JavaWeb.reflect.Person");
Person p = (Person) clazz.newInstance();//无参构造函数函数
System.out.println(p);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: