Java进阶知识之反射的概念与获取方法

一、反射的基本概念

1、反射的概念

将类的各个组成部分封装成其他对象,这就是反射的机制.

通过上图,我们可以通过反射获得Person类的Class对象,通过获得Class对象来获得其中的成员变量,构造方法和成员方法,这个也是我们使用反射的目的。

2、使用反射的好处

可以在程序的运行过程中操作这些对象,获得类对象的属性,方法等.

可以解耦,以此来提高程序的可扩展性

3、补充

反射:框架设计的灵魂,反射是框架设计的关键点

那么知道了反射,框架又是什么呢

框架:半成品软件,我们在开发的过程中可以在框架的基础上使用一些封装好的类进行软件开发,这样就可以简化编码了.

二、获取Class对象

1、获取Class对象的方式

Class.forname(“全类名”):将字节码文件加载进内存,返回class对象

类名.class:通过类名的属性class获取

对象.getclass():因为getclass()方法在object类中定义,又因为所有类都会继承object类,所以所有类都有这种方法

2、演示上面三种获取对象的方式

Person类

public class Person {

}

Main类

public class Main {
    public static void main(String[] args) throws Exception {
        Class person = Class.forName("test.Person");
        Class person1 = Person.class;
        Person p = new Person();
        Class person2 = p.getClass();
        System.out.println(person);
        System.out.println(person1);
        System.out.println(person2);
    }
}

程序运行结果

结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个

三、使用class对象功能

1、class对象具体功能方法介绍

2、具体功能演示

因为所有的方法使用方式类似,在这里我就只演示获取成员变量的方法了

Person类

public class Person {
    public String name;
    private int age;
    public String sex;
}

Main类

public class Main {
    public static void main(String[] args) throws Exception {
        Class person = Class.forName("test.Person");

        Field[] fields = person.getFields();
        System.out.println("getFields():只能获得公有的属性");
        for(int i = 0;i<fields.length;i++){
            System.out.println(fields[i]);
        }

        System.out.println("-----------------------------");

        Field[] fields1 = person.getDeclaredFields();
        System.out.println("getDeclaredFields():能获得所有的属性");
        for(int i = 0;i<fields1.length;i++){
            System.out.println(fields1[i]);
        }

        System.out.println("-----------------------------");

        Field field = person.getField("name");
        System.out.println("getField():获得单个公有属性");
        System.out.println(field);
    }
}

程序运行结果

getFields():只能获得公有的属性
public java.lang.String test.Person.name
public java.lang.String test.Person.sex
-----------------------------
getDeclaredFields():能获得所有的属性
public java.lang.String test.Person.name
private int test.Person.age
public java.lang.String test.Person.sex
-----------------------------
getField():获得单个公有属性
public java.lang.String test.Person.name

总结

到此这篇关于Java进阶知识之反射的概念与获取方法的文章就介绍到这了,更多相关Java反射的获取方法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java反射机制及Method.invoke详解

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 1. 得到某个对象的属性 复制代码 代码如下: public Object get

  • java根据方法名称取得反射方法的参数类型示例

    复制代码 代码如下: /** * 根据方法名称取得反射方法的参数类型(没有考虑同名重载方法使用时注意) * @param obj         类实例   * @param methodName  方法名 * @return * @throws ClassNotFoundException */public static Class[]  getMethodParamTypes(Object classInstance,  String methodName) throws ClassNotF

  • java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    一个普通的实体Person: private int id; private String name; private Date createdTime; ... //其它字段 // get set方法 ............... 现在需要把通过webService传过来的实体Person里面的所有字段的null值,换成"" 实现思路: 1.获取实体的所有字段,遍历 2.获取字段类型 3.调用字段的get方法,判断字段值是否为空 4.如果字段值为空,调用字段的set方法,为字段赋值

  • 利用反射获取Java类中的静态变量名及变量值的简单实例

    JAVA可以通过反射获取成员变量和静态变量的名称,局部变量就不太可能拿到了. public class Test { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //获取所有变量的值 Class clazz = Class.forName("com.qianmingxs.ScoreTable"); Field[] fields = clazz.g

  • Java通过反射机制动态设置对象属性值的方法

    /** * MethodName: getReflection<br> * Description:解析respXML 在通过反射设置对象属性值 * User: liqijing * Date:2015-7-19下午12:42:55 * @param clzzName * @param respXML * @return * @throws ClassNotFoundException * @throws DocumentException * @throws IllegalArgumentE

  • JAVA反射机制实例教程

    本文以实例形式详细讲述了Java的反射机制,是Java程序设计中重要的技巧.分享给大家供大家参考.具体分析如下: 首先,Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性.例如,使用它能获得 Java 类中各成员的名称并显示出来. Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性.例如,Pascal.C 或者 C++ 中就没有办法在程序中获得函数

  • Java反射机制的实现详解

    很多主流框架都使用了反射技术.像ssh框架都采用两种技术 xml做配置文件+反射技术. 与反射有关的类包. java.lang.reflect.*;和java.lang.Class; Java中所有类型(包括基本类型)都对应一个Class对象,这个Class就是java.lang.Class.即每一个类型,在Class中都有一个Class对象跟它对应.Class 没有公共构造方法.注意不是没有,是没有公共的. 如何获得Class对象 复制代码 代码如下: .针对每一个对象.getCalss(),

  • java反射机制示例详解

    1.什么是反射?一个类有多个组成部分,例如:成员变量,方法,构造方法等.反射就是加载类,并解剖出类的各个组成部分. 2.加载类java中有一个Class类用于代表某一个类的字节码.Class类既然代表某个类的字节码,那就要提供加载某个类字节码的方法:forName().   此方法用于加载某个类的字节码到内存中,并使用class对象进行封装.另外2种得到class对象的方式:类名.class对象.getClass() 先创建一个简单的Person类 复制代码 代码如下: public class

  • Java利用反射如何查找使用指定注解的类详解

    前言 最近有些空,想自己写个跟spring里的注解一样的注解来用,然后希望能找到使用了自己写了注解的类,下面来介绍一下实现方法 声明,下面代码是没看过spring源码写的,基本上都是网上找的博客,整理的 定义注解 Controller.java @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Controller { } RequestMapping.jav

  • Java进阶知识之反射的概念与获取方法

    一.反射的基本概念 1.反射的概念 将类的各个组成部分封装成其他对象,这就是反射的机制. 通过上图,我们可以通过反射获得Person类的Class对象,通过获得Class对象来获得其中的成员变量,构造方法和成员方法,这个也是我们使用反射的目的. 2.使用反射的好处 可以在程序的运行过程中操作这些对象,获得类对象的属性,方法等. 可以解耦,以此来提高程序的可扩展性 3.补充 反射:框架设计的灵魂,反射是框架设计的关键点 那么知道了反射,框架又是什么呢 框架:半成品软件,我们在开发的过程中可以在框架

  • PHP进阶学习之反射基本概念与用法分析

    本文实例讲述了PHP进阶学习之反射基本概念与用法.分享给大家供大家参考,具体如下: 一.前言 Reflection(反射)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性.这一特征在实际应用中也许用得不是很多. PHP从5.0开始完美支持反射API.PHP反射可以用于观察并修改程序在运行时的行为.一个面向反射的(reflection-oriented)程序组件可以监测一个范围内的代码执行情况,可以根据期望的目标与此相

  • 详解Java进阶知识注解

    一.注解的概念 1.注解官方解释 注解 叫元数据,一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举在同一个层次,它可以声明在包.类.字段.局部变量.方法参数等的前面,用来对这些元素进行说明.注释. 注解的作用分类 编写文档:通过代码里表示的元数据生成文档[生成doc文档] 代码分析:通过代码里表示的元数据进行分析[使用反射] 编译检查:通过代码里表示的元数据让编译器能够实现基本的编译检查[Override] 注解按照运行机制分类 源码注解:注解只在源码中存在,编译成

  • Java反射机制概念、原理与用法总结

    本文实例讲述了Java反射机制概念.原理与用法.分享给大家供大家参考,具体如下: 反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射机制能做什么 反射机制主要提供了以下功能: ① 在运行时判断任意一个对象所属的类: ② 在运行时构造任意一个类的对象: ③ 在运行时判断任意一个类所具有的成员变量和方法: ④ 在运行时调用任意一个

  • Java基础知识之注解、元注解

    目录 注解 注解作用 Java预定义的注解 自定义注解 元注解 实例: 注解使用总结 总结 注解 Java注解也称Java标注,是jdk1.5(5.0)后的新特征.Java语言中的类.方法.变量.参数和包等都可以被标注.和Javadoc不同,Java注解可以通过反射获取标注内容,在编译器生成类文件时,标注可以被嵌入到字节码中,Java虚拟机可以保留标注内容,在运行时可以获取到标注内容,当然它也支持自定义Java标注 功能:用于说明程序 用途:一般用在框架中使用 格式:@AnnotationNam

  • Java十分钟精通反射机制原理

    什么是反射? 反射机制是在运行状态中,它为Java提供一种"操作对象"的能力,在运行状态下,通过Class文件对象,可以调用到任何类里面的属性.方法.以及构造方法,包括私有的,所有的类在反射机制面前都是透明的 自己的概括:通过Class文件对象可以看到这个类里面的所有东西,并且可以使用和修改 反射的前提是获取Class文件对象((字节码对象),那么一共有三种方式获取: Class.forName("全类名") ----通过Class类的静态方法(最常用) 类名.cl

  • Java基础知识汇总

    Java基础知识 1.Java语言的优点: 1)Java是纯面向对象语言 2)与平台无关性,一次编译到处运行 3)Java提供了狠多内置类库 4)提供了对web应用的支持 5)具有较好的安全性(数组边界检测.Bytecode检测)和健壮性(强制型机制.垃圾回收器.异常处理) 6)去除c++难以理解的一些特性(头文件 指针 运算符重载 多重继承) 2.java与c++的异同: 1)Java为解释型语言,c++为编译型语言,java会慢但是跨平台 2)Jave为纯面向对象,c++既面向对象又能面向过

  • 实例讲解Java编程中数组反射的使用方法

    什么是反射 "反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为."这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释: 内省用于在运行时检测某个对象的类型和其包含的属性: 反射用于在运行时检测和修改某个对象的结构及其行为. 从它们的定义可以看出,内省是反射的一个子集.有些语言支持内省,但并不支持反射,如C++. 内省示例:instanceof 运算符用于检测某个对象是否属于特定的类. if (obj inst

  • Java的RTTI和反射机制代码分析

    RTTI,即Run-Time Type Identification,运行时类型识别.运行时类型识别是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息.RTTI能在运行时就能够自动识别每个编译时已知的类型. 很多时候需要进行向上转型,比如Base类派生出Derived类,但是现有的方法只需要将Base对象作为参数,实际传入的则是其派生类的引用.那么RTTI就在此时起到了作用,比如通过RTTI能识别出Derive类是Base的派生类,这样就能够向上转型为Derived.类似的,

  • Java进阶教程之String类

    之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础.在Java进阶中,我将对Java基础进行补充,并转向应用层面. 大部分编程语言都能够处理字符串(String).字符串是有序的字符集合,比如"Hello World!".在Java中,字符串被存储为String类对象.调用字符串对象的方法,可以实现字符串相关的操作. String类包含在java.lang包中.这个包会在Java启动的时候自动import,所以可以当做一个内置类(built-in class).我

随机推荐