Java反射(Reflection)是一种新的操作类中成员变量、构造方法和普通方法的机制。
•Class类是Java 反射机制的入口,封装了一个类或接口的运行时信息,通过调用Class类的方法可以获取这些信息。
@@基本数据类型有:byte,short,int,long.float,double,boolean ,char。
@@Java提供八种包装类:Byte,Short,integer,Long,Float,Double,Boolean,Character.
##Class类特点:点开Class可以看到:被finally修饰,类在Java.lang 包中,是Serializable接口的实现类,而且这个类的构造方法被private修饰,那么不能通过new 来创建该类的对象。下面介绍六种方法来创建此对象获取到Class类实例化对象。
先创建 了Stu类:
package wo;
public class Stu {
String name;
public Stu() {//无参构造方法
}
public Stu(String name) {//有参构造方法
this.name = name;
}
public void dohomework() {//普通方法
System.out.println(name + "正在做作业");
}
}
再构建一个方法Test为创建对象:
下面获取了Stu 类中的信息而且用了方法一:使用Class.forName();括号中是(“类包名.类名”)
package wo;
public class Test {
public static void main(String[] args) {
Stu s = new Stu();// 调用Stu中无参构造方法
s.name = "tom";// 调用Stu中属性
s.dohomework();// 调用普通方法
Class clazz = null;
try {
clazz = Class.forName("wo.Test");
System.out.println(clazz.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
tom正在做作业
wo.Test
方法二用类名.class获取Class类实例:
package wo;
public class Test {
public static void main(String[] args) {
Class clazz = null;
clazz=Stu.class;
System.out.println(clazz.getName());
}
}
方法三:在已经创建引用类型的对象前提下,可以通过调用对象.getClass():
public class Test {
public static void main(String[] args) {
Class clazz = null;
clazz=new Stu().getClass();
System.out.println(clazz.getName());
}
}
方法四:如果是基本数据类型,则可以通过包装类.TYPE获取Class类实例,当然,也可以通过基本数据类型.class获取Class类实例:
public class Test {
public static void main(String[] args) {
Class clazz = null;
clazz=Character.class;
System.out.println(clazz.getName());
clazz=String.class;
System.out.println(clazz.getName());
clazz=Integer.TYPE;
System.out.println(clazz.getName());
}
}
结果如下显示当用包装类.TYPE时,仅是输出数据类型,要是包装类型.class,基本数据类型.class时是输出包名.包装类型或数据类型。
java.lang.Character
java.lang.String
int
方法五:通过元素类型[].class可以获取数组所对应的Class类实例:
public class Test {
public static void main(String[] args) {
Class clazz = null;
clazz=String[].class;
System.out.println(clazz.getName());
}
}
结果:
[Ljava.lang.String;
方法六:通过调用某个类的Class实例的getSuperClass()方法可以获取该类超类的Class实例简单来说是 某个类父类对应class对象:
public class Test {
public static void main(String[] args) {
Class clazz = null;
clazz = Stu.class.getSuperclass();
System.out.println(clazz.getName());
}
}
结果:[Ljava.lang.String;明显是数组类型。