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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows10查看端口被占用_win10端口被占用怎么解决

    windows10查看端口被占用_win10端口被占用怎么解决1、查看windows所有端口进程同时按下Win+R,接着在对话框中输入“cmd”,按下回车键打开命令提示符窗口,然后在窗口中输入netstat-ano按下回车键,之后就会显示所有的端口占用情况。2、如果是要查询指定的端口占用情况的话,可以在命令提示符窗口中继续输入netstat-aon|findstr”提示的端口”这里的提示的端口假设为8080,那么就输入命令netstat-aon|findstr”8080″按下回车键之后就可以看见列表中的PID然后.

    2022年7月27日
    19
  • 那些错过的人和事,已成回忆

    哪些曾经没有做的事情,你现在还想做吗?你现在还能做吗?最近的一些梦,让我思考哪些我当时有机会做,但是最后没有做的事情!现在回忆起来,略有遗憾,也在感慨时间的力量,推着我一直向前,我已经不再是过去的那个我了。我记得小的时候,那会上小学,在学校外面的有个老奶奶开的小卖铺,那个小卖铺里面是用木头搭建的房子,屋顶上面用的是茅草铺的。小卖铺里面卖着一种一毛钱一片的辣条(片),本来这种辣条(片…

    2022年2月27日
    43
  • 分布式——CAP原理

    分布式——CAP原理一.概述在理论计算机科学中,CAP原理指出对于一个分布式系统来说,当设计读写操作时,只能同时满足一下三点中两个:一致性(Consistence):所有节点访问同一份最新的数据副本 可用性(Avaliability):非故障的节点在合理时间内返回合理的响应(不是错误或者超时的响应) 分区容错性(Partitiontolerance):分布式系统出现网络分区(分布式系统中,多个节点之前的网络本来是连通的,但是由于某些故障,比如部分节点网络出了问题。某些节点之间不连通,整个网络就分为几个区域,这就叫

    2022年5月19日
    46
  • could not get lock /var/lib/apt/lists/lock_var目录满了有什么影响

    could not get lock /var/lib/apt/lists/lock_var目录满了有什么影响在Ubuntu中,有时候运用sudo apt-getinstall安装软件时,会出现一下的情况E:Couldnotgetlock/var/lib/dpkg/lock-open(11:Resourcetemporarilyunavailable)E:Unabletolocktheadministrationdirectory(/var/lib/dpk

    2022年10月6日
    4
  • vue模板渲染 mustache简单实现[通俗易懂]

    vue模板渲染 mustache简单实现[通俗易懂]vue源码探究,模板渲染,实现mustache的渲染功能

    2022年7月19日
    12
  • Redis(RDB,AOF,主从复制,哨兵模式)「建议收藏」

    Redis(RDB,AOF,主从复制,哨兵模式)「建议收藏」文章目录Redis持久化RDB(Redis DataBase)AOF(Append Only File)Redis持久化Redis是内存数据库,如果不见内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能RDB(Redis DataBase)什么是RDB:在指定的时间间隔内将内存中的数据集快照写入内存, 也就是行话讲的Snapshot快照,他恢复时是将快照文件直接读到内存中。Redis会单独创建一个子进程来持节话,会先将数据写入到一个

    2022年8月8日
    8

发表回复

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

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