java getClass()
Java反射学习
所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。严格地说,反射并非编程语言的特性,因为在任何一种语言都可以实现反射机制,但是如果编程语言本身支持反射,那么反射的实现就会方便很多。
1,获得类型类
我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类。Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类型类来表示一个类型。所有的类型类都是Class类的实例。例如,有如下一段代码:
A a = new A();
if(a.getClass()==A.class)
System.out.println("equal");
else System.out.println("unequal");
结果就是打印出 “equal”。
可以看到,对象a是A的一个实例,A某一个类,在if语句中使用a.getClass()返回的结果正是A的类型类,在Java中表示一个特定类型的类型类可以用“类型.class”的方式获得,因为a.getClass()获得是A的类型类,也就是A.class,因此上面的代码执行的结果就是打印出 “equal”。特别注意的是,类型类是一一对应的,父类的类型类和子类的类型类是不同的,因此,假设A是B的子类,那么如下的代码将得到 “unequal”的输出:
A a = new A();
if(a.getClass()==B.class)
System.out.println("equal");
else System.out.println("unequal");
因此,如果你知道一个实例,那么你可以通过实例的“getClass()”方法获得该对象的类型类,如果你知道一个类型,那么你可以使用“.class”的方法获得该类型的类型类。
2,获得类型的信息
在获得类型类之后,你就可以调用其中的一些方法获得类型的信息了,主要的方法有:
getName():String:获得该类型的全称名称。
getSuperClass():Class:获得该类型的直接父类,如果该类型没有直接父类,那么返回null。
getInterfaces():Class[]:获得该类型实现的所有接口。
isArray():boolean:判断该类型是否是数组。
isEnum():boolean:判断该类型是否是枚举类型。
isInterface():boolean:判断该类型是否是接口。
isPrimitive():boolean:判断该类型是否是基本类型,即是否是int,boolean,double等等。
isAssignableFrom(Class cls):boolean:判断这个类型是否是类型cls的父(祖先)类或父(祖先)接口。
getComponentType():Class:如果该类型是一个数组,那么返回该数组的组件类型。
转载于:https://www.cnblogs.com/chen-jack/p/7910409.html
java getClass()相关推荐
- java getclass()函数
java的getClass()函数 Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这 ...
- Java toString()方法
Java toString method is a very useful method and even though you may not know it, I am sure you have ...
- class和getClass()的区别
前几天做项目,觉得自己都开发一年多了,还没有自己封装的类,感觉真是白做了,再加上,看到自己的代码,我都不忍心看,有的时候,还需要自己去读自己写的代码,乱乱糟糟的,实在不忍心看,没办法,重现在开始吧,把 ...
- Java getParentFile().mkdirs()用法
Java getParentFile().mkdirs()用法 getParentFile(); getParentFile()的作用是获得父目录 文件路径最后一层会被默认为是一个文件 例如 URL ...
- Java equals()和hashCode()
介绍: Java Object类提供了方法的基本实现– hashCode()和equals(). 这些方法非常有用,尤其是在使用Collection框架时. 哈希表实现依赖于这些方法来存储和检索数据. ...
- 网络爬虫之java基础(Ⅰ)
目录 1Java中maven的使用 2log4j log4j的介绍 log4j提供的几种方法 使用步骤 3输入流与输出流 数据的读写程序以及map的使用 这张图为我给自己研究所人讲网络爬虫的一个流程, ...
- Java - 加号(+)的作用
1.java中加号(+)有两个作用:加法运算.连接符 加法运算 public class Test{public static void main(String[] args){int intA = ...
- java static getclass_如何从Java中的静态方法调用getClass()?
如何从Java中的静态方法调用getClass()? 我有一个必须有一些静态方法的类. 在这些静态方法中,我需要调用方法getClass()来进行以下调用: public static void st ...
- 为什么String中的Java hashCode()使用31作为乘数?
本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...
最新文章
- 这样规范写代码,同事直呼“666”
- 20172328《程序设计与数据结构》实验二:树
- Promise--感性认知
- PHP——explode的应用(获取字符串,拆为下拉列表)
- 数制之非十进制数转十进制数
- Docker容器私有仓库——Harbor私有仓库的搭建
- 4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授
- wxWidgets:wxSocketBase类用法
- php 递归合并类 call,PHP多个数组合并(递归的进行)
- Java——线程锁,死锁,等待唤醒机制
- shell脚本拼接中间带空格的两个变量成一个变量
- 上网时间监控软件_电脑监控系统软件有哪些作用?主要功能有哪些?
- Spring Cloud Netflix之Eureka上篇
- dlink虚拟服务器端口转发,D-Link路由器端口转发怎么设置【图文教程】
- 密码编码学初探——消息认证码
- 鼠标经过时改变DIV背景颜色的三种途径
- 聚划算创意新零售,这个“加油站”不加油只加奶?
- python基础----Day05
- 教你如何写出完美的论文——5. 做笔记
- Unity中实现动态天空盒
热门文章
- php is_null(,PHP empty() isset() is_null() 区别与性能比较
- java取两个10_30的随机整数_产生10个[30,90]区间上的随机整数,然后对其用选择法...
- Jupyter Notebook简介及默认路径修改
- PAT_B_1059_Java(14分)_C++(20分)
- css 透明背景_css 中多种边框的实现小窍门
- ipad分屏_iPad如何分屏及常见问题
- Codeforce 1255 Round #601 (Div. 2) C. League of Leesins (大模拟)
- eclipse打包jar发布到linux下运行出错(java.lang.ClassNotFoundException: cmd.WordCount$MyMapper )
- 深入理解C语言——#define宏和枚举的区别
- 施密特触发器(Schmitt Trigger)?