Java 反射

1.为什么有反射?

Java是一门静态语言,运行时结构不能改变,编程的灵活性受到极大限制

Java的设计者决定用反射来解决问题,有了反射,Java又成为“准动态语言”

反射的英语:reflection

2.反射做了什么?

        我们知道,当类中属性,方法private后,我们是不可以直接读取的,只能通过构造方法来实现set和get获取,而反射机制允许程序运行时读取和操作类的任何内部信息,如类名,类方法,类属性,当然,这也存在安全性问题。

        在加载完类后,堆内存的方法区会产生一个Class类型的对象,这个对象包含完整的类的信息。这个对象就像一面镜子,Java的设计者非常形象的将这一技术命名为反射。

3.反射用法

 一个类只有一个class对象

传统创建对象:

Student student = new Student();

反射用法1:

 Class c1 = Class.forName("Student");

反射用法2:

Class c2 = Student.class;

4.获取类的属性

//只能获取public的属性
Class c1 = Class.forName("Student");
Field[] f1 = c1.getFields();

//可以获取全部的属性
Class c1 = Class.forName("Student");
Field[] f1 = c1.getDeclaredFields();
for (Field field : f1) {
     System.out.println(field);
}

5.获取类的方法

//只能获取public的方法
Class c1 = Class.forName("Student");
Method[] m1 = c1.getMethods();
for (Method method : m1) {
    System.out.println(method);
}

//可以获取全部的方法
Method[] m1 = c1.getDeclaredMethods();
for (Method method : m1) {
    System.out.println(method);
}

6.Java 动态创建对象执行方法

//获取Class对象
Class c1 = Class.forName("Student");
//创建一个对象(无参构造类型)
Student stu1 = (Student) c1.newInstanc

//通过构造器创建对象(有参数)
Constructor Constructor = c1.getDeclaredConstructor(int.class, String.class, String.class, int.class);
Student stu2 = (Student) Constructor.newInstance(10, "Tsin", "男", 17);
//print
System.out.println(stu2.getName());

7.class类的常见方法

8.哪些类可以有class对象?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

镜火G

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

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

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

打赏作者

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

抵扣说明:

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

余额充值