Java基础之反射原理与用法详解

 更新时间:2020年02月07日 10:30:52   作者:扎心了,老铁  
这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下

本文实例讲述了Java基础之反射原理与用法。分享给大家供大家参考,具体如下:

1.什么是反射?

反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射。

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

2.反射机制能做什么?

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

2. 在运行时判断构造任意一个类的对象Constructor

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

4. 在运行时调用任意一个对象的方法。method.invoke(object,args)

3.反射机制相关的API

获得完整的包名和类名

Student.java

package com.reflect.test;
public class Student {
  private int id;
  private String name;
  public Student() {}
  public Student(int id, String name) {
    super();
    this.id = id;
    this.name = name;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  @Override
  public String toString() {
    return "Student [id=" + id + ", name=" + name + "]";
  }
}

Test.java

package com.reflect.test;
public class Test {
  Student stu = new Student();
  public static void main(String[] args) {
    Test test = new Test();
    test.getClassName();
  }
  //获得完整的包名和类名
  public void getClassName() {
    System.out.println(stu.getClass().getName());
  }
}

运行结果

com.reflect.test.Student

获取Class的三种方法

   public static void main(String[] args) {
    Test test = new Test();
    test.getStudentClass();
  }
  //获取Class对象的三种犯法
  public void getStudentClass() {
    //第一种方法,forName
    Class<?> class1;
    try {
      class1 = Class.forName("com.reflect.test.Student");
      System.out.println("class1:"+class1);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    //第二种方法,class
    Class<?> class2 = Student.class;
    System.out.println("class2:"+class2);
    //第三种方法,getClass()
    Student stu1 = new Student();
    Class<?> class3 = stu1.getClass();
    System.out.println("class3:"+class3);
  }

运行结果

class1:class com.reflect.test.Student
class2:class com.reflect.test.Student
class3:class com.reflect.test.Student

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 解析Spring中的静态代理和动态代理

    解析Spring中的静态代理和动态代理

    学习 Spring 的过程中,不可避免要掌握代理模式。这篇文章总结一下代理模式。顾名思义,代理,就是你委托别人帮你办事,所以代理模式也有人称作委托模式的。比如领导要做什么事,可以委托他的秘书去帮忙做,这时就可以把秘书看做领导的代理
    2021-06-06
  • itextpdf提取PDF文件中的任意页码实现示例

    itextpdf提取PDF文件中的任意页码实现示例

    这篇文章主要为大家介绍了itextpdf提取PDF文件中的任意页码实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • IntelliJ IDEA基于Scala实现Git检查工具

    IntelliJ IDEA基于Scala实现Git检查工具

    这篇文章主要介绍了如何使用Scala实现自定义的Git检查工具,大家可以基于本文的示例进行扩展与实现,也可以进行其他应用方向的尝试,感兴趣的可以了解下
    2023-08-08
  • jvm类加载器基础解析

    jvm类加载器基础解析

    这篇文章主要介绍了jvm类加载器基础解析,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 浅析Java如何优雅的避免那无处不在的空指针异常

    浅析Java如何优雅的避免那无处不在的空指针异常

    在Java编程语言中,NullPointerException(简称NPE)是一种常见的运行时异常,本文主要来和大家讲讲如何优雅的避免这些空指针异常,需要的可以参考下
    2024-03-03
  • Java中正则表达式的使用和详解(上)

    Java中正则表达式的使用和详解(上)

    这篇文章主要介绍了Java中正则表达式的使用和详解,包括匹配验证验证email是否正确,在字符串中查询字符或者字符串的代码实例,需要的朋友可以参考下
    2017-04-04
  • Java举例讲解分治算法思想

    Java举例讲解分治算法思想

    分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解,本篇文章我们就用分治算法来实现归并排序快速排序以及二分搜索算法
    2022-04-04
  • 解决mybatis 中collection嵌套collection引发的bug

    解决mybatis 中collection嵌套collection引发的bug

    这篇文章主要介绍了解决mybatis 中collection嵌套collection引发的bug,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 一篇文章带你入门Java数据类型

    一篇文章带你入门Java数据类型

    下面小编就为大家带来一篇Java的基本数据类型)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-08-08
  • java统计文件中每个字符出现的个数

    java统计文件中每个字符出现的个数

    这篇文章主要为大家详细介绍了java统计文件中每个字符出现的个数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03

最新评论