为了提高执行效率,编译器可以将这个方法的所有调用都能用“嵌入代码”实现,即用方法体代码的副本来替换方法调用。
用final修饰变量,声明该变量的值不能被改变。不能被改变的变量相当于一个常量。final变量主要用于以下两个方面:或是一个编译期的常数,它永远不会改变;或在初始化后,不希望它现改变。final局部变量在定义时可以暂不设定初值,但是一经初始化,以后就不能再改变。常用final声明常量,常量名习惯全部用大写字母命名。
2.abstract类和abstract方法abstract类称为抽象类。抽象类只声明一种模板,没有具体实现代码的类。只有它的子类才可能是有实际意义的类。所以,抽象类不可能有实例。abstract方法称为抽象方法。抽象方法只能出现在抽象类 ,抽象方法没有实现的代码。如果一个类是抽象类的子类,则必须具体实现超类的抽象方法。抽象类可以没有抽象方法但有抽象方法的类一定是抽象类。 3.关键字super
子类隐藏了超类的成员变量或者覆盖了超类方法后,利用关键字super,子类方法可以引用超类的成员变量和被覆盖的方法。使用super有3种情况:使用super
调用超类的构造方法,使用super调用超类被子类覆盖的方法;使用super访问超类被子类隐藏的成员变量。 4.关键字this
关键字this用来指对象自己。this的作用有多种,例如,将对象自己作为参数,调用别的方法;当方法的局部变量隐藏成员变量时,利用this引用成员变量;构成函数内调用另一构造函数等。
5.类之间的is-a和has-a关系在两个相关的类之间,例如,类A和类B,可能会有 is-a和has-a关系。类A是继承扩展类B,则子类A和超类B之间是is-a关系,类B的所有成员类A也有,类A也是一个类B。如果类A的某个成员变量的类型是B,则类A和类B之间是has-a关系,即类A包含有类B。类A中成员变量b的类型是B。 6.内部类(innerclass)
Java语言也允许在类声明内部嵌套类声明。嵌套的类可以是静态的或者是非静态的。静态类不能直接引用其包含类的成员,必须实例化,所以不经常使用。非静态的嵌套类,需要进行事件处理,非常流行。 3.3 接口
Java程序中的类只能继承一个类,这种继承称为单继承。Java语言虽不允许一个类继承多个类,但允许一个类实现多个接口。接口(Interface)有与类相似的基本形式。接口有常量定义和方法定义,但没有方法的实现代码。可以将接口想象为一个“纯”抽象类。接口给出每个方法的规范:方法的名称、返回值类型、参数个数与参数类型。类除了能继承一个类之外,还可实现多个接口。这样,对有继承并实现接口的类来说,实际上有了多个超 类,实现有控制的多重继承。接口是一种只由常量定义和抽象方法组成的特殊类。用public修饰的接口是公共接口,可被所有的类和接口使用;而没有public修饰的接口只能被同一个包中的其他类和接口使用。
接口体中的内容是一系列常量定义和方法定义。
其中方法定义是一种方法声明,不提供方法的实现(没有方法体),用分号“;”结尾。方法的实现在“使用”这个接口的各个类中,故称使用接口的类为接口的实现。接口的所有变量都默认为是finalstatic属性;所有的方法都默认为是publicabstract属性。一个类通过使用关键字implements声明自己使用一个或多个接口。实现多个接口时,接口名之间用逗号隔开。如果一个类要实现某个接口,那么这个类必须实现
该接口的所有方法,为这些方法提供实现的方法体。在实现接口的方法时,方法的名字、返回值类型、参数个数及类型必须与接口中定义的方法完全一致,并一定要用public修饰。 3.4 基本类
Java语言为一些基本类型设有对应的基本类,如下表所示。
基本类型 对应的基本类 基本类型 对应的基本类
booleanBooleanintInteger charCharacterlongLong byteBytefloatFloat
shortShortdoubleDouble
基本类型值与对应基本类对象能相互转换。可以利用以下形式的基本类构造方法,由基本类型值得到对应基本类对象:
public基本类(基本类型v)
例如,以下代码得到一个Integer对象,其值是123。 Integern=newInteger(123);
也可以由基本类对象得到基本类型值。实现方法如以下例子所示:
设有 Double类对象dObj,Boolean类对象bObj, 代码:
doubled=dObj.doubleValue() 使得dObj对象的值赋值给double类型变量d。 代码:
booleanb=bObj.booleanValue() bObj对象的值赋值给boolean类型变量b。类似的 代码可以用于其他基本类对象与对应的基本类型变量。 3.5 Java小应用程序基础
Java小应用程序即JavaApplet,是嵌入在 Web页上供浏览器运行的程序,可放在服务器上供客户端下载使用。小应用程序的主要功能是显示图形、动画、播放、声音、响应用户事件等。每个小应用程序都得继承java.applet.Applet类。 为了系统的安全,对小应用程序有一定限制:不能调用本地的应用程序和运行时的动态连接库;不能访问本地文件,如读、写文件;除原小应用程序所在的位置(站点)外,不能再做网络连接与 WWW 建立联系,不能获得任何有关系统设置的信息。 1.小应用程序的建立和运行
一个小应用程序从建立到运行需经历4个步骤: (1)用Java语言编写小应用程序的源程序。
小应用程序由若干类组成,在源程序中必须有一个类继承java.applet.Applet类,这个类是小应用程序的主类。小应用程序的主类,用public关键字修饰。小应 用程序的源文件名必须与它的主类名完全相同。
(2)把小应用程序的源程序编译成字节码.class文件。 如果源文件有多个类,那么经编译后将生成多个.class文件。
(3)将小应用程序的字节码文件嵌入在 Web页中,设计一个指定小应用程序的HTML文件.html。
(4)在支持Java的浏览器上运行。
或用观察器appletviewer,或用浏览器 Netscape、Hotjava、IE等。如果采用某个Java开发环境,也可在开发环境下执行小应用程序。 2.Applet类的基本方法 (1)init()方法
初始化,由浏览器载入内存时调用init()方法,该方法只运行一次。其用途是创建所需要的对象、设置初始状态、装载图像、设置参数等。 (2)start()方法
初始化后,紧接着调用start()方法,启动小应用程序主线程,或当用户从小应用程序所在的 Web页面转到其他页面,然后又返回时,start()方法将再次被调用。 (3)stop()方法
当浏览器离开小应用程序所在的页面转到其他页面时,调用stop()方法,挂起小应用程序的执行。
(4)destroy()方法
当关闭浏览器时,系统调用destroy()方法,结束小应用程序的生命,关闭线程序释放对象资源。
(5)paint(Graphicsg)方法
该方法用于在屏幕窗口上显示某些信息。如文字、色彩、背景和图像等。当小应用程序启动时,浏览器产生一个Graphics类的对象,供小应用程序使用,并以参数g传递给方法paint()。小应用程序可以把g理解为一支画笔。 (6)repaint()方法
为在java页面上显示动态效果,需要repaint()方法,该方法先清除paint()方法以前所画的内容,然后再调用paint()方法。 (7)update()方法
调用repaint()方法时,系统会自动调用update()方法。update(Graphicsg)方法是从父类 Applet继承来的,该方法的功能是清除paint()方法以前所画的内容,然后再调用paint()方法。小应用程序重写update()方法,可以达到特定的要求。
3.小应用程序的生命周期(执行过程)
(1)下载并实例化小应用程序,系统调用init()方法。 (2)启动,系统调用start()方法。
(3)小应用程序暂停执行,或因Browser转向其他网面,或小应用程序调用stop()方法,或小应用程序执行paint(Graphicsg)方法。
(4)重新启动,或重新进入小应用程序所在页面,重新激活小应用程序,或小应用程序执行paint(Graphicsg)方法完成。
(5)终止,或退出浏览器,或执行destroy()消亡方法。 4.小应用程序数据输入输出
小应用程序的数据输入有多种方式。从图形界面的文本框、文本区中输入;也可以采用系统标准输入;还可以由HTML文件中的参数导入。
·第4章 数组和字符串 4.1 数组
数组是将一组相同类型的数据顺序存储,组成一种复合数据类型。数组的特点主要是:一个数组中的所有元素的数据类型相同,数组中的元素连续顺序存储,数组中每个元素按存储顺序对应一个下标,下标从0开始顺序编号,引用数组元素通过数组名和它的下标确定。数组有一维数组和多维数组之分,数组元素的下标个数确定数组的维数。 4.1.1 一维数组
数组元素只有一个下标的数组是一维数组。 1.声明一维数组
在Java语言中,数组是一种引用类型,数组名如同对象名一样,是一种引用。声明数组是声明一个标识符能引用数组,只要指定数组元素的类型。声明一维数组 有两种格式:
数组元素类型 数组名[];或者 数组元素类型 []数组名;
其中数组元素类型可以是任意的Java数据类型(包括类)。 2.创建一维数组
创建数组就是为数组分配存储空间,需指定数组长度。数组创建后,数组名就标识用于存储数组元素的存储空间。创建一维数组的方法有3种: (1)先声明后创建
创建数组代码的一般形式为
数组名字=new 数组元素类型[元素个数]; 例如,代码:
intintArray[];//声明数组intArray
intArray=newint[5];//创建数组intArray有5个元素,元素下标自0~4
(2)在声明时创建
把声明数组和创建数组的代码结合在一起。例如, 代码:
intintArry[]=newint[5]; (3)直接赋值创建
在声明数组时,直接给出数组的初值。例如代码:
int[]intArray={1,2,3,4,5}; 直接赋值创建数组的方法也称为数组初始化。
前两种方法创建数组时,系统会给数组元素提供默认初始值:数值型数组元素的默认初值是0;char类型数组元素的默认初值是全0代码字符;布尔类型数组元素的默认初值是false。在Java语言中,所有数组都有一个成员length,程序可以访问它,获得数组的元素个数,但不能改变它。 3.引用一维数组元素
引用一维数组元素代码的一般形式为 数组名[下标] //引用一维数组元素
数组下标可以是整型常数,或者是整型表达式。
数组下标范围是0到数组名.length-1。为了确保程序安全性,Java运行系统会对数组下标自动进行范围越界检查。如果发现下标越界,系统将发生异常。 4.数组是一种引用类型
数组也是一种引用类型,一个数组名在不同时间可引用不同的数组。 4.1.2 多维数组
数组元素有多个下标的数组就是多维数组。
1.声明二维数组
声明二维数组的一般形式有以下3种: 数型 数组名 [][] 数型 [] [] 数组名 类型 [] 数组名 [] 2.创建二维数组
创建二维数组对象的方法有多种:
(1)直接分配(平衡二维数组———矩阵)。 例如,以下代码创建一个3行5列的矩阵:
intmyTowArray[][]=newint[3][5]; (2)从最高维开始,分别对每一维分配不等长的空间(非平衡的数组)。
inta[][]=newint[3][];//创建第一维,确定有3个子数组 a[0]=newint[4];//第一个子数组有4个元素 a[1]=newint[5];//第2个子数组有5个元素 a[2]=newint[2];//第3个子数组有2个元素 (3)直接赋值创建
声明二维数组,同时直接给出各子数组的元素。如果子数组的元素个数不同,则创建的是一个非平衡的二维数组。 3.引用二维数组
二维数组元素的引用方法是: 数组名[下标1][下标2] 4.使用二维数组要注意的问题
对于二维数组,要注意以下两点:(1)二维数组名.
length和二维数组名[下标1].length的区别。二维数组名.length是二维数组的子数组个数;二维数组名[下标1].length是指定子数组的元素个数。 (2)二维数组名[下标]是一维数组。 4.2 字符串
字符串是由0个或多个字符组成的序列,Java语言提供两个用于处理字符串的类: String类用于处理不可改变的字符串。
StringBuffer类用于处理可改变的字符串。 4.2.1 字符串常量
字符串常量是用双引号括起来的一个字符串。在Java语言中,字符串常量是匿名的 String对象。
4.2.2 字符串声明和创建
如同一般用类声明和创建对象一样,可用String类声明和创建字符串。
利用String类的构造方法可以创建字符串对象,String类的构造方法有: (1)String(),创建一个空字符串对象。 例如:
s=newString();
(2)String(Stringstr),根据给定的字符串str创建 符串对象。
例如:利用字符串常量创建字符串: s=newString(?Iamastudent.?); 或简写成: s=?Iamastudent.?; 字符串声明和创建也可一起完成:
Strings=newstring(?Iamastudent.?);