第四章 java 数组和工具类
DESCRIPTION
第四章 Java 数组和工具类. 4.1 数组 4.2 字符串 4.3 语言基础类库 4.4 Applet 类与 Applet 程序 4.5 异常处理. 4.1 数组. 在 Java 中,数组是一种专门的类型,它是有序数据的集合,数组中的每个元素的数据类型都是相同的。 对元素的确定是由数组名和它的下标实现的,如 a[0] 代表数组 a 的第一个元素, a[1] 代表数组 a 的第二个元素,依次类推。. 4.1.1 数组声明 (一). 1 .数组的声明 Java 的数组声明采用与C语言类似的形式。数组可分为一维数组和多维数组。它们的声明的形式为: - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/1.jpg)
第四章 第四章 JavaJava 数组和工具类 数组和工具类 4.1 数组 4.2 字符串 4.3 语言基础类库 4.4 Applet 类与 Applet 程序 4.5 异常处理
![Page 2: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/2.jpg)
4.1 4.1 数组 数组 在 Java 中,数组是一种专门的类型,它是
有序数据的集合,数组中的每个元素的数据类型都是相同的。
对元素的确定是由数组名和它的下标实现的,如 a[0] 代表数组 a 的第一个元素, a[1] 代表数组 a 的第二个元素,依次类推。
![Page 3: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/3.jpg)
4.1.1 4.1.1 数组声明 (一)数组声明 (一)1 .数组的声明
Java 的数组声明采用与C语言类似的形式。数组可分为一维数组和多维数组。它们的声明的形式为:type arrayName [] [[]...]; 或另一等价形式:type [] [[]...] arrayName;
![Page 4: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/4.jpg)
4.1.1 4.1.1 数组声明 (二)数组声明 (二) 例如:
int count[]; // 一维整型数组 count char ch[][]; // 二维字符型数组 ch float[] fNum; // 一维浮点型数组 fNum
后一种数组声明形式体现了 Java 的纯面向对象的特征。如下例所示: int[] TestArray(int arraySize) { int[] aId = new int [arraySize]; return aId; }
![Page 5: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/5.jpg)
4.1.1 4.1.1 数组声明 (三)数组声明 (三)2 .创建数组空间 Java 数组声明中,不需要指明数组大小,这是因为
数组声明并未为数组元素分配存储单元。要为数组元素分配存储单元,必须显示使用 new 运算符实现。其格式如下: arrayName[][[]...] = new type [Size1][[Size2]...]; 或 arrayName = new type [Size1][[Size2]...];
![Page 6: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/6.jpg)
4.1.1 4.1.1 数组声明 (四)数组声明 (四) 声明数组与为数组分配存储单元两部分,可以合在一起,它们的格式如下:type arrayName[][[]...] = new type [Size1][[Size2]...];
或type [][[]...] arrayName = new type [Size1][[Size2]...]; 例如:
int count[] = new int [10]; char ch[][] = new char [3][5]; float[] fNum = new float [20];
![Page 7: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/7.jpg)
4.1.2 4.1.2 数组元素的引用及初始化(一)数组元素的引用及初始化(一) 对已经分配了存储空间的数组 ( 由 new 运算符实现 ) ,就
可以对数组中的每一个元素引用。下标是放在数组名后面 []中的,通过对下标的操作来引用元素。我们可以赋值给元素,也可以使用元素的值。
数组元素引用的形式为: arrayName[index1][[]...]
其中, index1 等为数组的下标。数组元素下标是从 0 开始的,所以最后一个元素的下标为 arraySize-1 。对于每一个数组,都有一个属性 length ,来指明数组的长度。
![Page 8: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/8.jpg)
4.1.2 4.1.2 数组元素的引用及初始化(二)数组元素的引用及初始化(二) 例如:
int count[] = new int [10]; //count[0] , count[1] , ... , count[9] ;char ch[][] = new char [3][5]; //ch[0][0] , ch[0][1] , ... , ch[2][4] ;
float[] fNum = new float [20];//fNum[0], fNum[1], ... , fNum[19]
这三个数组的属性分别为: count.length=10 ch.length=3 // 多维数组是第一维大小 fNum.length=20
![Page 9: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/9.jpg)
4.1.2 4.1.2 数组元素的引用及初始化(三)数组元素的引用及初始化(三)数组元素的引用及初始化 在声明数组时,也可以同时对数组进行初始化。它的一维形式如下: type arrayName[] = {Value1, Value2, ... , ValueN}; 例如:
float myf[] = {1,2,3,4,5,6}int myint[][]={{1,2,3},{4,5,6}};//int myint[][]=new myint[2][3];
与C或C ++ 语言不一样, Java 对数组元素的下标要进行越界检查,以确保数据的安全。▼
![Page 10: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/10.jpg)
4.2 4.2 字符串字符串 字符串是编程中经常要用到的数据结构,它是字符的序列,从某种程度上来说类似于字符的数组。
实际上,在 C 语言中,字符串就是用字符数组来实现的。 而在面向对象的 Java 语言中,字符串是用类来实现的。
程序中用到的字符串分成两大类: 字符串常量 : 在 Java 中存放字符串常量的对象属于 String 类; 字符串变量 : 对于字符串变量,由于程序经常需要对它做添加、插入、修改之类的操作,所以一般都存放在 StringBuffer 类的对象中。
![Page 11: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/11.jpg)
4.2.1 String4.2.1 String 类 (一)类 (一) 字符串常量用 String 类的对象表示。
字符常量是用单引号扩起来的单个字符,例如:‘ a’ 、‘ /n’ 等; 字符串常量是用双引号扩起来的字符序列,例如:“ a” 、“ /n” 、“Hello” 等。
C 语言中的字符串是由数组组成的,每个字符串的末尾以”\0” 标志; 而 Java 的字符串常量,通常作为 String 类的对象存在,有专门的属性来规定它的长度。 对于所有用双引号扩起来的字符串常量,系统都会为它创建一个无名的 String 类型对象。
![Page 12: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/12.jpg)
4.2.1 String4.2.1 String 类 (二)类 (二)1 .创建 String 对象
String 类的构造函数及其使用方法如下: public String() :用来创建一个空的字符串变量。 public String(String value) :利用已存在的字符串常量创建一个新的 String 对象,可以是用双引号扩起来的直接常量。 public String(StringBuffer buffer) :用利用已存在的 StringBuffer 对象为新创建 String 对象初始化。 public String(char value[]) :利用已存在的字符数组的内容初始化新建的 String 对象。
![Page 13: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/13.jpg)
4.2.1 String4.2.1 String 类 (三)类 (三)下面是创建 String 对象的例子:
String s;// 声明一个 String 对象,此时 s 的值为空。
s = new String(“abc”);// 为 s 开辟内存空间,并初始化。
String s = new String(“abc”);// 把上两个语句的功能合二为一。
String s = "abc";// 这里的赋值是一种特殊的省略写法, Java 系统会自动为用双引号扩起来的字符串常量创建一个 String 对象,所以该语句的实际效果同上。
![Page 14: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/14.jpg)
4.2.1 String4.2.1 String 类 (四)类 (四)2 .求字符串常量的长度
public int length(); 例子:
String s = "Hello!" ;System.out.println(s.length());String t = “你过得可好?” ;System.out.println(t.length());
结果:66
![Page 15: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/15.jpg)
4.2.1 String4.2.1 String 类 (五)类 (五)3 .判断字符串的前缀、后缀public boolean startsWith(String prefix);public boolean endsWith(String suffix); 例 1 :如成都地区的邮政编码以 61 开头。
if(s.startsWith(“61”)System.out.println(“ 成都地区” ) ;
例 2 :老居民身份证号码最后一位代表性别。if(s.endsWith("0")||s.endsWith("2")||s.endsWith("4") ||s.endsWith("6")||s.endsWith("8"))
System.out.println("此人是女性!") ;
![Page 16: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/16.jpg)
4.2.1 String4.2.1 String 类 (六)类 (六)4 .字符串中单个字符的查找
public int indexOf(int ch);public int indexOf(int ch,int fromIndex);方法一:查找字符 ch 在当前字符串中第一次出现的位置,如果找不到则返回 -1 。方法二:从在当前字符串的第 fromIndex 位字符之后,开始查找字符 ch 第一次出现的位置如果找不到则返回 -1 。 下面两个方法与上面的方法类似,只是从尾部往前开始查找:
public int lastIndexOf(int ch);public int lastIndexOf(int ch,int fromIndex);
![Page 17: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/17.jpg)
4.2.1 String4.2.1 String 类 (七)类 (七)例子:String s = “Java 是面向对象的语言,
JavaScript 是脚本语言。” ;int i = s.indexOf((int)'J');System.out.println(i);int j = s.indexOf((int)'J',6);System.out.println(j); int a = s.lastIndexOf((int)'J');System.out.println(a);int b = s.lastIndexOf((int)'J',10);System.out.println(b);
结果:013 130
![Page 18: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/18.jpg)
4.2.1 String4.2.1 String 类 (八)类 (八)5 .字符串中子串的查找public int indexOf(String str);
public int indexOf(String str,int fromIndex);
public int lastIndexOf(String str);
public int lastIndexOf(String str,int fromIndex);
public char charAt(int index);
// 获取当前字符串中第 index 位的字符
![Page 19: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/19.jpg)
4.2.1 String4.2.1 String 类 (九)类 (九)例子:String s = “Java 是面向对象的语言, JavaScript 是脚本语言。” ;int i = s.indexOf(“ 语言” );System.out.println(i);int j = s.indexOf(“ 语言” ,12);System.out.println(j);char c = s.charAt(5);System.out.println(c);
结果:1026面
![Page 20: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/20.jpg)
4.2.1 String4.2.1 String 类 (十)类 (十)6 .比较两个字符串public int compareTo(String anotherString);
public boolean equals(Object anoObject);
public boolean equalsIgnoreCase(String anotherString); 方法一:如果当前字符串与参数字符串完全相同,则 compareTo
() 方法返回 0 ;如果当前字符串按字母序大于参数字符串,则 compareTo() 方法返回大于 0 的整数;反之,则返回小于 0 的整数。
方法二: equals 重载 Object 类的方法,如果当前字符串与参数字符串完全相同,则返回真,否则返回假。 方法三: equalsIgnoreCase 与方法 equals 的用法相似,只是它比较时不计大小写。
▼
![Page 21: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/21.jpg)
4.2.1 String4.2.1 String 类 (十一)类 (十一)7 .连接字符子串
public String concat(String str);该方法把参数字符串连接到当前字符串的尾部,并返回这个连接而成的字符串,但当前字符串本身不改变。例子:
String s = "Hello ";System.out.println(s.concat("World! "));System.out.println(s);
结果:Hello World!Hello
![Page 22: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/22.jpg)
4.2.2 StringBuffer4.2.2 StringBuffer 类(一)类(一) StringBuffer 类的每个对象都是可以扩充和修改的字符串变量。 1 .创建 StringBuffer 对象
StringBuffer 类的构造函数如下:public StringBuffer();// 创建了一个空的 StringBuffer 对象public StringBuffer(int length);// 给出了新建的 StringBuffer 对象的长度public StringBuffer(String str); // 利用一个已经存在的字符串 String 对象来初始化 StringBuffer 对象。
![Page 23: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/23.jpg)
4.2.2 StringBuffer4.2.2 StringBuffer 类(二)类(二) 例子:StringBuffer myStrBuff1 =new StringBuffer();
StringBuffer myStrBuff2 =new StringBuffer(5);
StringBuffer myStrBuff3 =new StringBuffer("Hello!");
![Page 24: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/24.jpg)
4.2.2 StringBuffer4.2.2 StringBuffer 类(三)类(三)2 .字符串变量的扩充、修改和操作 两组用来扩充其中所包含的字符的方法:
public StringBuffer.append( 参数类型 参数名 ) ;public StringBuffer.insert(int 插入位置 , 参数类型 参数名 ) ;
例子:StringBuffer myStrBuff = new StringBuffer();myStrBuff.append("Hello, Guys!");System.out.println(myStrBuff.toString());myStrBuff.insert(6,30);System.out.println(myStrBuff.toString());
![Page 25: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/25.jpg)
4.2.2 StringBuffer4.2.2 StringBuffer 类(四)类(四) 结果:Hello, Guys!Hello,30 Guys!
注意:println 方法不接受 StringBuffer 类型的参数,若希望在屏幕上显示出来,必须先调用 toString 方法把它转换成字符串常量。
![Page 26: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/26.jpg)
4.2.2 StringBuffer4.2.2 StringBuffer 类(五)类(五) StringBuffer 的用来修改字符串的方法:
public void setCharAt(int index, char ch); 例子:StringBuffer myStrBuff = new StringBuffer("goat");System.out.println(myStrBuff.toString());myStrBuff.setCharAt(0, 'c ');System.out.println(myStrBuff.toString()); 结果:
goatcoat
![Page 27: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/27.jpg)
4.2.2 StringBuffer4.2.2 StringBuffer 类(六)类(六)3 .字符串的赋值和加法 字符串是经常使用的数据类型,为了编程方便, Java 编译系统中引入了字符串的加法和赋值。 例子:
String myStr = "Hello,";myStr = myStr + "Guys!";
这两个语句初看是乎有问题,因为 String 是字符串常量,实际上它们相当于:String myStr = new StringBuffer().append("Hello,").toString();myStr = new StringBuffer().append(MyStr). append("Guys!").toString();
![Page 28: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/28.jpg)
4.2.3 Java Application4.2.3 Java Application 命令行参数 命令行参数 Java Application 程序中用用 main( )方法中的参数 args[] 来接受命令行参数。
该参数是一个字符串数组,每个数组元素保存一个输入的命令行参数。
▼
![Page 29: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/29.jpg)
4.3 语言基础类库Object 类数据类型类Math 类System 类
![Page 30: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/30.jpg)
一.一. ObjectObject 类类Object 类是 Java 中所有类的直接或间接父类。 它的主要方法如下: protected Object clone();生成当前对象的一个拷贝,并返回这个复制对象。 public boolean equals(Object obj);比较两个对象是否相同,是则返回 true 。 public final Class getClass();获取当前对象所属的类信息,返回 Class 对象。 ptotected void finalize();定义回收当前对象所需完成的清理工作。 public String toString();返回当前对象的有关信息。
![Page 31: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/31.jpg)
二.数据类型类二.数据类型类 表:数据类型类与对应的基本数据类型
数据类型类 基本数据类型Boolean booleanCharacter charDouble doubleFloat floatInteger intLong long
![Page 32: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/32.jpg)
IntegerInteger 类类MAX_VALUE 域和 MIN_VALUE域
– 规定了 int 类型的最大值和最小值。 构造函数
– public Integer(int value);– public Interger(String s);
数据类型转换– public double doubleValue();– public int intValue();– public long longValue();
![Page 33: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/33.jpg)
IntegerInteger 类类 字符串与 int 量的转换
– public String toString()把当前对象所对应的 int 量转化为字符串。
– public stactic int parseInt(String s)可方便的把字符串转换为 int 量。
例子: int i = Integer.parseInt(“250”); 其它字符串转换方法
– public stactic Interger valueOf(String s)例子: int i = Integer.valueOf(“250”).intValue();
其它数据类型 : 例子: float f = Float.parseFloat(“25.0;)Double d = Double.parseDouble(“25.7890);Long l = Long.parseLong(“25”);
![Page 34: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/34.jpg)
三.三. MathMath 类类public final static double E;// 数学常量 epublic final static double PI; // 圆周率常量public static double abs(double a); // 绝对值public static double acos(double a); // 反余弦public static double exp(double a); //e 的参数次幂public static double log(double a); // 自然对数public static double ramdom(); // 产生 0 到 1 之间的伪随机数public static double pow(double a, double a);// 乘方public static double sqrt(double a); // 平方public static double rint(double a); // 四舍五入
![Page 35: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/35.jpg)
四.四. SystemSystem 类类 System 不能实例化,所以它的所有方法和属性都是 static的。 三个属性:
– public static PrintStream err; // 标准错误输出– public static InputStream in; // 标准输入– public static PrintStream out; // 标准输出例子: char c = System.in.read(); System.out.println(“Hello!”);
常用方法– public static void exit(int status); // 强制退出运行状态,并把状态信息返回给运行虚拟机的操作系统。例子: System.exit(0);
![Page 36: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/36.jpg)
四.四. SystemSystem 类类java.lang.Object
java.io.OutputStreamjava.io.FilterOutputStream
java.io.PrintStream void flush() void print(boolean b) void print(char c) void print(char[] s) void print(double d) void print(float f) void print(int i) voidprint(long l) void print(Object obj) void print(String s) void println() void println(boolean x) void println(char x) void println(char[] x) void println(double x) void println(float x) void println(int x) void println(long x) voidp rintln(Object x) void println(String x) void write(byte[] buf, int off, int len) voidwrite(int b)
![Page 37: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/37.jpg)
4.4 Applet4.4 Applet 类与类与 AppletApplet 程序程序一. Applet 类Applet 类存在于 java.applet 包中,是 java.awt.Panel 的子类。Panel 是 Container 的一种,它可以:
– 包容和排列其它的界面元素,如按钮、对话框和其它容器– 响应它所包容范围之内的事件,或把事件向更高层次传递
Applet 在拥有上述作用的基础上,还具有一些与浏览器和 Applet 生命周期有关的方法。
![Page 38: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/38.jpg)
二.二. AppletApplet 类的主要方法类的主要方法 用户自定义的 Applet 子类是 Java Applet 程序的标志。 在实际运行中,浏览器在下载字节码的同时,会自动创建一个用户定义的 Applet 子类的实例,并在适当的时候自动调用相应的实例方法。 init() 方法
– 完成实例的初始化工作。– 浏览器创建 Applet 子类的实例,并调用该方法。
start() 方法– 用来启动浏览器运行 Applet 的主线程。– init() 初始化后调用 start() 方法。– 包含 Applet 的 HTML页面被重新加载时,其中的 Applet 实例会被重新启动并调用 start() 方法,但 init() 方法只被调用一次。
![Page 39: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/39.jpg)
Paint()Paint() 方法方法 主要作用:在 Applet 的界面中显示文字、图形和其它界面元素。 paint() 方法有一个固定参数: Graphics 类的对象 g 。
– 当 Applet 子类的实例被初始化并启动时,浏览器将自动生成一个 Graphics 类的实例 g ,并将 g 作为参数传给Applet 实例的 paint() 方法。 导致浏览器调用 paint() 方法的事件:
– Applet 被启动后,自动调用 paint() 方法重新绘制自己的界面。– Applet 所在的浏览器窗口被改变,例如窗口被放大、缩小、移动或被其它窗口遮挡由重新显示在最前方等,都需重绘界面。– 其它相关方法被调用,也会相应调用 paint() 方法。
![Page 40: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/40.jpg)
stop()stop() 方法和方法和 destroy()destroy() 方法方法stop() 方法
– 类似于 start() 方法的逆操作。– 当用户浏览其它 WWW页面或切换到其它应用时,浏览器将暂停执行 Applet 的主线程,在暂停之前会调用 stop() 方法。
destroy() 方法– 当用户退出浏览器时, Applet 实例也被消灭,消灭之前调用 destroy() 方法完成一些释放资源、关闭连接之类的操作。
![Page 41: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/41.jpg)
AppletApplet 的生命周期的生命周期
下载并实例化 Applet
destroy()消亡
init() 初始化
stop() 中止
start() 启动启动 Applet
Applet 转入后台 重新激活 Applet
退出浏览器
![Page 42: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/42.jpg)
例子例子
![Page 43: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/43.jpg)
三.三. HTMLHTML 文件参数传递文件参数传递 在 <APPLET> 和 </APPLET> 之间嵌入 Applet 标记,常用参数: code , height 和 width 。 一些可选参数: codebase :当 Applet 字节码文件和它所嵌入的 HTML文档所在的目录不同,用 codebase 指明 Applet 所在的位置,用URL 格式表示,例如:
codebase=http://www.illusion.org/Applet/MyApplet.class alt :如果浏览器不支持 Java 就无法执行字节码,就把 alt 参数指明的信息显示给用户,例如:
alt =“This is a Java Applet ,your browser cant not understand” align :指明 Applet 界面区域在浏览器窗口的位置情况,例如:
align=CENTER
![Page 44: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/44.jpg)
<PARAM><PARAM> 标记标记HTML文件可向它所嵌入的 Applet 传递参数。 每个标记只能传递一个字符串型的参数。 例子:<HTML><BODY><APPLET code=“MyAppletParam.class” height=200 width=300><PARAM name=vstring value=“ 我是来自HTML 的参数”><PARAM name=x value=50><PARAM name=y value=100></BODY></HTML> ▼
![Page 45: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/45.jpg)
![Page 46: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/46.jpg)
4.5 4.5 异常处理 异常处理 异常( Exception )又称例外,是指程序执行过程中出现的不正常现象。任何一个程序都可能出现异常,如要打开的文件不存在、内存不够、数组访问越界等。 Java 作为一种面向对象语言,它设计了很多标准的异常处理类,采用 throw-catch (抛出 - 捕获)方式,捕获并处理异常。 Java 使异常处理标准化,使程序设计思路更清楚,理解更容易。本章将介绍异常处理方法。
![Page 47: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/47.jpg)
4.5.1 Java4.5.1 Java 异常处理的特点 异常处理的特点 与传统的错误处理技术相比, Java 使用异常处理错误有以下优越性: 1 .隔离错误处理代码和常规代码▼
在传统的程序设计中,错误检测、报错和错误处理放在一起,从而经常导致代码产生许多复杂的分支,而 Java 的异常处理就可解决该问题。2 .在调用栈中传播错误 ▼
Java 的异常具有在方法调用栈中传播错误的功能,即可以向调用栈的上层方法传递异常,可以让调用栈的更上层的方法来捕获异常,做到只让关心错误的方法捕获它。
![Page 48: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/48.jpg)
4.5.2 4.5.2 异常类的层次 (一)异常类的层次 (一) 所有异常类都是 Throwable 类的子类, Throwable 属于 java.lang 包,在程序中不必使用 import 语句引入即可使用。 Exception 和 Error 是 Throwable 类的直接子类。 Exception 是程序中所有可能恢复的异常类的父类, RuntiemException 和 Non_RuntiemException 是 Exception的直接子类。 Error 由系统保留,包含链接或装载时出现的错误、以及和虚处理机相关的错误等。 Java 程序可以抛出系统定义好的异常类,也可以由用户自定义新的异常类,用户定义的异常类一般是 Throwable 类或其子类。
![Page 49: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/49.jpg)
4.5.2 4.5.2 异常类的层次(二)异常类的层次(二)Object
Throwable
ExceptionError
RutimeException Non_RutimeException
![Page 50: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/50.jpg)
4.5.2 4.5.2 异常类的层次(三)异常类的层次(三)1 .运行异常 运行异常是指 Java 程序在运行时发现的由 Java 运行系统引发的各种异常,其出现频率很高,检测运行异常的开销很大,所以编译器不要求捕获或声明运行异常。
常见的运行异常如下所示: ArithmeticException :算术运算中除数为零,而产生的异常。
ArrayIndexOutOfBoundsException :访问数组下标超界异常。
![Page 51: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/51.jpg)
4.5.2 4.5.2 异常类的层次(四)异常类的层次(四) ArrayStoreException :进行写数组操作时,对象或数据类型不兼容,导致该异常。 ClassCastException :当试图把对象 A 转换为对象 B 时,如果对象 A既不是对象 B 的实例,又非对象 B 的子类,将产生该异常。 IllegalArgumentException :在方法的参数表中,如果参数无效,将产生异常。 IllegalThreadStateException :非法改变线程状态,如启动已执行线程,导致异常。 NegativeArraySizeException :当数组的长度是负数时,产生异常
![Page 52: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/52.jpg)
4.5.2 4.5.2 异常类的层次(五)异常类的层次(五) NullPointerException : 试图访问空对象的变量、方法
或空数组的元素,产生的异常。 SecurityException : Applet试图执行被WWW浏览器
安全设置所禁止的操作,产生异常。 IncompatibleClassChangeException :当类的定义被
改变,而引用该类的其它类没有被重新编译,则产生该异常 。
OutOfMemoryException :表示“内存不足”异常。 NoClassDefException : Java 执行时找不到所引用的类,产生该异常。
![Page 53: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/53.jpg)
4.5.2 4.5.2 异常类的层次(六)异常类的层次(六) IncompatibleTypeException :试图实例化一
个接口,产生该异常。 UnsatisfiedLinkException :所调用的方法是本地方法,但执行时无法连接这个函数,将产生该异常。
InternalException :是系统内部故障所导致的异常。
![Page 54: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/54.jpg)
4.5.2 4.5.2 异常类的层次(七)异常类的层次(七)2 .非运行异常 非运行异常能在编译时检测到,是类 Non_RuntimeException 及其子类的实例,可通过 throws 语句抛出。Java 在其标准包 java.lang 、 java.util 、java.io 、 java.net 中定义的异常类都是非运行异常类。
![Page 55: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/55.jpg)
4.5.2 4.5.2 异常类的层次(八)异常类的层次(八)java.lang 包中定义的异常: ClassNotFoundException :找不到类和界面。 CloneNoSupportException :对象引用了 Object 类的 Clone 方法,但没有实现 Cloneable 界面。 IllegalAccessException :试图去访问另一个包中的类的非 public 方法。 InstantiationException :使用 Class 类的 newInstance方法试图去创建类的实例时,由于指定的类为界面、抽象类、数组而不能创建。 InterruptedException :当一个线程正在等待时,另一个线程来中断这个线程。
![Page 56: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/56.jpg)
4.5.2 4.5.2 异常类的层次(九)异常类的层次(九)java.io 包中定义的异常:
java.io.EOFException :在正常的输入操作完成之前遇到了文件结束。
java.io.FileNotFoundException :找不到指定的文件。
java.io.UTFDataFormatException :不能完成 Java 定义的 UTF 格式的字符串转换。
![Page 57: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/57.jpg)
4.5.2 4.5.2 异常类的层次(十)异常类的层次(十)java.net 包中定义的异常:
java.net.ProtocolException :网络协议有错。 java.net.SocketException :不能正常完成 socket 操作。 java.net.UnknownHostException :网络 host名不能被解析为网络地址。 java.net.UnknownSeviceException :网络连接不能支持请求服务。
![Page 58: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/58.jpg)
4.5.3 4.5.3 抛出异常 (一)抛出异常 (一) Java 通过使用 throws 语句指定异常类型并抛出异常,其格式如下:
public void readFile() throws IOException{ ...// 包含可能产生 IO 异常的语句}public void myfunc() throws MyException1,MyException2{ ...}
![Page 59: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/59.jpg)
4.5.3 4.5.3 抛出异常 (二)抛出异常 (二)在 throws 语句中指定的异常类可以是实际抛出
异常类型的父类。为了确定需要抛出哪些异常方法有二:
一是通过经验,仔细查找所调用的方法可能产生的异常;
二是先不作任何声明,等待编译器报错,编译器将通报所有需要用 throws 语句抛出的异常。
![Page 60: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/60.jpg)
4.5.3 4.5.3 抛出异常 (三)抛出异常 (三) 也可在语句块中用 throw 语句抛出异常(可以是用户定义的异常)。 这种方式应被定义在满足一定条件时执行。 例如:try{… If(满足条件 ) throw(new SelfDefException) …} …Catch(SelfDefException e) {…}…class SelfDefException extends Throwable {…}
![Page 61: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/61.jpg)
4.5.4 4.5.4 异常处理 (一)异常处理 (一)当程序发生异常时,就会抛出一个异常,这个异常可以被程序捕获,进行相应处理。▼ 在这个结构中使用了三个关键字: try, catch, finally 。 try 后大括号中的程序段称为保护代码( protected code ),可能产生某种异常,在 try 的 {} 中不进行任何异常处理。 紧接 try 之后的是一系列 catch 语句,这才是处理异常的正确地方。
![Page 62: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/62.jpg)
4.5.4 4.5.4 异常处理 (二)异常处理 (二)catch 与方法的定义相似,需要一个参数,该参数必须是 Throwable 类或其子类的一个对象或接口。
catch 的作用是当系统或应用程序抛出一个异常后,通过与 catch 的参数比较,如果相匹配,就执行 catch 方法中的异常处理程序段,否则与一下 catch继续进行相匹配的比较。
![Page 63: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/63.jpg)
4.5.4 4.5.4 异常处理 (三)异常处理 (三) 相匹配的含义指符合下列三种情况之一:
被抛出的异常类与 catch 参数指定类是同一类被抛出的异常类是 catch 参数指定类的子类。 如果 catch 参数是一个接口,而被抛出的异常类实现了这个接口。
catch 检查匹配是顺序进行的,当程序中包含多条catch 语句时,如果 catch 安排的顺序不当,可能导致某些 catch 后的处理程序段永远不会被执行。
![Page 64: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/64.jpg)
4.5.4 4.5.4 异常处理 (四)异常处理 (四) 例如下面的程序段:
catch (IOException e) { 异常处理 1;
}catch (FileNotFoundException e) {
异常处理 2;}
所以在使用 catch 语句时,应该清楚所有参数所属类的层次,以便正确安排 catch 语句的顺序。 如果出现这种错误, javac 编译器会发出错误信息: catch not reached 。
![Page 65: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/65.jpg)
4.5.4 4.5.4 异常处理 (五)异常处理 (五)无论 try 是否抛出异常,还是某个 catch 进行了异常处理, finally 后的程序段总要被执行一次。唯一不被执行的情况是 try 或 catch 中执行了 System.exit() ,则程序立即中止。 在 try-catch-finally 这个编程结构中, catch 语句和 finally 语句是可选的,但至少使用其中一个语句。
![Page 66: 第四章 Java 数组和工具类](https://reader033.vdocuments.pub/reader033/viewer/2022061606/56814d4b550346895dba7732/html5/thumbnails/66.jpg)
4.5.54.5.5 嵌套的异常处理嵌套的异常处理 在 try-catch-finally 结构中,可以使用嵌套形式,即在捕获异常处理过程中,可以继续抛出异常。 在这种嵌套结构中,产生异常后,首先与最内层的 try-catch-finally 结构中的 catch 语句进行匹配比较。 如果没有相匹配的 catch 语句,该异常情况可以被抛出,让外层的 try-catch-finlly 的结构重复进行匹配检查。 这样从最内层到最外层,逐一检查匹配,直到找到一个匹配为止。 如果所有的 try-catch-finally 结构中都没有找到一个与异常匹配的 catch ,则 Java 系统会打印一个与该异常相关的信息并显示异常发生时的堆栈状态。