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

Java反射第一课认识Class类

时间:2016-08-05 17:59:09      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

Class类

1.在面向对象的世界里,万事万物皆对象

(1)先来理解两个问题:

(1)Java语音中,静态的成员,普通数据类型是不是对象?

【普通的数据类型int a = 5 不是面向对象的,但是它有包装类弥补了】

【java静态的东西不是面向对象的,静态的东西不是某个对象的他是属于类的】

所以在面向对象的世界里,万事万物皆对象

(2)类是谁的对象?

类是对象,类是java.lang.Class类的实例对象

Class类的实例对象是什么?---我们每一个对象所属的类就是Class类的实例对象(也就是说Class类的实例对象是类)

(3)Class类的这个对象如何表示


<pre name="code" class="java">package com.edu.reflect;

public class ClassDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Foo的实例对象如何表示:
		Foo foo1 = new Foo();
		//Foo 这个类也是一个实例对象,是Class类的实例对象

		//任何一个类都是Class的实例对象,Class类的实例对象如何表示?3中表示方式
		//Class类的构造方法是私有的,只有java虚拟机可以创建,所以我们不能直接new出Class类的实例对象


		//第一种表示方式。实际在告诉我们任何一个类都有一个隐含的静态成员变量class
		Class c1 = Foo.class;

		//第二中表达方式 已知该类的对象通过getClass方法
		Class c2 = foo1.getClass();

		/*
		 * 官网:c1,c2表示了Foo类的类类型(class type)
		 * 万事万物皆对象
		 * 类也是对象,是Class类的实例对象
		 * 这个对象我们称为该类的类类型
		 */

		//不管c1 or c2 都代表了Foo类的类类型,一个类只可能是Class类
		//的一个实例对象
		System.out.println(c1==c2);//结果输出true

		//第三种表达方式
		try {
			Class c3 = Class.forName("com.edu.reflect.Foo");
			System.out.println(c2==c3);//true
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//我们完全可以通过类的类类型创建该类的对象实例
		try {
			Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法
			foo.print();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
class Foo{
	void print(){
		System.out.println("foo类方法");
	}
}




Java反射第一课认识Class类

标签:

原文地址:http://blog.csdn.net/wei_chong_chong/article/details/52127622

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