java基础之反射(2.class类的使用)

本章主旨: 可以使用class类完成对象的实例化操作
可以通过construct类调用有参构造方法完成对象的实例化操作
class主要反射的源头 不光可以取得对象所在类的信息也可以通过class方法进行对象实例化操作

正常情况下使用new关键字为对象实例化,如果现在已经实例化好了Class对象则就可以通过提供的

以下代码进行演示 必须是无参构造

package KownClass;

class person {
	private String name;// name属性
	private int age; // age属性
	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;
	}
	@Override
	public String toString() {
		return "person [name=" + name + ", age=" + age + "]";
	}

}

public class test1 {
	public static void main(String[] args) {
		Class<?> c = null;// 指定泛型
		// 以下的操作形式是在开发中最常用的一种形式
		try {
			// 传入完整的包名 名称实例化对象
			c = Class.forName("KownClass.person");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		person per=null;//声明person 对象
		try {
			per=(person) c.newInstance();//实例化对象
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		per.setName("JDK");
		per.setAge(22);
		System.out.println(per);//内容输出 调用tostring
	}
}
可以发现即使不使用关键字new 对象也可以进行实例化操作 反射的作用 因为       

  per=(person) c.newInstance();//已经实例化对象



在使用有参构造方法时
1.通过class为getConstruct取得本类方法的全部方法
2.向构造方法传递一个对象数组进去,里面包含着构造方法的各个参数
3.之后通过construct实例化对象

package KownClass;

import java.lang.reflect.Constructor;

class person {
	private String name;// name属性
	private int age; // age属性

	public String getName() {
		return name;
	}

	public person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "person [name=" + name + ", age=" + age + "]";
	}

}

public class test1 {
	public static void main(String[] args) {
		Class<?> c = null;// 指定泛型
		// 以下的操作形式是在开发中最常用的一种形式
		try {
			// 传入完整的包名 名称实例化对象
			c = Class.forName("KownClass.person");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		person per = null;// 声明person 对象
		//1.向构造方法传递一个对象数组进去,
		Constructor<?>cons[]=null;
		/*	之	后通过construct实例化对象*/
		cons=c.getConstructors();
		try {
			//2.里面包含着构造方法的各个参数
			per = (person)cons[0].newInstance("JDK",22);// 实例化对象
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		/*per.setName("JDK");
		per.setAge(22);*/
		System.out.println(per);// 内容输出 调用tostring
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值