Java语法——反射(JDK 1.1)

本文介绍了Java反射的概念,包括反射的宏观和微观解释,以及为何使用反射。详细阐述了如何通过反射获取类对象,操作属性、方法和构造器,并探讨了反射的优缺点。同时,讲解了获取类、属性、方法和构造器对象的方法及其常见应用。
摘要由CSDN通过智能技术生成


练习源码

Java语法——反射(JDK 1.1)

一、反射概念导引

1 Java核心思想–面向对象

  万事万物皆对象,即所有的事物都具备一些特征,根据这些特征抽象成Java类,再由Java类创建具体的对象进行操作。
  Java类创建的具体的对象称为“类的对象”。
  Java类由属性、方法和构造器组成,Java类、属性、方法和构造器作为事物也有其特征。

2 Java类、属性、方法和构造器特征分析
(1)Java类特征

  构造器 属性 方法

(2)属性特征

  修饰符 类型 属性名 属性值

(3)方法特征

  修饰符 返回值类型 方法名 形参 方法体

(4)构造器特征

  修饰符 形参 构造器名 方法体

  因此,Java类、属性、方法和构造器这四种事物都可以抽象成Java类。

3 四个特殊的Java类(反射类)
(1)Java类的类——class类

  作用:可以完整的描述一个Java类。
  由class创建的对象称为“class类的对象(或类对象)”,是一种特殊的“类的对象”。
  每个Java类都对应一个类对象,这个类对象可以完整的描述这个Java类。
  要理解好 普通Java类、普通Java类的对象、class类和class类的对象这四个概念之间的关系。

(2)属性的类——Field类

  作用:可以完整的描述Java类的一个属性。
  Field类创建的对象是属性对象,属性对象(或属性对象数组,因为一个Java类可能有多个属性)是类对象的一个属性。

(3)方法的类——Method类

  作用:可以完整的描述Java类的一个方法。
  Method类创建的对象是方法对象,方法对象(或方法对象数组)是类对象的一个属性。

(4)构造器的类——Constructor类

  作用:可以完整的描述Java类的一个构造器。
  Constructor类创建的对象是构造器对象,构造器对象(或构造器对象数组)是类对象的一个属性。

4 传统方法操作对象
(1)操作步骤

  ① 导入类
  ② new对象
  ③ 操作对象

(2)问题分析

  ① 有时候程序运行时提前不知道操作的对象属于哪个类,由用户请求来决定,如何操作对象?——动态问题
  ② 有时候想要更改使用的类,代码中需要修改的地方很多,如何能很方便的更换使用的类?——耦合问题

  反射可以解决以上问题,可以在程序运行时动态获取类的信息和操作对象,可以降低代码的耦合性,方便更换使用的类。

二、反射概念解读

1 什么是反射?
(1)宏观来讲:

  Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
  这种动态获取类的信息和操作对象属性和方法的功能称为Java语言的反射机制。
  “动态”是因为编写程序时不确定要操作的是哪一个类的对象,运行时根据反射机制可以操作任何一个类的对象。

(2)具体来讲:

  反射将Java类、属性、方法、构造器都抽象成Java类,其中Java类的类(class)创建的对象叫类对象,属性类(Field)、
  方法类(Method)和构造器类(Constructor)的对象都是类对象的属性。
  反射的过程就是① 获取类对象,② 获取属性对象(或方法对象、构造器对象),③ 操作属性对象(或方法对象、构造器对象)的过程。
  注:实际上使用传统方法new对象时,JVM也是通过加载类对象来创建实例对象的,这里不做深究。

2 反射有什么缺点?

  (1)性能差,效率低,是一种解释操作,操作属性和方法时要远慢于传统方式
  (2)代码复杂,不易阅读

  因此,实际开发中根据需求才使用反射。

三、获取类对象

1 反射获取类对象的三种方式
// 第一种方式--->根据全限定路径获取
Class cla01 = Class.forName("com.cty.pojo.Person");
// 第二种方式---->调用底层使用反射封装的方法,根据类名获取
Class cla02 = Person.class;
// 第三种方式---->调用底层使用反射封装的方法,根据对象获取
Class cla03 = new Person().getClass();
// 一个Java类只有一个类对象,上述三种方式获取的类对象都是同一个,可通过==来判断
2 class类的常用方法

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值