Java中的反射——(1)什么是反射

Java中的反射——(1)什么是反射

大家好,又见面了,我是全栈君。

Java程序中的各个Java类属于同一类事物,描写叙述这类事物的Java类名就是Class.

public class ReflectTest {
	public static void main(String[] args) throws ClassNotFoundException {
		String str1 = "abc";
		Class cls1 = String.class;
		Class cls2 = str1.getClass();
		Class cls3 = Class.forName("java.lang.String");
		
		System.out.println(cls1 == cls2);
		System.out.println(cls2 == cls3);
	}
}

获取Class类的实例方法有三种:

1、类名.class

2、对象.getClass()

3、Class.forName(“String path);

上面样例中两个返回都是true,我们能够看到三种方式获取到的Class类的实例是同样的。每个类型就是一个Class类的实例对象。

以下我们再来看看Class类的isPrimitive()方法:

Java中的反射——(1)什么是反射

public class ReflectTest {
	public static void main(String[] args) throws ClassNotFoundException {
		String str1 = "abc";
		Class cls1 = String.class;
		Class cls2 = str1.getClass();
		Class cls3 = Class.forName("java.lang.String");
		
		System.out.println(cls1 == cls2);
		System.out.println(cls2 == cls3);
		
		System.out.println(cls1.isPrimitive());
		System.out.println(int.class.isPrimitive());
		System.out.println(int.class == Integer.class);
		System.out.println(int.class == Integer.TYPE);
	}
}

执行结果:

Java中的反射——(1)什么是反射

从上面结果能够看到,Integer类型的字节码和int类型的字节码不是同一个,在Java中有九种提前定义的 Class 对象。表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名。即 booleanbytecharshortintlongfloatdouble

 

Java中的反射——(1)什么是反射

除过Integer.TYPE外,还有:Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE

仅仅要在源程序中出现的类型,都有各自的Class实例对象,推断的方法例如以下:

Java中的反射——(1)什么是反射

反射就是把Java类中的各种成分映射成对应的Java类。

比如,一个Java类用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类。汽车中的发动机,变速箱也是一个个的类。表示Java类的Class类中提供了一系列的方法来获取当中的变量(Field),方法(Method),构造方法(Contructor),修饰符,包(Package)等信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116623.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 现代数字图像处理作业———对lena图像进行简单处理[通俗易懂]

    现代数字图像处理作业———对lena图像进行简单处理[通俗易懂]对lena图像加入椒盐噪声,强度为30%,分别采用均值滤波,中值滤波进行处理。并讨论不同尺度的模板对结果的影响。

    2022年6月19日
    43
  • 语雀—好用的文档编写、知识沉淀的工具

    发现一个好用的文档编写、知识沉淀的工具——语雀。语雀—好用的文档编写、知识沉淀的工具简单介绍「语雀」是一个「专业的云端知识库」,孵化自 蚂蚁金服,是 体验科技]理念下的一款创新产品,已是 10 万阿里员工进行文档编写、知识沉淀的标配。语雀诞生伊始,只是希望能给工程师提供一个好用的工具用来写技术文档,达成「用 Markdown 写文档」这个小目标。但在产品研发的过程中,我们发现其实身边的…

    2022年2月28日
    76
  • c++的发展方向

    c++的发展方向我现在是一名在校大学生,在学校期间自学C++有两年的时间了,看过C++Primer,stl,insideC++model(侯捷翻译的那本),com本质论等… 在学习C++的过程中感觉C++语言本身的确很强大,而且随着学习的深入,我逐渐感到要想在短时间了解这门语言的本质几乎是不可能的.因为我也学习过javaSE的一些东西,感觉就java和C#来说,语言本身不难,不过在底层调用方面有时候就

    2022年4月30日
    65
  • 查看linux ssh服务信息及运行状态

    查看linux ssh服务信息及运行状态

    2021年10月18日
    80
  • js获取当前时间标准格式_js获取当前时间年月日并输出

    js获取当前时间标准格式_js获取当前时间年月日并输出/** *获取当前时间格式:yyyy-MM-ddHH:MM:SS */functiongetCurrentTime(){   vardate=newDate();//当前时间   varmonth=zeroFill(date.getMonth()+1);//月   varday=zeroFill(date.getDate());//日   …

    2022年9月23日
    0
  • 使用VS2010打包软件详解!

    使用VS2010打包软件详解!使用VS2010下VisualStudioInstaller工程进行软件安装包制作        软件在功能开发实现后,其实并没有真正的完成。对于一个专业的开发者来说,Release软件应该是以安装版本的形式进行发布的,这篇文章将具体介绍如何使用VS2010下VisualStudioInstaller进行打包软件。Setp1.首先建立VisualStudio

    2025年5月31日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号