您的位置:首页 > 编程语言 > Java开发

Java反射(一) : 获取Class对象

2014-08-31 21:38 330 查看
所有反射操作的入口都是java.lang.Class。除了java.lang.reflect.ReflectPermission之外,没有哪个在java.lang.reflect包下面的类有共有构造器。为了获得这些类,有必要去调用Class的适当方法。对象,类名,类型或者已存在的Class,这些是得到Class的几种方法。Object.getClass()如果可获得一个对象的实例,最简单的获取Class的方法是调用Object.getClass()。当然,这必须是继承自Object的引用类型才可以(原始类型不行)。Class c = "foo".getClass();.class语法如果一种类型已知,但没有可用的实例,可以使用.class语法获取Class。这也是获取原始类型Class的最简单方法。boolean b;Class c = b.getClass(); // compile-time errorClass c = boolean.class; // correct再比如,Class c = java.io.PrintStream.class;Class.forName()如果一个类的权限定名已知,就可以使用这个静态方法获取Class。但Class.forName()不能用来用于原始类型,(这好理解,比较根本就没有类名)。对于数据类型的名字,在Class.getName有描述。
注:
String.class.getName()
returns "java.lang.String"
byte.class.getName()
returns "byte"
(new Object[3]).getClass().getName()
returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
returns "[[[[[[[I"
其中对于数组而言,会以一个或多个"["开头,作为数组嵌套的深度。数组的类型会编码如下:
ElementType Encoding
boolean Z
byte B
char C
class or interface Lclassname;
double D
float F
int I
long J
short S
因此,
Class cDoubleArray = Class.forName("[D");
表示一个double[]的Class。
原始类型的包装类型的TYPE属性
<span style="font-size:18px;">Class c = Double.TYPE;</span>
再比如,<span style="font-size:18px;">Class c = Void.TYPE;</span>Void.TYPE是void.class的标识。能返回Class的方法1, 返回父类的Class, 
Class.getSuperclass()
如,Class c = javax.swing.JButton.class.getSuperclass();JButton的父类是AbstactButton。
Class.getClasses()
2, 返回该类属性的所有共有的类、接口、枚举,包括继承的成员。Class<?>[] c = Character.class.getClasses();3,返回所有声明的类、接口、枚举(不管公有、私有).
Class.getDeclaredClasses()
Class<?>[] c = Character.class.getDeclaredClasses();
下面三个方法类似,java.lang.reflect.Field.getDeclaringClass()java.lang.reflect.Method.getDeclaringClass()java.lang.reflect.Constructor.getDeclaringClass()分别是获取字段、方法、构造器所在的Class.import java.lang.reflect.Field;Field f = System.class.getField("out");Class c = f.getDeclaringClass();字段out是在System声明。另外,匿名类没有一个“声明”类,但有“被包含”类。Class c = Thread.State.class().getEnclosingClass();枚举Thread.State包含在Thread。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 反射