java中的反射机制(getClass函数)

转载 2013年12月04日 10:01:26

关于Object类的getClass()方法
Java代码
import java.util.Date;
 public class TestCode extends Date {
 public static void main(String[] args) { 
	new TestCode().test();
 public void test() { 
	System.out.println(super.getClass().getName());
 }
 } 

结果:TestCode

分析: 

Object的getClass()方法的释义是:返回此 Object 的运行时类。返回的 Class 对象是由所表示 类的 static synchronized 方法锁定的对象。

 释义指出,要返回此Object运行时类,这外当然不可能指Object自己了,否则所有类调用 getClass()方法都返回Object.class了。 如果要取得父类的名字,可以使用this.getClass().getSuperclass().getName()。


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:如果该类型是一个数组,那么返回该数组的组件类型。


Java反射机制getClass()函数

转自:http://blog.csdn.net/elfylin/article/details/7422610 JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有...

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

一、Java的反射机制    每个Java程序执行前都必须经过编译、加载、连接、和初始化这几个阶段,后三个阶段如下图:   其中 反射所用到的信息   i、加载是指将编译后的ja...

java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别

一、Java的反射机制    每个Java程序执行前都必须经过编译、加载、连接、和初始化这几个阶段,后三个阶段如下图:   其中    i、加载是指将编译后的java类文件(也就是.class文...

getClass的反射机制getSimpleName

package threehundemo; abstract class shape{ public String getName(){ return this.getClass(). ();...

java 反射机制调用函数

java反射机制 Refelction 反射映象倒影  即是 动态获取类有哪些属性和方法 在java里面 我们可以用反射机制在程序运行时 加载 探知 使用 编译期间完全未知的class 不包括方法...

Java 反射机制 获取Class中的构造函数

package p1.reflect.demo; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationT...
  • Aseveng
  • Aseveng
  • 2017年10月26日 20:18
  • 41

如何理解java中的依赖注入 通过构造函数和反射机制来实现的

要了解Java中的依赖注入,要了解java中的两个概念。这里是通过setXXX来实现依赖注入的。首先要了解java中基类与子类之间的构造函数的关系,再着就是了解java中反映的机制。   看一个基...

关于Class类的成员函数与Java反射机制,坦言Synchronize的本质

1.   关于Object类理解         大家都知道Object是所有Java类的基类,   意味着所有的Java类都会继承了Object的11个方法。建议大家去看看Object的   11...

android 处理txt文件类FileUtils,利用java反射机制访问非sdk类和函数

Android系统内部提供了一个不错的txt文本读写类,但目前并没有公开提供给标准的SDK,FileUtils类的源代码如下,可以很好的操作Linux下的文本文件。  public class Fi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的反射机制(getClass函数)
举报原因:
原因补充:

(最多只允许输入30个字)