运行时的类型信息:
一、Type(类型):如人事系统,部门,人员,工资,这都是类型,开发中对这些信息要进行分类。
class(类):现实中的问题用程序表示,就形成类(.java 文件),静态。
二、Object(对象):现实中的对象,计算机中用不同数据来区分。
现实中人类型,具体一个人就是对象(因为每个人的基本信息不一样,会做的事也不一样),
计算机表示:人:Person class(类) 静态,对象:可以new(新建)对象,其实就是放数据,
人(类级别):都有名字,工号(类成员变量)
对象(对计算机来说:就是数据不一样):每一人名字,工号不一致。
人(类级别):都会做饭(类的方法)
对象:但是做饭的方法(什么时候火大一些,小一些等等)各有不同,结果也不一样。
1、 类对象(Class object):.class 编译后文件装入内存后,变成类对象。
2、建立对象几种方式
1>Person p=new Person():
2> Class p=Class.forName("ftypeinfo.toys.Person");//
得到person的类对象的指针,可直接生成p.newInstance();
必须要抓住异常,运行时检查错误。
3> Class<Person> p=Person.class;和2>相等: 得到person的类对象的指针,可直接生成p.newInstance();
不用抓异常,编译时检查错我。
三、实例(也叫对象:因为所有的都可以看成对象):一个类对象可以形成多个实例,
实例=数据。
Person p1=p.newInstance(); 通过实例化,可以得到p1对象。
所以一般用第一种方法 Person p=new Person() 建立一个对象:
四、reference:像电视,空调的遥控器,不知道用什么词语翻译比较好?就是和对象连接起来,并且让对象去做一些事情。
1、普通类reference(ordinary Class references):
2、限制类reference(generic Class references):
Class<?>:表示指针可以指向任何类对象
Class<? extends Number>:表示指针可以指向Number且子类对象
java.lang.Class<T>: 当装入一个.Class 文件,java.lang.Class 建立这个类的实例。
*装入内存后的所有.class 文件:就是 java.lang.Class 的对象,所以也叫类对象。
结论:
例子:如果公司的人员管理,
静态: 建立Person 类型,定义会做的事(方法),和一些个人特点(类变量,常量)
动态:领导需要查看每个人(对象)的具体情况。
方法一: Person p=new Person(“wang”);
Person p1=new Person("yang");
1、JVM开始到method area 去查找是否装入Person 类,否,则装入
2、装入之后去堆中建立数据,即对象,p1和这个对象连接。
方法二: Class p=Class.forName("ftypeinfo.toys.Person");//得到一个Person 的reference
Person p1=p.newInstance(); //弄上数据,就又得到一个新的对象。
1、java.lang.Class 这个类为每个进入内存的类建立对象,
2、这个类的常量池存入了装入每个类的reference和对应的类名。
感觉从速度上来说,快多了。
方法三: Class p=Person.class;;//得到一个类指针
Person p1=p.newInstance(); //弄上数据,就又得到一个新的对象。
和方法二差不多,比方法二的好处:不用抓异常。
根据需要建立多个对象,我一直理解p,p1 就是一个an object reference。
计算机怎么实现:
1》person.class 装入内存:把类中的信息存入常量池,把指令装入Rom内存。
2》类中所有的方法:存入方法表(方法表存在方法区域)
3》堆:存入这个类的实例数据,存入P,指向“方法表”