(1.3)--3-2类的生命周期面向对象程序设计.ppt
《(1.3)--3-2类的生命周期面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《(1.3)--3-2类的生命周期面向对象程序设计.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、类的生命周期加载ClassLoader.class链接(验证+准备+解析)初始化使用卸载生成Class类的一个对象初始化类变量为类变量分配空间,赋default值,设置相关数据结构验证格式等处理引用的其它类和接口程序的启动java p1.Test启动虚拟机(加载需要的类)找到p1.Test类的.class文件加载Test(超类、超接口)执行Test的main方法一、类和接口的加载通过ClassLoader和它的子类完成加载根据类的二进制表示形式(如.class),使用ClassLoader的defineClass方法生成Class类的一个对象,代表被加载类 (如p1.Test)Class类虚拟
2、机加载类或接口T后,会为T生成一个Class类的对象,用T.class引用这个对象,或 对象.getClass()引用这个对象。例如:为Point类,生成一个Class类的对象 用Point.class指代这个对象 Point p=new Point();p.getClass();/返回上面的Class的对象通过Class的对象可以获取类Point的相关信息,如有哪些字段、哪些方法。Class对象还用于初始化等比较运算符:instanceoftruetruetruefalsepackage chapter31interface;public class TestInstanceOf publi
3、c static void main(String args)Person aPerson=new Person(001,Tom);Person aStudent=new Student(002,Mike,Computer);if(aPerson instanceof Person)System.out.println(true);elseSystem.out.println(false);if(aStudent instanceof Person)System.out.println(true);elseSystem.out.println(false);if(aPerson.getClas
4、s()=Person.class)System.out.println(true);elseSystem.out.println(false);if(aStudent.getClass()=Person.class)System.out.println(true);elseSystem.out.println(false);isInstancetruetruetruefalsepackage chapter31interface;public class TestIsInstancepublic static void main(String args)Person aPerson=new P
5、erson(001,Tom);Person aStudent=new Student(002,Mike,Computer);if(aPerson.getClass().isInstance(aPerson)System.out.println(true);elseSystem.out.println(false);if(aPerson.getClass().isInstance(aStudent)System.out.println(true);elseSystem.out.println(false);if(aStudent.getClass().isInstance(aStudent)Sy
6、stem.out.println(true);elseSystem.out.println(false);if(aStudent.getClass().isInstance(aPerson)System.out.println(true);elseSystem.out.println(false);对象所属类判定总结1、o.getClass()=类名.class :o引用的对象所属的类是否同类名2、o instanceof 类名 :o引用的对象能否cast to 类名,能返回真,否则假 3、c.isInstance(o):o引用的对象能否cast to c,能返回真,否则假o:对象c:Clas
7、s对象,o.getClass()编译时知道o要比较的类,则用o instanceof 类名 编译时不知道o要比较的类,运行时才知道,则用c.isInstance(o)二、链接(link)一个程序由若干个编译单位构成:C语言的.c 文件java语言的.java文件为什么要分成编译单位?一个编译单位会使用其它编译单位的变量、函数只有将所有编译单位合并成一个整体,才能得到一个的 可执行的程序二、链接(link)#include int quadraticEquation(double a,double b,double c,*root1,*root2)double delta=b*b-4.0*a*c
8、;if(delta 0)return 0;root1=(-b+sqrt(delta)/(2.0*a);root2=(-b-sqrt(delta)/(2.0*a);return 1;sqrt是库中的函数库(library):由多个目标文件打包而成C语言的函数调用了类库或其它编译单位的函数等二、链接(link)public class Point.public void printPosition()System.out.println(I am here(+x+,+y+);.public class Rectangle private Point leftCorner;private Point
9、 rightCorner;.public class Student extends Person.java的类使用了其它类的方法、字段,引用其它的类或扩展其它类二、链接(link)编译器将编译单位使用的其它编译单位的变量和方法(函数)汇总成一个符号表(symbol table),存放在目标文件(.obj、.class)中链接器根据符号表,找到其它编译单位的变量和方法,合并成一个可执行文件。静态链接:可执行文件中包含所有的数据和代码动态链接:可执行文件中包含部分数据和代码,在用到时 再引入缺失的部分。二、链接(link)java链接步骤:verification:对类或接口的二进制形式进行必要
10、的合规性检查preparation:为类变量分配存储空间,赋予默认值。resolution:解决对其它类和接口的引用 可以一次解决也可以逐步解决 根据类型到对应的类以及超类中查找实实例方法的例方法的resolutionaPerson.print();/调用Person类的print()public void print()StudentPersonpublic void print()Person aPerson.resolution不涉及对象,只是根据引用变量的类型gs.getID();public String getID()StudentPersonGraduateStudent实实例方
11、法的例方法的resolutionGraduateStudent gs.类类方法的方法的resolutionaStudent.getToken();public static String getToken()StudentPersonpublic static String getToken()(Person)aStudent).getToken();public static String getToken()StudentPersonpublic static String getToken()Student aStudent.三、类和接口的初始化何时初始化初始化什么初始化的过程创建对象调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1.3 生命周期 面向 对象 程序设计
限制150内