反射——Java反射机制

反射概述

什么是反射?

①   反射的概念是由Smith在1982年首次提出的,主要指程序可以访问、检测和修改它本身状态或行为的一种能力。

②   JAVA反射机制是在运行状态中,对应任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种状态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

③   简单的说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。包括其访问修饰符、父类、实现的接口、属性和方法的所有信息,并可在运行时创建对象、修改属性(包括私有的)、调用方法(包括私有的)。

反射机制

①   为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态和静态的概念?

a)         静态编译:在编译时确定类型,绑定对象,即通过。

 Student stu=new Student(“zhangsan”,20);

b)         动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,用以降低类之间的耦合性。

Class.forName(“com.mysql.jdbc.Driver.class”).newlnstance();

c)         反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是J2EE的开发中。

d)         它的缺点是对性能有影响,使用反射基本上是一种解释操作,这类操作总是慢于直接执行的相同操作。

Java反射机制主要提供了以下功能

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

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

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

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

Class对象

①   Class对象是Reflection故事起源。要想操作类中的属性和方法,都必须从获取Class对象开始。

a)         类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并编译一个新类,就会产生与之对应的一个Class对象。

b)         Class类没有公共构造方法。Class对象是在加载类时由Java虚拟机以及通过调用类加载器中的方法自动构造的,因此不能显式地声明一个Class对象。

②   获取Class对象的方法有多种


获取方式


说明


示例


object.getClass()


获取指定示例的

Class


String str=”abc”;

Class c1=str.getClass();


class.getSuperclass()


获取当前Class

的继承类的

Class


List list=new ArrayList();

Class listClass=list.getClass();

Class superClass=

listClass.getSuperClass();


.class语法


.class直接获取


Class listClass=ArrayList.class;


Class.forName(类名);


用Class的静态方法,传入类的全称即可


Class c1=Class.

forName(“java.lang.String”);


Primitive.TYPE


基本数据类型的包装类获取Class的方式


Class longClass=Long.TYPE;

Class integerClass=Integer.TYPE;

Class voidClass=Void.TYPE;

示例:

创建一个雇员类

 1 class Employee {
 2     private String name;
 3     private int age;
 4
 5     public String getName() {
 6         return name;
 7     }
 8
 9     public void setName(String name) {
10         this.name = name;
11     }
12
13     public int getAge() {
14         return age;
15     }
16
17     public void setAge(int age) {
18         this.age = age;
19     }
20
21     public Employee(String name, int age) {
22         super();
23         this.name = name;
24         this.age = age;
25     }
26
27 }

主方法中获取Class对象:

 1     public static void main(String[] args) {
 2         Employee employee = new Employee("zhansan", 20);
 3
 4         // 对象名.getClass()
 5         /*
 6          /* Class<?> classType = employee.getClass();
 7          * System.out.println(classType.getName());
 8          * System.out.println(classType.getSuperclass().getName());
 9          */
10
11         // 类名.class
12         /*
13          * Class<?> classType=Employee.class;
14          * System.out.println(classType.getName());
15          * System.out.println(classType.getSuperclass().getName());
16          */
17
18         // 使用Class.forName();
19         /*try {
20             Class<?> classType = Class.forName("com.iotek.classtype.Employee");
21             System.out.println(classType.getName());
22             System.out.println(classType.getSuperclass().getName());
23         } catch (ClassNotFoundException e) {
24             e.printStackTrace();
25         }*/
26
27         //获取基本数据类型的Class对象
28         //Class<?> classType = int.class;
29         //System.out.println(classType.getName());
30         //System.out.println(classType.getSuperclass().getName());//无父类null值无法获取getName()
31
32         //通过基本数据类型的包装类来获取
33         //对应的基本数据类型对应的Class对象
34         //Class<?> classType=Double.TYPE;
35         //System.out.println(classType.getName());
36         //System.out.println(classType.getSuperclass().getName());
37
38         Class<?> classType=Double.class;
39         System.out.println(classType.getName());
40         System.out.println(classType.getSuperclass().getName());
41     }
42
43 }
时间: 2025-01-09 08:41:45

反射——Java反射机制的相关文章

java反射机制与动态代理

在学习HadoopRPC时,用到了函数调用,函数调用都是采用的java的反射机制和动态代理来实现的,所以现在回顾下java的反射和动态代理的相关知识. 一.反射 JAVA反射机制定义: JAVA反射机制是java程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射就是把Java类中的各种成分映射成相应的Java类. Java反射机制主要提供了以下功能: 1

Java反射机制(创建Class对象的三种方式)

1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Field java.lang.reflect.Method java.lang.reflect.Modifier 2:什么是反射 JAVA反射机制是在运行状态中,对于任意一个类.都能都知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称

Java反射-再次认识

最近的学习发现在很多方面,基础知识掌握的还很不牢固,所以对于架构.知识点等属于那种问啥啥知道,做啥啥不出来的那种类型.前些日子,老师一直在抓基础,做什么都要从最简单的demo开始,只有懂了原理之后再去用一些高深的东西如框架等才会理解的更深刻.现在首先需要理解的就是基本上每个Java框架都在用的反射技术. 要想理解反射,首先得了解类的加载过程,看下图: 我们的源代码经过编译之后变成字节码,然后在JVM中运行时通过类加载器加载字节码在内存中生成Class类对象,这个Class类对象内包含有field

公共技术点之 Java反射 Reflection

公共技术之 Java反射 Reflection 1. 了解Java中的反射 1.1 什么是Java的反射 Java反射是可以让我们在运行时获取类的函数.字段.父类.接口等Class内部信息的机制.通过反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值,即使方法或字段是私有的的也可以通过反射的形式调用,这种"看透class"的能力被称为内省,这种能力在框架开发中尤为重要. 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此

java反射基础知识(二)

1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种"看透 class"的能力被称为内省,这种能力在框架开发中尤为重要. 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此只能通过反射的形式来使用在运

Java反射及其在Android中的应用学习总结

一. Java反射机制 Reflection 是Java被视为动态(或准动态)语言的一个关键性质.这个机制同意程序在执行时透过Reflection APIs取得不论什么一个已知名称的class的内部信息,包含其modifiers(诸如public, static 等等).superclass(比如Object).实现之interfaces(比如Serializable).也包含fields和methods的全部信息,并可于执行时改变fields内容或调用methods(包含被声明为private

java反射机制(一)—— 利用反射机制实例化对象

一.Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体.或对其fields设值.或唤起其methods.(度娘文库是这么说的) 二.这篇文章主要介绍一下通过反射机制去实例化一个类的对象,然后调用其方法.本文主要介绍两种方式,第一种就是通过构造函数来实例化,第二种就是通过Cl

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam

Java 反射机制

使用 Java 反射机制可以在运行时期检查 Java 类的信息,检查 Java 类的信息往往是你在使用 Java 反射机制的时候所做的第一件事情,通过获取类的信息你可以获取以下相关的内容: Class 对象 类名 修饰符 包信息 父类 实现的接口 构造器 方法 变量 注解 除了上述这些内容,还有很多的信息你可以通过反射机制获得,如果你想要知道全部的信息你可以查看相应的文档 JavaDoc for java.lang.Class 里面有详尽的描述. 在本节中我们会简短的涉及上述所提及的信息,上述的