




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、类、对象和接口类、对象和接口l 编程语言的几个发展阶段编程语言的几个发展阶段l 类类l 对象对象l static static 关键字关键字l this this 关键字关键字l 包包l 访问权限访问权限l 类的继承类的继承l 对象的上转型对象对象的上转型对象l 多态性多态性l abstract abstract 类和类和abstractabstract方法方法l supersuper关键字关键字l 接口接口l 内部类内部类l 匿名类匿名类l 异常类异常类l ClassClass类类l 基本类型的类包装基本类型的类包装l 反编译和文档生成器反编译和文档生成器l jarjar文件文件 编程语言的
2、几个发展阶段编程语言的几个发展阶段 机器语言机器语言 计算机处理信息的早期语言是所谓的机器语言,这种语言中的指令都是由0,1组成的序列,称这样的序列为一条机器指令。这些指令的执行由计算机的线路来保证。习惯上称机器语言和汇编语言(用符号来代替二进制指令)为低级语言。 过程语言过程语言 用过程设计语言把代码组成叫做过程或函数的块。每个块的目标是完成某个任务,不需要再去考虑机器指令的细节。例如,一个C的源程序就是由若干个书写形式互相独立的函数组成。习惯上称过程语言是高级语言。无论哪种高级语言编写的源文件,必须转换成为机器指令,计算机才能够执行,执行方式可分为编译方式和解释方式。 面向对象编程面向对象
3、编程 字节码字节码什么是面向对象?什么是面向对象? 面向对象程序(面向对象程序(OOP Object-Oriented Programming)OOP Object-Oriented Programming) 在程序设计中,将所有事物都作为对象来处理。在程序设计中,将所有事物都作为对象来处理。OOP的基本思想是把人们对现实世界的认识过程应用到程序设计中。现实世界的物体就是对象,它的基本思想是把人们对现实世界的认识过程应用到程序设计中。现实世界的物体就是对象,它有两个基本特点:物体的内部构成和物体的行为。有两个基本特点:物体的内部构成和物体的行为。OOP与现实对象两个基本特点相对应的是数据和与现
4、实对象两个基本特点相对应的是数据和方法:数据表示对象的构成,方法表示对象的行为。方法:数据表示对象的构成,方法表示对象的行为。对象对象是表示现实世界中某个具体的事物类类是对对象的抽象描述。 类(类(CLASSCLASS) 如如:classclass ManMan对象进行抽象为类对象进行抽象为类对类进行实例化对类进行实例化面向对象的基本思想面向对象的基本思想优点:优点:符合人们日常自然的思维习惯(因为它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式)。降低、分解问题的难度和复杂性,提高整个求解过程的可控制性、可监视性、可扩充性和可维护性使用
5、对象、类、继承、封装、消息等基本概念来进行程序设计。使用对象、类、继承、封装、消息等基本概念来进行程序设计。class Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() 计算机中的对象的原型现实生活中的对象面向对象的特点面向对象的特点1.封装性封装性 面向对象使用类封装数据(属性)和方法(行为)。面向对象使用类封装数据(属性)和方法(行为)。 封装使对象能够向其他对象隐藏它们的实现封装使对象能够向其他对象隐藏它们的实现该原则称为该原则称为信息隐藏信息隐藏
6、。尽管对象通过良好定义。尽管对象通过良好定义的接口互相通信(正如驾驶员的接口包括方向盘、油门踏板、刹车踏板和变速器等),但是对的接口互相通信(正如驾驶员的接口包括方向盘、油门踏板、刹车踏板和变速器等),但是对象不知道其他对象是如何实现的象不知道其他对象是如何实现的正如驾驶员不知道如何实现转向、发动机、刹车和变速器正如驾驶员不知道如何实现转向、发动机、刹车和变速器等机械装置。通常,实现细节隐藏在对象内部。等机械装置。通常,实现细节隐藏在对象内部。 在面向过程的编程语言中,编程一般在面向过程的编程语言中,编程一般面向操作面向操作。然而,。然而,Java编程是编程是面向对象面向对象的。在面向的。在面
7、向过程的编程语言中,编程单位是过程的编程语言中,编程单位是函数函数。而在。而在Java中,编程单位是中,编程单位是类类。最终。最终实例化实例化(即创(即创建)这些类而得到对象,属性和行为作为建)这些类而得到对象,属性和行为作为字段和方法字段和方法封装在类的封装在类的“边界边界”内。内。2.继承继承 子类和父类3.多态多态 操作名称的多态和继承的多态面向对象的设计思想面向对象的设计思想分析问题时,不再分解其每一个过程。而是分析问题时,不再分解其每一个过程。而是l首先要考虑的是该问题域中涉及到哪些类(对象)首先要考虑的是该问题域中涉及到哪些类(对象)l这些类(对象)各有哪些属性和方法这些类(对象)
8、各有哪些属性和方法l这些类(对象)之间的关系如何这些类(对象)之间的关系如何对于面向过程的程序员,他们的精力集中于编写函数。首先对操作进行分组,将执行某个任务对于面向过程的程序员,他们的精力集中于编写函数。首先对操作进行分组,将执行某个任务的操作编写为一个函数,然后对函数进行分组以构成一个程序。在面向过程的程序中,数据用的操作编写为一个函数,然后对函数进行分组以构成一个程序。在面向过程的程序中,数据用来支持函数所执行的动作。在描述新应用程序需求的系统需求文档中,来支持函数所执行的动作。在描述新应用程序需求的系统需求文档中,动词动词帮助面向过程的程帮助面向过程的程序员确定为了实现系统而互相合作的
9、函数集序员确定为了实现系统而互相合作的函数集。JavaJava程序员的主要精力集中在创建自己的引用类型,该引用类型称为类。每个类都包含一些域程序员的主要精力集中在创建自己的引用类型,该引用类型称为类。每个类都包含一些域(变量或称数据成员)及操作这些域的方法来作为类的成员。系统需求文档中的(变量或称数据成员)及操作这些域的方法来作为类的成员。系统需求文档中的名词名词帮助帮助JavaJava程序员确定最初的一组类,它们用这些类开始设计过程。程序员使用这些类来实例化对象,这程序员确定最初的一组类,它们用这些类开始设计过程。程序员使用这些类来实例化对象,这些对象将一起工作以实现系统些对象将一起工作以实
10、现系统。什么是类?什么是类? 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板,定义一种对象所能拥有的数据和能完成的操作,对象是类的实例对象是类的实例。类是对对象的抽象描述 ,一个类中定义的方法可以被该类的对象调用,对象方法的每一次调用被称作发送一个消息给对象。对象间是相互独立的,只有接收消息的对象才会对该消息起作用。( (信息隐藏)信息隐藏)程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。类的实现包括两部分:类声明类声明和类体类体。类定义类定义class People “class People”叫做类声明;“Peo
11、ple” 是类名。类名的每个单词首字母要大写,类定义的一般格式类定义的一般格式class class 用户自定义的类名用户自定义的类名 数据成员数据成员 成员方法成员方法 类体要用花括号 括起来。类体包括成员变量的说明、方法的定义与实现两个部分,变量的说明,用来刻画属性;方法的定义,用来刻画功能。class class 梯形梯形 float float 上底上底, ,下底下底, ,高高,laderArea; /,laderArea; /变量定义部分变量定义部分 float float 计算面积计算面积() /() /方法定义方法定义 laderArea=( laderArea=(上底上底+ +
12、下底下底) )* *高高/2.0f;/2.0f; return laderArea; return laderArea; void void 修改高修改高(float h) /(float h) /方法定义方法定义 高高=h;=h; 方法定义方法定义float area()() “float area()”叫做方法声明;“area” 是方法名,首字符小写,第二个单词首字母大写。float定义方法的返回类型。当一个方法不需要返回数据时,方法类型是void。()中为方法声明,可以定义用逗号隔开的方法参数。方法体包括局部变量的定义和合法的java语句。变量的说明,用来刻画属性;方法的定义,用来刻画功
13、能。class class 梯形梯形 float float 上底上底, ,下底下底, ,高高,laderArea; /,laderArea; /变量定义部分变量定义部分 float float 计算面积计算面积() /() /方法定义方法定义 laderArea=( laderArea=(上底上底+ +下底下底) )* *高高/2.0f;/2.0f; return laderArea; return laderArea; void void 修改高修改高(float h) /(float h) /方法定义方法定义 高高=h;=h; 成员变量和局部变量成员变量和局部变量 类体中变量声明部分所声
14、明的变量被称为类的成员变量。在方法体中声明的变量和方法的参数被称为局部变量。 成员变量在整个类内都有效,局部变量只在定义它的方法内有效。 成员变量有默认值,局部变量没有默认值,在使用局部变量时,必须保证局部变量有具体的值。 对于成员变量的操作只能放在方法中。方法可以对成员变量和该方法体中声明的局部变量进行操作。在声明成员变量时可以同时赋予初值,但是不可以在类体中有单独的赋值语句。 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效。 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。这时如果想在该方法内使用成员变量,必须使用关键字this。 c
15、lass 三角形 float sideA,sideB,sideC,lengthSum; void setSide(float sideA,float sideB,float sideC) this.sideA=sideA; this.sideB=sideB; this.sideC=sideC; 方法定义方法定义方法内定义的局部变量从它定义的位置之后开始有效,方法参数在整个方法内有效。如果局部变量的定义是在一个复合语句中,那么该局部变量的有效范围是该复合语句,即仅在该复合语句中有效,如果局部变量的定义是在一个循环语句中,那么该局部变量的有效范围是该循环语句,即仅在该循环语句中有效 .float
16、area()() “float area()”叫做方法声明;“area” 是方法名,首字符小写,第二个单词首字母大写。float定义方法的返回类型。当一个方法不需要返回数据时,方法类型是void。()中为方法声明,可以定义用逗号隔开的方法参数。方法体包括局部变量的定义和合法的java语句。变量的说明,用来刻画属性;方法的定义,用来刻画功能。方法重载方法重载一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。class Area float getArea(float r) return 3.14f*r*r; double getArea
17、(float x,int y) return x*y; float getArea(int x,float y) return x*y; double getArea(float x,float y,float z) return (x*x+y*y+z*z)*2.0; 创建对象创建对象 类是创建对象的模板。 当使用一个类创建了一个对象时,我们也说我们给出了这个类的一个实例。第一步 声明对象格式:格式: 类的名字类的名字 对象名字对象名字; ; 如:如: People zhangping;People zhangping;第二步 为声明的对象分配内存使用newnew运算符和类的构造方法类的构造方
18、法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的)。如:如:zhangping=new People();zhangping=new People();构造方法构造方法构造方法是一种特殊方法,当程序用类创建对象时需使用它的构造方法构造方法的名字必须与它所在的类的名字完全相同,而且没有类型,允许一个类中编写若干个构造方法,既构造方法可以重载。如果类中没有编写构造方法,系统会默认类中只有一个构造方法,默认构造方法没有参数,且方法体中没有语句。如果类中定义了一个或多个构造方法,系统不提供默认构造方法。class 梯形 float 上底,下底,高; 梯形
19、() 上底=60; 下底=100; 高=20; 梯形(float x,int y,float h) 上底=x; 下底=y; 高=h; class 梯形 float 上底,下底,高; 梯形() 梯形 dengbiandengbian=new 梯形()梯形 dengbiandengbian=new 梯形()梯形 putongPutong=new 梯形(60,100,20)作作 业业2022年1月26日星期三 完成一篇小论文。要求:1.题目:关于面向对象我所知道的一切2.在A4稿纸上完成并上交3.字数不少于三千5创建对象创建对象 类是创建对象的模板。 当使用一个类创建了一个对象时,我们也说我们给出了
20、这个类的一个实例。第一步 声明对象格式:格式: 类的名字类的名字 对象名字对象名字; ; 如:如: People zhangPing;People zhangPing;第二步 为声明的对象分配内存使用newnew运算符和类的构造方法类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(默认的构造方法是无参数的)。如:如:zhangPing=new People();zhangPing=new People();class XiyoujiRenwu float height,weight; String head, ear,hand,foot, mouth; void
21、 speak(String s) System.out.println(s); class A public static void main(String args) XiyoujiRenwu zhubajie; /声明对象声明对象 zhubajie=new XiyoujiRenwu(); /为对象分配内存,为对象分配内存, /使用使用new 运算符和默认的构造方法运算符和默认的构造方法对象的内存模型对象的内存模型 当系统见到:当系统见到: zhubajie=new XiyoujiRenwu(); 会做两件事:会做两件事: 为height,weight,head,ear,mouth,hand
22、,foot各个变量分配内存,即XiyoujiRenwu类的成员变量被分配内存空间,然后执行构造方法中的语句。 new运算符在为变量height,weight,head,ear,mouth,hand,foot分配内存后,将返回一个引用引用给对象变量zhubajie。一个类创建多个不同对象时每个对象分配的空间都不同。改变一个对象的状态不会影响其他对象。使用Point类分别创建了两个对象p1,p2:Point p1 = new Point (5,15);Point p2 = new Point(8,18); p1=p2 XiyoujiRenwu sunwukong=new XiouJiRenwu()
23、sunwukongsunwukong0 xabbb0 xabbb 当用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用。没有实体的对象称作空对象,空对象不能使用,即不能让一个空对象去调用方法产生行为(NullPointerExcepiont)。一个类可以创建多个不同的对象,这些对象将被分配不同的内存空间。一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。 如果成员变量在声明时没有指定初值,所使用的构造方法也没有对成员变量进行初始化操作,成员变量使用自己的默认初值。使用对象使用对象 通过使用运算符“.”
24、,对象可以实现对自己的变量访问和方法的调用。 当对象调用方法时,方法中出现的成员变量就是指该对象的成员变量。 对象不仅可以操作自己的变量改变状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。 Java的“垃圾收集”机制周期的检测某个实体是否已不再被任何对象所拥有,如果发现这样的实体,释放实体占有的内存。对象对象. .变量变量对象对象. .方法方法参数传值参数传值在在JavaJava中,方法的所有参数都是中,方法的所有参数都是“传值传值”的。的。也就是说当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。方法中参数变量的值是调用者
25、指定的值的拷贝。 例:如果向方法的int型参数x传递一个int值,那么参数x得到的值是传递值的拷贝。方法如果改变参数的值,不会影响向参数“传值”的变量的值。对于基本数据类型的参数,向该参数传递的值的级别不可以高于该参数的级别,例:不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。Java的引用型数据包括对象、数组和接口。当参数是引用类型时,“传值”传递的是变量的引用而不是变量所引用的实体。如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化。而改变参数的引用不会影响向其传值的变量的引用。使用Point类分别创建了两个对象p1,p2:Point
26、 p1 = new Point (5,15);Point p2 = new Point(8,18); p1=p2 参数传值参数传值P73P73public class Example4_8 public static void main(String args) Circle circle = new Circle(10); /【代码1】 System.out.println(main方法中circle的引用:+circle); System.out.println(main方法中circle的半径+circle.getRadius(); Circular circular = new Cir
27、cular(circle,20); /【代码2】 System.out.println(circular圆锥的bottom的引用:+circular.bottom); System.out.println(圆锥的bottom的半径:+circular.getBottomRadius(); System.out.println(圆锥的体积:+circular.getVolme(); double r = 8888; System.out.println(圆锥更改底圆bottom的半径:+r); circular.setBottomRadius(r); /【代码3】 System.out.prin
28、tln(圆锥的bottom的半径:+circular.getBottomRadius(); System.out.println(圆锥的体积:+circular.getVolme(); System.out.println(main方法中circle的半径:+circle.getRadius(); System.out.println(main方法中circle的引用将发生变化); circle = new Circle(1000); /重新创建circle 【代码4】 System.out.println(现在main方法中circle的引用:+circle); System.out.pri
29、ntln(main方法中circle的半径:+circle.getRadius(); System.out.println(但是不影响circular圆锥的bottom的引用); System.out.println(circular圆锥的bottom的引用:+circular.bottom); System.out.println(圆锥的bottom的半径:+circular.getBottomRadius(); public class Circle double radius; Circle(double r) radius = r; void setRadius(double r) r
30、adius=r; double getRadius() return radius; double getArea() area=3.14*radius*radius; return area; public class Circular Circle bottom; double height; Circular(Circle c,double h) bottom = c; height = h; double getVolme() return bottom.getArea()*height/3.0; double getBottomRadius() return bottom.getRa
31、dius(); public void setBottomRadius(double r) bottom.setRadius(r); 一个例子一个类可以把某个对象作为自己的一个成员变量,如果一个类可以把某个对象作为自己的一个成员变量,如果用这样的类创建对象,那么该对象中就会有其他对象,用这样的类创建对象,那么该对象中就会有其他对象,也就是说该类的对象将其他对象作为自己的组成部分。也就是说该类的对象将其他对象作为自己的组成部分。实例变量和类变量实例变量和类变量成员变量可分为实例变量和类变量 在声明成员变量时,用关键字static给予修饰的称作类变量,否则称作实例变量(类变量也称为static变量
32、,静态变量)。注意:1.不同对象的实例变量互不相同2.所有对象共享类变量3.通过类名直接访问类变量class Dog float x; static int y;实例变量和类变量的区别实例变量和类变量的区别一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间。如果类中的成员变量有类变量,那么所有的对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。类变量不仅可以通过某个对象访问也可以直接通过类名访问。当Java程序执行时,类的字节码文件被加载到内存。如果该类没有创建对象,类中的实例变量不会被分配内存。而类中的类
33、变量在类加载到内存中时,就分配了相应的内存空间。实例变量仅仅是和相应的对象关联的变量,也就是说,不同对象的实例变量互不相同,即分配不同的内存空间,改变其中一个对象的实例变量不会影响其它对象的这个实例变量。实例变量可以通过对象访问,不能使用类名访问。类方法和实例方法类方法和实例方法 类中的方法也可分为实例方法和类方法. 方法声明时,方法类型前面不加关键字static的是实例方法、加关键字static的是类方法。 构造方法是特殊的方法,不能用static修饰构造方法。注意:对成员变量的操作只能放在方法中。实例方法既能对类变量操作也能对实例变量操作。类方法只能对类变量进行操作。1.一个类中的方法可以
34、互相调用,实例方法可以调用该类中的其他方法,类方法只能调用该类的类方法。class Dog float x; float max(float x,float y) static float jerry()实例方法和类方法的区别实例方法和类方法的区别只有当类创建对象后,类中的实例方法才分配入口地址,方法的入口地址被所有的对象共享。实例方法可以被类创建的任何对象调用执行。实例方法必须通过对象来调用。实例方法既可以操作实例变量也可以操作类变量。当所有对象都不存在时,实例方法的入口地址才被取消。类方法在加载到内存时,就分配了相应的入口地址。 类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名
35、调用。类方法不可以操作实例变量类方法的入口地址在程序退出时才被取消。Java规定:类方法中出现的成员变量必须是被所有对象共享的变量。如果一个方法不需要操作类中的任何实例变量,就可以考虑将这样如果一个方法不需要操作类中的任何实例变量,就可以考虑将这样的方法设计为一个类方法的方法设计为一个类方法this this 关键字关键字this是Java的一个关键字,表示某个对象。 this可以出现在实例方法和构造方法中,但不可以出现在类方法中。 this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。p85 this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。当实例成员变量的
36、名字和局部变量的名字相同时,不能省略this。实例成员变量在实例方法中出现时 this.this.成员变量成员变量static成员变量在实例方法中出现时 类名类名. .成员变量成员变量参数传值参数传值P73P73public class Example4_8 public static void main(String args) Circle circle = new Circle(10); /【代码1】 System.out.println(main方法中circle的引用:+circle); System.out.println(main方法中circle的半径+circle.getRa
37、dius(); Circular circular = new Circular(circle,20); /【代码2】 System.out.println(circular圆锥的bottom的引用:+circular.bottom); System.out.println(圆锥的bottom的半径:+circular.getBottomRadius(); System.out.println(圆锥的体积:+circular.getVolme(); double r = 8888; System.out.println(圆锥更改底圆bottom的半径:+r); circular.setBott
38、omRadius(r); /【代码3】 System.out.println(圆锥的bottom的半径:+circular.getBottomRadius(); System.out.println(圆锥的体积:+circular.getVolme(); System.out.println(main方法中circle的半径:+circle.getRadius(); System.out.println(main方法中circle的引用将发生变化); circle = new Circle(1000); /重新创建circle 【代码4】 System.out.println(现在main方法
39、中circle的引用:+circle); System.out.println(main方法中circle的半径:+circle.getRadius(); System.out.println(但是不影响circular圆锥的bottom的引用); System.out.println(circular圆锥的bottom的引用:+circular.bottom); System.out.println(圆锥的bottom的半径:+circular.getBottomRadius(); public class Circle double radius,area; Circle(double r
40、) radius = r; void setRadius(double r) this . radius=r; double getRadius() return radius; double getArea() area=3.14*radius*radius; return area; public class Circular Circle bottom; double height; Circular(Circle c,double h) bottom = c; height = h; double getVolme() return bottom.getArea()*height/3.
41、0; double getBottomRadius() return bottom.getRadius(); public void setBottomRadius(double r) bottom.setRadius(r); 一个例子包包包是Java语言中有效地管理类的一个机制。通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为: package 包名;如果源程序中省略了package语句,源文件中你定义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该包没有名字。包
42、名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成 。如果一个类想使用无名包中的类,只要将这个无名包的类的字节码和当前类保存在同一个目录中即可。P93package tom.jiafei;package tom.jiafei;public class PrimNumber public void getPrimnumber(int n) int sum=0,i,j; for(i=1;i=n;i+) for(j=2;ji/2) System.out.print( +i); public static void main(String args) PrimNumber p=new Pr
43、imNumber(); p.getPrimnumber(20); 一个例子目录必须包含有 tomjiafei编译方法一编译方法一E:YLjavac tomjiafeiPrimNumber.java编译方法二编译方法二E:YLtomjiafeijavac PrimNumber.java运行方法运行方法E:YLjava tom.jiafei.PrimNumber import import 语句语句 使用import 语句可以引入不在同一个包中的类不在同一个包中的类。如果想引入一个包中的全部类,可以用*来代替如:如:import java.awt.import java.awt.* *; ; 如果
44、想引入一个包中的某一个类,则写出全称即可。如:如:import java.util.Date;import java.util.Date;Java提供了130多个包,一个Java程序中可以有多个import语句,它的位置在package语句和源文件中类的定义之间。系统自动引入java.lang包中的所有类,java.lang是Java的核心库类。在学习Java语言时,使用已经存在的类,避免一切从头做起,这是面向对象编程的一个重要方面。import tom.jiafei.*; /引入包引入包tom.jiafei中的类中的类public class Ex414 public static void
45、 main(String args) PrimNumber num=new PrimNumber();/用包用包tom.jiafei中的类创建对象中的类创建对象 num.getPrimnumber(30); 一个例子引入自己的包引入自己的包 方法方法1set classpath=C:Program FilesJavajdk1.7.0_03jrelib rt.jar;.; E:YL可以加载该目录下无名包类并且目录下的子目录可以作为包名使用import tom.jiafei.*; /引入包引入包tom.jiafei中的类中的类public class Ex414 public static voi
46、d main(String args) PrimNumber num=new PrimNumber();/用包用包tom.jiafei中的类创建对象中的类创建对象 num.getPrimnumber(30); 一个例子引入自己的包引入自己的包 方法方法2在系统环境变量在系统环境变量classpathclasspath中设置环境变量中设置环境变量C:Program FilesJavajdk1.7.0_03jrelib rt.jar;.; E:YLimport tom.jiafei.*; /引入包引入包tom.jiafei中的类中的类public class Ex414 public static
47、 void main(String args) PrimNumber num=new PrimNumber();/用包用包tom.jiafei中的类创建对象中的类创建对象 num.getPrimnumber(30); 一个例子引入自己的包引入自己的包 方法方法3在源文件所在的目录下建立和包对应的目录结构表示可以加载应用程序当前目录的无名包类,表示可以加载应用程序当前目录的无名包类,而且当前目录下的子孙目录可以作为包的名而且当前目录下的子孙目录可以作为包的名字使用。字使用。import tom.jiafei.Trangle;class Ex413 public static void main(
48、String args) Trangle trangle=new Trangle(12,3,1); trangle.计算面积计算面积(); trangle.修改三边修改三边(3,4,5); trangle.计算面积计算面积(); 一个例子将类打包将类打包package tom.jiafei;public class Trangle double sideA,sideB,sideC; boolean boo; public Trangle(double a,double b,double c) sideA=a; sideB=b; sideC=c; if(a+bc&a+cb&c+b
49、a) System.out.println(我是一个三角形我是一个三角形); boo=true; else System.out.println(我不是一个三角形我不是一个三角形); boo=false; public void 计算面积计算面积() if(boo) double p=(sideA+sideB+sideC)/2.0; double area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC) ; System.out.println(面积是面积是:+area); else System.out.println(不是一个三角形不是一个三角形,不能计
50、算面积不能计算面积); public void 修改三边修改三边(double a,double b,double c) sideA=a; sideB=b; sideC=c; if(a+bc&a+cb&c+ba) boo=true; else boo=false; 注意类名混淆的问题!p93作作 业业2022年1月26日星期三 完成课后作业习题4的7.8.9.107访问权限访问权限是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法。 privateprivate、protectedprotected、publicpublic 都是Java的关键字,用
51、来修饰成员变量或方法。 访问限制修饰符如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限,被成为友好变量和友好方法。访问权限访问权限共有共有 publicpublic 一个一个JAVAJAVA程序文件只能定义一个程序文件只能定义一个publicpublic类,而且程序文件类,而且程序文件必须与它同名必须与它同名 只有在使用只有在使用 public public 访问修饰符时,类的成员才可被同一访问修饰符时,类的成员才可被同一包或不同包中的所有类访问包或不同包中的所有类访问 public public 访问修饰符可以使类的特性公用于任何类访问修饰符可以使类的特性公用于任何类pub
52、lic public 修饰的是修饰的是公共类公共类,公共变量公共变量,公共方法公共方法访问权限访问权限受保护的受保护的 protectedprotectedprotected定义的成员变量或方法具有二重性,一个类在另外一个类中创建一个对象后,如果两个类在同一包中,该对象能访问自己的protected变量和protected方法 对于一个类的protected类变量,如果两个类在同一包中,那么在另外一个类中,也能通过类名来操作这个protected类变量。 类本身、子类或包中的方法可以访问它们,类本身、子类或包中的方法可以访问它们, 其它类没有访问权限。其它类没有访问权限。protectedpr
53、otected修饰的是修饰的是受保护的成员变量受保护的成员变量和和受保护的方法受保护的方法访问权限访问权限私有的私有的 privatedprivated 对于私有变量或方法,只有在本类中创建该类的对象时,这个对象才能访问自己的私有变量和类中的私有方法private和public的区别public 声明的数据成员和成员函数可从类外部的任何地方访问。 而private 数据将被隐藏,在类外不可见,这就实现了数据封装的思想。privatedprivated修饰的是修饰的是私有成员变量私有成员变量和和私有方法私有方法访问权限访问权限友好的友好的 不用private、public 、protected修
54、饰符的成员变量和方法被称为友好变量友好变量和友好方法友好方法。 一个类在另外一个类中创建一个对象后,如果两个类在同一包中,该对象能访问自己的友好变量和友好方法 对于一个类的友好类变量(静态成员变量),如果两个类在同一包中,那么在另外一个类中,也能通过类名来操作这个友好类变量。ProtectedProtected和friendlyfriendly区别?publicprotected-friendly-private反编译和文档生成器反编译和文档生成器例如:例如:javap java.awt.Buttonjavap -private java.awt.Button反编译器反编译器:javap.ex
55、e可以将字节码反编译为源码可以将字节码反编译为源码查看源码类中的查看源码类中的publicpublic方法名字和方法名字和publicpublic成员变量的名字成员变量的名字列出列出ButtonButton中的中的全部全部方法和成方法和成员变量员变量列出列出ButtonButton中的中的publicpublic方方法和成员变量法和成员变量反编译和文档生成器反编译和文档生成器格式格式1 1 格式格式2 2 文档生成器 javadoc.exe 生成源文件类结构的html文档javadoc Ex.javajavadoc -d E:book Ex.javajavadoc -d book Ex.jav
56、a将应用程序压缩为将应用程序压缩为JARJAR文件文件假设应用程序中有两个类A、B生成一个JAR的文件的步骤如下:用文本编辑器编写清单文件用文本编辑器编写清单文件第一步第一步第二步第二步生成生成JARJAR文件文件Manifest-Version: 1.0Class: A BCreated-By:1.7E:testjar cfm T.jar Mym.mf A.class B.class将JAR文件存放在JDK安装目录的jrelibextjrelibext文件夹中一个空格!一个空格!第三步第三步保存为*.mf其他程序就可以使用这个JAR文件中的类来创建对象package m.s;public c
57、lass Mo public void fTestOne() System.out.println(I am TestOne); import m.s.*;public class Use public static void main(String arg) Mo a=new Mo(); a.fTestOne(); Mt b=new Mt(); b.fTestTwo(); JarJar文件的生成文件的生成package m.s;public class Mt public void fTestTwo() System.out.println(I am TestTwo); Step1: 保存并
58、编译Mo和MtStep2: 建立清单文件(A.mf)。注意完整类名。Step3: 在包目录之上使用jar命令。注意使用完整路径名称。Step4: 将jar文件存放至JDK安装目录下的扩展目录中。public class Mo public void fTestOne() System.out.println(I am TestOne); public class Use public static void main(String arg) Mo a=new Mo(); a.fTestOne(); Mt b=new Mt(); b.fTestTwo(); JarJar文件的生成文件的生成pub
59、lic class Mt public void fTestTwo() System.out.println(I am TestTwo); JAR JAR 参数参数jar ctxuvfm0M jar-文件文件 manifest-文件文件 -C 目录目录 文件名文件名 .参数: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用ZIP压缩格式 -M 不产生所有项的清单(manifest文件 -i 为指定的jar文件产生索引信息
60、-C 改变到指定的目录,并且包含下列文件:作作 业业2022年1月26日星期三 完成课后作业习题4的7.8.9.107类的继承类的继承 继承是面向对象程序设计的又一重要特征。类的继承就是以原有的类为基础来创建一个新类,从而达到代码复用的目的。Father类:类:surname address Son类:类: sex ageDaughter类:类: sex age父亲类,具父亲类,具有姓和地址有姓和地址两个属性两个属性儿子类,继承了父儿子类,继承了父类的姓属类的姓属性外还包含性别和性外还包含性别和年龄属性年龄属性继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论