J2EE&反射

目录

一.什么是反射

       用实体类Student做示范

三.反射实例化

四.反射动态方法调用

五.反射读写属性


一.什么是反射

反射java语言中的一种机制,通过这种机制可以动态的实例化对象,读写属性,调用方法

二.类类

  1. Class.forName(完整类名)
  2. 类名 .class
  3. 对象 .getClass

       用实体类Student做示范

package com.zking.fanshe;

public class Student {
	private String sid;

	private String sname;

	public Integer age;
	
	static{
		System.out.println("加载进jvm中!");
	}

	public Student() {
		super();
		System.out.println("调用无参构造方法创建了一个学生对象");
	}

	public Student(String sid) {
		super();
		this.sid = sid;
		System.out.println("调用带一个参数的构造方法创建了一个学生对象");
	}

	public Student(String sid, String sname) {
		super();
		this.sid = sid;
		this.sname = sname;
		System.out.println("调用带二个参数的构造方法创建了一个学生对象");
	}

	@SuppressWarnings("unused")
	private Student(Integer age) {
		System.out.println("调用Student类私有的构造方法创建一个学生对象");
		this.age = age;
	}

	public String getSid() {
		return sid;
	}

	public void setSid(String sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public void hello() {
		System.out.println("你好!我是" + this.sname);
	}

	public void hello(String name) {
		System.out.println(name + "你好!我是" + this.sname);
	}

	@SuppressWarnings("unused")
	private Integer add(Integer a, Integer b) {
		return new Integer(a.intValue() + b.intValue());
	}

	@Override
	public String toString() {
		return "Student [sid=" + sid + ", sname=" + sname + ", age=" + age + "]";
	}
	
	
}
	//1.Class.forname()
	Class stuClass	=Class.forName("com.zking.fanshe.Student");
		//2.类
	Class Class = Student.class;
	
		//3.对象 .getClass
	Student student = new Student();
	Class class2 = student.getClass();
	
	System.out.println(stuClass);
	System.out.println(class2);
	System.out.println(Class);

三.反射实例化

  • getConstructor
  • getDeclaredConstructor
  • newInstance
    //实例化对象
    	Constructor con = stuClass.getConstructor();
    	Student stu = (Student) con.newInstance();
    	stu.setSid("001");
    	stu.setSname("宝宝");
    	System.out.println(stu);
    	
    	//有参 参数构造
    	Constructor con1 = stuClass.getConstructor(String.class,String.class);
    	Student stu02 = (Student) con1.newInstance("004","瑶宝");
    	System.out.println(stu02);
    
        //私有方法①
    	Constructor<Student> con3 = stuClass.getDeclaredConstructor(Integer.class);
    	con3.setAccessible(true);
    	Student stu04 = con3.newInstance(18);
    	System.out.println(stu04);

四.反射动态方法调用

  • getMethod
  • getDeclaredMethod
    //无参的公共方法
	Method method = stuClass.getMethod("hello");
	method.invoke(stu);
	
	//有参的公共方法
	Method method2 = stuClass.getMethod("hello", String.class);
	method2.invoke(stu, "辉辉");
	
	//②
	Method method3 = stuClass.getDeclaredMethod("add", Integer.class,Integer.class);
	method3.setAccessible(true);
	int n = (Integer) method3.invoke(stu, 1,2);
	System.out.println(n);

五.反射读写属性

  • getField
  • getDeclaredField
    //公有反射属性
	Field field = stuClass.getField("age");
	field.set(stu, 98);
	System.out.println(stu);
	
	//私有反射属性
	Field sname = stuClass.getDeclaredField("sname");
	sname.setAccessible(true);
	sname.set(stu, "小红花");
	System.out.println(stu);

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶大头*^_^*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值