您的位置:首页 > 新闻 > 资讯 > 中国机械加工网易下拉教程_二级域名备案流程_十大网络推广公司排名_提升网站权重的方法

中国机械加工网易下拉教程_二级域名备案流程_十大网络推广公司排名_提升网站权重的方法

2024/12/22 0:07:37 来源:https://blog.csdn.net/m0_74363339/article/details/144604133  浏览:    关键词:中国机械加工网易下拉教程_二级域名备案流程_十大网络推广公司排名_提升网站权重的方法
中国机械加工网易下拉教程_二级域名备案流程_十大网络推广公司排名_提升网站权重的方法

目录

一、Java的"反射"机制。

(1)生活中的"反射"例子。

(2)Java的"反射"机制。

1、Java程序中"反射"的基本介绍。

2、"反射"机制图解介绍。

3、"反射"常见的应用场景。

二、如何使用Java的反射机制?

(1)Java程序运行机制与"反射"的关系(简要说明)。

(2)Java的"Class"类。

1、"Class"类的简单介绍。

2、获取"Class"类实例对象的几种常见方式。

<1>通过实例对象.getClass()获取"Class"对象。

<2>通过类名.class获取"Class"对象。

<3>通过全限定类名(Class.forName(""))获取"Class"对象。

<4>通过类加载(ClassLoader)获取"Class"对象。

(3)Java"反射"机制的基本使用流程图。


一、Java的"反射"机制。

(1)生活中的"反射"例子。
  • 日常生活中的反射是一种物理现象。(如通过照镜子反射自己的容貌、水面反射景物)通过反射,可以将应该虚像映射到实物,这样就可以获取实物的某些形态特征。

(2)Java的"反射"机制。
1、Java程序中"反射"的基本介绍。
  • 在Java程序中也有反射。Java反射(Reflection)是一种强大的机制。
  • 常规情况下程序都是通过类创建对象。而反射是将这个过程进行反转,变成通过实例化对象来获取所属类的信息
  • (类——>创建对象)反转成(对象——>获取类的信息)

2、"反射"机制图解介绍。
  • 官方对反射的解释:反射允许对封装类的字段(成员变量)、方法(成员方法)和构造函数(构造方法)的信息进行编程访问

  • "反射"图解的介绍。
  • 简单说:反射其实就是可以直接从类中拿东西(常用的"成员变量"、"构造方法"、"成员方法"等等)。
  • 既然反射可以拿去类中的东西,为什么不通过IO流一行一行的读取类中的东西?因为如果这样直接读取,不方便去区分(成员方法与构造方法)、(成员变量与局部变量)等。


3、"反射"常见的应用场景。
  • 当我们在IDEA中写代码时的"部分提示"功能!

  • 如创建了某个类的对象,在使用"对象.xxx"的时候。对应地方的下面会弹出能调用的相关的方法或成员变量。IDEA把它们全部都获取出来并下方进行提示。


  • 包括调用某个有参方法时,idea会提示需要的形式参数个数或者是形式参数类型。这些都是通过Java的"反射"机制完成的。

二、如何使用Java的反射机制?

(1)Java程序运行机制与"反射"的关系(简要说明)。
  • Java虚拟机编译已经写好并生成的.java源文件——>生成对应的.class文件字节码文件)。然后将.class文件加载到内存中去执行
  • 当在执行.class文件的过程中,可能会需要用到其他类(其他的.class文件内容),这时就需要获取其他类的信息(通过反射机制获取类的信息)。

  • 而Java虚拟机在加载.class文件时会产生一个Class类的对象去代表当前这个.class文件。可以通过从该Class的对象获取.class文件中的所有内容(即获得了该类的信息)。
  • 所以反射操作的实现,必须借助这个重要的"Class"类

(2)Java的"Class"类。
1、"Class"类的简单介绍。
  • Java中的Class类是java.lang包的一部分。Class类代表了正在运行的Java应用程序中的类和接口Class类的对象在JVM加载类时自动创建,每个类只有一个Class对象

  • Class类提供了很多的方法。通过Class类可以获取一个类的所有相应信息(属性、方法等)这里先不介绍,后面博客学习。

2、获取"Class"类实例对象的几种常见方式。
  • 类的完全限定名是指包括了类所在的包名和类名的完整名称。完全限定名提供了一种无歧义的方式来唯一标识一个类。

<1>通过实例对象.getClass()获取"Class"对象。
//通过实例对象.getClass()获取"Class"实例对象Student stu = new Student();Class<? extends Student> stuClass01 = stu.getClass();System.out.println("实例对象.getClass()获取Class对象:"+stuClass01);
<2>通过类名.class获取"Class"对象。
 //通过类名.class获取"Class"实例对象Class<?> stuClass02 = Student.class;System.out.println("通过类名.class获取实例对象"+stuClass02);
<3>通过全限定类名(Class.forName(""))获取"Class"对象。
//通过全限定类名(Class.forName(""))获取"Class"实例对象try {Class<?> stuClass03 = Class.forName("com.fs.demo.Student");System.out.println("全限定类名获取Class对象:"+stuClass03);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}
<4>通过类加载(ClassLoader)获取"Class"对象。
//通过类加载(ClassLoader)获取"Class"对象ClassLoader stuClassLoader = Student.class.getClassLoader();Class<?> stuClass04 = null;try {stuClass04 = stuClassLoader.loadClass("com.fs.demo.Student");System.out.println("通过类加载获取Class对象:"+stuClass04);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}

  • 程序的运行结果。


(3)Java"反射"机制的基本使用流程图。
  • 所以某个类的信息,不是直接从.java源文件中直接获取的。而是从.class(字节码文件)中获取的
  • 所以需要学习如何获取"Class"(字节码文件对象),再学习如何从.class(字节码文件)中获取到字段、构造方法、成员方法。这三个东西获取出来后,再依次进行"解剖"获取其里面的各种信息。


  • 关于Java"反射"机制的详细使用步骤在下篇博客进行学习。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com