19、反射

1、反射机制概述

1.反射机制背景概述

1) Reflection也就是反射, 是Java被视为动态(或准动态)语言的一个关键性质

2)反射机制指的是程序在运行时能够获取任何类的内部所有信息

2.反射机制实现功能概述

1)只要给定类的全路径(类的全限定名),即可通过反射获取类的所有信息

2)反射可以在程序运行时获取任意一个对象所属的类对象

3)在运行时可以获取到类中所有属性对象,并对其操作(包括私有属性)

4)在运行时可以获取到类中、父类中所有方法,并调用

5)目前主流的应用框架如Struts2, Hibernate, Spring, SpringMVC等框架的核心全部是利用Java的反

射机制来实现的。

2、Class对象概述

1. Class (java.lang.Class) 是什么?

Person 人类

Student学生类

Class 类斑

1) 在Java中,任何事物都有类型,而Class指的是一 个类,他用来概述所有对象的类型;

2)通过Class类的对象, 可以知道他所描述的类的信息;

3)如String类型、 Integer类型、 Object类型, 那么String、 Integer和Object类型就是它们的类对象的Class;

4) Class不是所有类的父类(是Object) ;

2. Class对象的常用方法介绍

方法名

释义

getName()

获得类的完整名称

getDeclaredFields()

获得类中的所有属性,而getFields()只能获取到公有属性

getDeclaredMethods()

获得类中的所有方法,而getMethods()只能获取到公有方法

getConstructors()

获得类的构造方法

newInstance()

实例化对象,调用这个方法要求该类必须具有无参构造方法

getMethod(String

name,parameterTyeca.... )

根据方法名,获得方法对象,同getDeclaredMethods()

(方法名,参数类1.class,参数类2.class....)

//Field 是指 Java 反射 API 中的一个类,表示一个类或接口的字段(也称为属性)。
//Field 类提供了用于访问、检索和操作类或接口中定义的字段的方法。
//例如,您可以使用 Field 类获取字段的名称、类型和值,并对字段设置值。
try {
    Class c3 = Class. forName("first. Student"); 
    System. out. printIn(c3. getName());
    Field[] fields = c3. getDeclaredFields();
    //Field f2 = c3.getDeclaredField("agea");
    Method[] ms=c3.getDeclaredMethods();//获取所有方法
    for(Field f : fields) {
    	System. out. println(f. getType());
    	System. out. printIn(f. getName());
    	}
    Object obj=c3.newInstance();//相当于new一个对象
    Field f2 = c3.getDeclaredField("agea");
    f2.set(obj,18);//需要锁定哪个对象,才能设值
//私有属性也可以设值
    Field nameField = c3. getDeclaredField ("name");
	nameField. setAccessible(true) ;//开关,放开权限
	nameField.set(obj, "张三");

    Method m = c3. getDeclaredMethod("setName", String.class);
    m. invoke(obj, "李四");// stu. setName("李四");

    } catch (Exception e) {
    	e. printStackTrace();
    }

3.获取Class对象

//方法一:通过类的全限定名
Class c = Class. forName("w6.Car"); //Class类的静态方法forName(“完整的包名+类名”)
//方法二:通过对象,调用Object类中的getClass方法
Book book = new Book();
Class C = book. getClass();
//方法三:通过类.Calss
Class C = Book.class;
//通过类对象获得实例对象
Book book = (Book) C. newInstance()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值