码迷,mamicode.com
首页 > 编程语言 > 详细

Java中的反射——(1)什么是反射

时间:2014-06-09 23:39:33      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:反射   class类   java   

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()方法:

bubuko.com,布布扣

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);
	}
}
运行结果:

bubuko.com,布布扣

从上面结果可以看到,Integer类型的字节码和int类型的字节码不是同一个,在Java中有九种预定义的 Class 对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 booleanbytecharshortintlongfloatdouble。 

bubuko.com,布布扣

除过Integer.TYPE外,还有:Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE

只要在源程序中出现的类型,都有各自的Class实例对象,判断的方法如下:

bubuko.com,布布扣

反射就是把Java类中的各种成分映射成相应的Java类。例如,一个Java类用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱也是一个个的类。表示Java类的Class类中提供了一系列的方法来获取其中的变量(Field),方法(Method),构造方法(Contructor),修饰符,包(Package)等信息。




Java中的反射——(1)什么是反射,布布扣,bubuko.com

Java中的反射——(1)什么是反射

标签:反射   class类   java   

原文地址:http://blog.csdn.net/dawanganban/article/details/28666775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!