二十六、JavaSE----反射

简介: 二十六、JavaSE----反射

反射



       反射是Java中一个非常重要同时也是一个高级特性,基本上Spring等一系列框架都是基于反射的思想写成的。Java反射机制是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法;对于任意 一个对象,都能够知道调用它的任意属性和方法,这种动态获取信息以及动态调用对象方法的功能称为 java语言的反射机制。


Java反射机制主要提供了以下这几个功能:


在运行时判断任意一个对象所属的类


在运行时构造任意一个类的对象


在运行时判断任意一个类所有的成员变量和方法


在运行时调用任意一个对象的方法


       反射就像是一个掌控全局的角色,不管程序怎么运行,使用者都能够知道你这个类有哪些属性和方法,这个对象是由谁调用的,反射的优点显而易见。


下面是一个典型的反射类


9.png


与Java反射有关的类主要有


Class类



       在Java中,每定义一个java class实体都会产生一个Class对象。也就是说,当我们编写一个类, 编译完成后,在生成的.class文件中,就会产生一个Class对象,这个Class对象用于表示这个类的类型信息。Class中没有公共的构造器,也就是说Class对象不能被实例化。


其中Class类包括的方法有:


toString()


10.png


        toString()方法能够将对象转换为字符串,toString()首先会判断Class类型是否是接口类型,也就是说,普通类和接口都能够用Class对象来表示,然后再判断是否是基本数据类型,这里判断的都是基本数据类型和包装类,还有void类型。


类型有如下几种:


java.lang.Boolean :代表boolean数据类型的包装类

java.lang.Character:代表char数据类型的包装类

java.lang.Byte:代表byte数据类型的包装类

java.Iang.Short:代表short数据类型的包装类

java.lang.Integer:代表int数据类型的包装类

java.lang.Long:代表long数据类型的包装类

java.lang.Float:代表float数据类型的包装类

java.lang.Double:代表double数据类型的包装类

java.lang.Void:代表void数据类型的包装类


getName()


       这个方法返回类的全限定名称。


如果是引用类型,比如 String.class.getNameQ -> java. lang. String

如果是基本数据类型,byte.class.getNameO -> byte


如果是数组类型,new Object[3]).getClass().getName() -> [L java. lang.Object]


forName()


       根据类名获得一个Class对象的引用,这个方法会使类对象进行初始化。


例如 Class t = Class. forName(" java. lang.Thread")就能够初始化一个 Thread 线程对象


getClassLoader()


       获取类加载器对象。


getDeclaredMethods()


       获得该类所有方法


Field类

       Field类提供类或接口中单独字段的信息,以及对单独字段的动态访问。


equals(Object obj)


       属性与ob j相等则返回true


get(Object obj)


       获得obj中对应的属性值


set(Object obj, Object value)


       设置obj中对应属性值


Method 类

invoke(Object obj, Object... args)


       传递object对象及参数调用该对象对应的方法


ClassLoader 类


       反射中,还有一个非常重要的类就是ClassLoader类,类装载器是用来把类(class)装载进JVM 的。ClassLoader使用的是双亲委托模型来搜索加载类的,这个模型也就是双亲委派模型。


ClassLoader的类继承图如下:


11.png

相关文章
|
2天前
|
Java 编译器 API
JavaSE基础篇:反射(二)
JavaSE基础篇:反射(二)
|
2天前
|
Java 编译器
JavaSE基础 --- 类与对象
JavaSE基础 --- 类与对象
49 0
|
2天前
|
存储 设计模式 安全
JavaSE基础篇:反射(一)
JavaSE基础篇:反射(一)
JavaSE基础篇:反射(一)
|
10月前
|
Java
【JavaSE】Java基础语法(十五):继承
1. 继承的实现 继承的概念 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新 定义,以及追加属性和方法 实现继承的格式 继承通过extends实现 格式:class 子类 extends 父类 { } 举例:class Dog extends Animal { }
|
5月前
|
Java 数据库
反射-----JAVAEE反射机制-----详细结合代码分析
反射-----JAVAEE反射机制-----详细结合代码分析
|
10月前
|
Java
【JavaSE】Java基础语法(四十三):反射
概述: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法(包括私有的);对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的); 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.
|
10月前
|
Java
【JavaSE】Java基础语法(二十一):内部类
1. 内部类的基本使用 内部类概念 在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类定义格式
|
10月前
|
Java
【JavaSE】Java基础语法(九):封装
☔1. private关键字 概述 : private是一个修饰符,可以用来修饰成员(成员变量,成员方法) 特点 : 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他 类使用,提供相应的操作 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
|
存储 Java 编译器
二十八、JavaSE----注解
二十八、JavaSE----注解
二十八、JavaSE----注解
|
编译器
二十五、JavaSE----泛型
二十五、JavaSE----泛型
二十五、JavaSE----泛型