第六章 内部类与异常类
内部类实验报告
一、实验目的1. 理解内部类的概念及其在Java编程中的应用。
2. 掌握内部类的定义、使用方法和特点。
3. 通过实例分析,加深对内部类的理解。
二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容1. 内部类的定义及特点2. 成员内部类3. 静态内部类4. 局部内部类5. 匿名内部类四、实验步骤1. 创建一个名为“OuterClass”的类,作为外部类。
2. 在“OuterClass”中定义一个成员内部类“InnerClass”。
3. 在“OuterClass”中定义一个静态内部类“StaticInnerClass”。
4. 在“OuterClass”中定义一个局部内部类“LocalInnerClass”。
5. 创建一个匿名内部类的实例,并演示其使用。
五、实验代码```java// 1. 创建外部类OuterClasspublic class OuterClass {// 2. 成员内部类InnerClasspublic class InnerClass {public void display() {System.out.println("这是成员内部类InnerClass的方法");}}// 3. 静态内部类StaticInnerClasspublic static class StaticInnerClass {public void display() {System.out.println("这是静态内部类StaticInnerClass的方法");}}// 4. 局部内部类LocalInnerClasspublic void outerMethod() {class LocalInnerClass {public void display() {System.out.println("这是局部内部类LocalInnerClass的方法");}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}// 5. 匿名内部类public void anonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("这是匿名内部类的方法");}};new Thread(runnable).start();}public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass(); InnerClass.display();StaticInnerClass staticInner = new StaticInnerClass(); staticInner.display();outer.outerMethod();outer.anonymousInnerClass();}}```六、实验结果与分析1. 成员内部类:通过定义在类中的内部类,可以访问外部类的成员变量和方法。
Java程序设计课件:异常处理
将异常组织成一个对象树结构,有利于保持方法定义的稳定性, 同时也给方法的使用者提供了以不同粒度处理异常的自由。
17/22 2023/12/28
7.3 自定义异常
Java程序设计
异常处理
本章主要内容
异常的概念 处理异常 自定义异常 小结
2023/12/28
2/22
异常的概念
凡是在运行时进入的不正常状态都称为错误。 这些错误根据错误的严重性可以分为两类:
一类是致命性的错误,它们的出现可能会导致系 统崩溃,并且程序员并不能编写程序解决所出现 的问题;
非法访问异常,如试图访问非公有方法。
实例化异常,如实例化抽象类。 中断异常。 输入输出异常。
找不到指定的字段异常。
找不到指定方法异常。
打印机错误报告异常。 运行时异常。 SQL语句执行错误异常。 线程阻塞超时异常。 执行转换算法异常。
2023/12/28
7/22
常见的RuntimeException类的子类
2. 抛出的异常对象如果属于 catch括号中要捕获的异常类 ,则catch会捕获此异常,且 为该异常创建一个引用名,然 后执行catch程序块中的异常 处理程序。其中“……”表示 多个catch程序块,每个catch 程序块捕获一种异常。
3. 无论try程序块是否捕获到 异常,或者捕获到的异常是否 与catch() 括号内的异常类型 相同,最后一定会运行finally 块里的程序代码。
} }
11/22 2023/12/28
异常捕获策略
尽可能只捕获指定的异常,而不是捕获多个异常的公共父 类,除非确信这个异常的所有子类对程序来说是没有差别 的,可以同样的方式来处理它们,同时也要考虑该异常将 来可能的扩展。只要有可能,就不要捕获 ng.Exception或ng.Throwable。
Java基础入门课后习题及答案
《Java基础入门》课后习题第1章Java开发入门一、填空题1、Java的三大体系分别是_JavaSE_____、_JavaEE_____、_JavaME_____。
2、Java程序的运行环境简称之为JRE_____。
3、编译Java程序需要使用_javac_____命令。
4、和两个可执行程序存放在JDK安装目录的bin______目录下。
5、path______环境变量用来存储Java的编译和运行工具所在的路径,而_classpath_____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。
二、选择题1、以下选项中,哪些属于JDK工具?(多选)ABCDA、Java编译器B、Java运行工具C、Java文档生成工具D、Java打包工具2、Java属于以下哪种语言?CA、机器语言B、汇编语言C、高级语言D、以上都不对3、下面哪种类型的文件可以在Java虚拟机中运行?DA、.javaB、.jreC、.exeD、.class4、安装好JDK后,在其bin目录下有许多exe可执行文件,其中命令的作用是以下哪一种?BA、Java文档制作工具B、Java解释器C、Java编译器D、Java启动器5、如果jdk的安装路径为:d:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?BA.d:\jdk; B.d :\jdk\bin; C.d:\jre\bin; D.d: \jre;三、问答题1、简述Java的特点。
面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。
2、简述JRE与JDK的区别。
JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。
JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。
Java程序设计教程第6章6.2 类的方法
定义带参数的方法
public class ZhazhiJi {
public String zhazhi ( String fruit ) { String juice = fruit + "汁";
本章任务
4/61
会定义和使用类的无参方法 理解变量作用域 会添加JavaDoc注释 会定义带参方法 会使用带参方法 会创建包组织Java工程
本章目标
5/61
类的方法
按此按钮, 狮子开始跑
电动玩具狮子 属性:
颜色:黄色
问题
按此按钮, 狮子开始叫
行为: 跑 叫 抢球
写出狮子对象的“跑”方法、 “叫”方法、“抢 球”方法
public static void main(String[] args){
Student stu = new Student(); name = "神仙姐姐";
stu.sex
sex = 'F'; age = 18;
stu.age
stu.show();
}
}
3/61
实现计算平均分和课程总成绩 实现MyShopping系统菜单切换 实现MyShopping系统入口程序 实现客户信息的添加和显示 修改客户姓名 对客户姓名排序 实现模拟账户存取款功能
语法
对象名.方法名();
问题
小明过生日,爸爸送他一个电动狮子玩具,编程 测试这个狮子能否正常工作
10/61
方法调用
public class AutoLion {
String color = "黄色"; //颜色
/*跑*/ public void run(){
实验题目
实验一 Java语言概述【实验目的】1.掌握开发Java应用程序的三个步骤:编写源文件、编译源文件和运行应用程序。
2.熟悉Java应用程序的基本结构,并能联合编译应用程序所需要的类。
文件保存要求:在D:盘新建文件夹“学号”,在“D:\ 学号”下新建文件夹“timu1”。
题目1的文件保存在“timu1”中,以下依次类推。
【题目1】1、实验要求:编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,很高兴学习Java”和“We are students”。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.编译器怎样提示丢失大括号的错误。
b.编译器怎样提示语句丢失分号的错误。
c.编译器怎样提示将System写成system这一错误。
d.编译器怎样提示将String写成string这一错误。
【题目2】1、实验要求:编写3个源文件:、、,每个源文件只有一个类。
含有应用程序的主类(含有main方法),并使用了Teacher和Student类。
将3个源文件保存到同一目录,D:\timu2,然后编译。
2、程序模板:请按模板要求,将【代码】替换为Java程序代码。
3、实验后的练习a.将编译通过后,不断地修改源文件中的【代码2】。
比如,在命令行窗口输出“我是语文老师”或“我是数学老师”。
要求每次修改源文件后,单独编译,然后直接运行应用程序(不要再编译)。
b.如果需要编译某个目录下的全部Java源文件,如D:\1001目录,可以使用如下命令:D:\1001>javac *.java请练习上述命令。
【题目3】1、实验要求:课本第15页习题2、实验后的练习习题8.(4)实验四类与对象【实验目的】1.掌握使用类来封装对象的属性和行为。
2.掌握对象的组合以及参数传递。
3.掌握类变量与实例变量,以及类方法与实例方法的区别。
文件保存要求:在D:盘新建文件夹“shiyan04”,在“D:\ 20120shiyan04”下新建文件夹“timu1”。
Java程序设计精编教程5-8章知识点
b) 如果变量名由多个单词组成,从第 2 个单词开始的每个单词的首字母要大写。
方法
方法的定义包括两部分:方法声明和方法体。一般格式为:
方法声明部分 {
方法体的内容
}
方法声明
方法声明包括返回值类型、方法名和参数。
double getArea() { //返回值类型为 double,无参数。
…
}
方法的返回值类型可以是 Java 中的任意数据类型。如果一个方法不返回数据,返回值类型必须是 void。
2. 有一个类 Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部 new 对象),只能通过该类 的静态方法 getInstance()获取该类的唯一对象。在主类 Homework2 中测试单例模式的有效性。
b) 在实例方法中,不仅可以调用实例方法,也可以调用类方法。 2) 类名调用类方法
a) 在类方法中,只能调用类方法、操作类变量。 b) 也可以通过对象调用类方法。 c) 如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例 5-8) 5.7 方法重载与多态 Java 中有两种多态:重载(overload)和重写(override)。 方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同, 或者参数的类型不同。方法的返回值类型与重载无关。
5.8 this 关键字 this 只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。 一般情况下,方法中 this.实例变量的 this 可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,
this 或类名不能省略。 5.9 包
包是 Java 语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。 包语句
Java中异常的概念和分类
Java中异常的概念和分类
异常就是程序在编译时发⽣的意想不到的情况,⼀般⽽⾔分为两类:错误(Error)和异常(Exception)
Error: 分为两种:
程序编写出现语法错误
Exception: 所有异常类的⽗类(我们说的异常处理⼀般就是处理与Exception类相关的异常,Exception和Error合起来被称作异常,但Exception⾃⾝也可以被称为异常,通常我们说的异常指的就是Exception及其⼦类
Exception异常分为编译时异常和运⾏时异常,由于我们⽆法预测程序⾥可能出现的错误或⽤户在使⽤程序时会出现的错误,所以需要异常类来告诉我们程序出现了异常,⽐如0不能作为除数,但⽤户硬是⽤做了除数怎么办?
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println(1/a);
}
Exception的⼦类被分为两⼤类:编译时异常,运⾏时异常
编译时异常: 在编写代码时如果有此类异常则必须被捕获(catch)或抛出(throw)
运⾏时异常: 可以不必再编写代码时捕获或抛出
说明: 所有异常都可以被捕获或抛出,如果异常最终没有被捕获⽽是被抛出的话程序会⽴即终⽌运⾏并打印异常信息,另外,如果不捕获运⾏时异常,默认会抛出运⾏时异常
编译时异常的特征: 直接继承⾃Exception类,不继承RuntimeException,必须被显式的捕获或抛出
运⾏时异常的特征: 继承⾃RuntimeException类,可以不被显式的捕获或抛出,如果不被显式的捕获则默认会被抛出。
Java程序设计基础教程
04
9.4形状类
06
9.6 FXML 设计用户界 面
05
9.5事件处 理机制
9.8本章小结
9.7 JavaFX可视化 布局工具
9.9习题
1
10.1数据库概 述
2
10.2 SQL语言 基础
3
10.3 MySQL 数据库简介
4
10.4 Java数 据库编程
5
10.5数据库应 用综合实例
10.6本章小结
4.8 Lambda表达式
4.10习题
01
5.1异常概 述
02
5.2 Java 异常的捕获 和处理
04
5.4自定义 异常类
06
5.6习题
03
5.3 Java 异常的声明 和抛出
05
5.5本章小 结
6.1包装类
6.2 Math类与 Random类
6.3字符串类 6.4日期与时间类
1
6.5集合类
2
6.6泛型
3
6.7反射机制
4
6程简介
7.3线程同步
7.4本章小结
7.5习题
1
8.1输入输出 流概述
2
8.2文件类
3
8.3字节流
4
8.4字符流
5
8.5随机流
8.6本章小结
8.7习题
01
9.1 GUI简 介
02
9.2常用的 UI组件
03
9.3布局面 板
2.7本章小结 2.8习题
3.1类的定义
3.2对象的创建与使 用
3.3访问控制符
3.4 static关键字 的使用
3.5 this关键字的 使用
Java_异常类(错误和异常,两者的区别介绍)
Java_异常类(错误和异常,两者的区别介绍)在 Java 中,所有的异常都有⼀个共同的祖先 Throwable(可抛出)。
Throwable 指定代码中可⽤异常传播机制通过 Java 应⽤程序传输的任何问题的共性。
Throwable 有两个重要的⼦类:Exception(异常)和 Error(错误),⼆者都是 Java 异常处理的重要⼦类,各⾃都包含⼤量⼦类。
①.Exception(异常)是应⽤程序中可能的可预测、可恢复问题。
⼀般⼤多数异常表⽰中度到轻度的问题。
异常⼀般是在特定环境下产⽣的,通常出现在代码的特定⽅法和操作中。
在 EchoInput 类中,当试图调⽤ readLine ⽅法时,可能出现IOException 异常。
Exception 类有⼀个重要的⼦类 RuntimeException。
RuntimeException 类及其⼦类表⽰“JVM 常⽤操作”引发的错误。
例如,若试图使⽤空值对象引⽤、除数为零或数组越界,则分别引发运⾏时异常(NullPointerException、ArithmeticException)和ArrayIndexOutOfBoundException。
②.Error(错误)表⽰运⾏应⽤程序中较严重问题。
⼤多数错误与代码编写者执⾏的操作⽆关,⽽表⽰代码运⾏时 JVM(Java 虚拟机)出现的问题。
例如,当 JVM 不再有继续执⾏操作所需的内存资源时,将出现 OutOfMemoryError。
检查异常和未检查异常的划分Java中的异常分为两⼤类:1.Checked Exception(⾮Runtime Exception)2.Unchecked Exception(Runtime Exception)运⾏时异常RuntimeException类是Exception类的⼦类,它叫做运⾏时异常,Java中的所有运⾏时异常都会直接或者间接地继承⾃RuntimeException类。
Java知识点整理
Java知识点整理第⼀章1、Java中没有指针、结构和类型定义等概念,没有全局变量,没有#include和#define等预处理器,也没有多重继承的机制。
只允许单重继承。
在Java中,class定义的⼤括号之后没有分隔符“;”。
2、Java源代码使⽤的是Unicode码,⽽不是ASCⅡ码,Unicode码是⽤16位⼆进制表⽰的⼀个字符。
Java编译器将Java程序编译成⼆进制代码。
3、编译后的Java程序指令并不直接在硬件系统的CPU上执⾏,⽽是由Java虚拟机(JVM)执⾏。
JVM使⽤的代码存储在.class⽂件中。
JVM的代码格式为压缩的字节码。
4、三级代码安全检查,即验证、分析和跟踪监测。
5、字节码校验器要对程序中的代码进⾏四趟扫描。
6、Java程序分为两种:(1)Java应⽤程序(Java Application);(2)Java⼩应⽤程序(Java Applet),或叫Java⼩程序。
7、如果⽅法不是静态(static)的,则必须先创建类的实例,然后调⽤实例的⽅法。
8、String args[]表⽰命令⾏参数。
9、Java规定,如果.java⽂件中包含⼀个公有类,则存储的⽂件名要与该共有类的类名⼀致。
※可以在所有类⾥都写上main ⽅法,给程序提供N多个⼊⼝,但是最后运⾏程序的时候也只能从其中的⼀个⼊⼝进去,这就是main 的作⽤( 程序⼊⼝)。
9、Java规定,在⼀个源⽂件中,最多只能定义⼀个公有类。
10、包说明必须出现在类说明和引⼊语句之前,引⼊语句必须出现在所有的类说明之前。
※只有package语句是零个或⼀个,import语句、类定义、接⼝定义为零个或多个。
11、Java的核⼼API共有32个包。
第⼆章1、Java中的注释有三种:(1)//在⼀⾏的注释;(2)/*在⼀⾏或多⾏的注释*/(3)/**⽂档注释*/2、在Java语⾔中,标识符是由字母、下划线、美元符($)开头,有字母、下划线、美元符和数字组成的字符串。
实验5.内部类
第一题.目的:验证内部类对象总与创建它的外部类对象关联 (1)第二题.定义一个Father类 (1)第三题.修改BankAccount (2)第四题.拷贝自身重要数据 (3)第五题.连锁店问题 (4)第六题.修改外围类对象数据,影响内部类行为 (4)第七题.迭代器的局部类实现 (6)第一题参考答案 (7)第二题参考答案 (7)第三题参考答案 (8)第四题参考答案 (10)第五题参考答案 (10)第六题参考答案 (11)第七题参考答案 (11)实验五. 内部类,局部类,匿名类背景知识内部类内部类对象的创建局部类匿名类实验目的1.掌握内部类,局部类,匿名类概念2.学习定义内部类,局部类,匿名类。
3.学习创建内部类,局部类,匿名类对象。
实验内容和步骤第一题.目的:验证内部类对象总与创建它的外部类对象关联1.定义一个类A,它有一个内部类B.2.定义B的方法g,它访问A的数据成员。
3.定义A的方法f,它访问B的数据成员,注意必须指明那个内部类对象的数据成员。
4.确保类A有方法修改A的域。
5.确保类B有方法print,输出A的域。
6.定义类C,它只有一个main方法。
在main方法体内创建A类对象a。
a作为外围对象创建B类对象b;7.验证:每个内部类对象,都有一个相关联的外部类对象,就是创建它的外部类对象。
方法:首先对象b调用print,打印a的域,然后修改a的域,最后b再次调用print,打印a的域,打印结果应该与对a的修改一致,从而说明b与a相关联。
第二题.定义一个Father类它包括:1.内部类Son,表示儿子的类,包括a)数据域phone,表示儿子电话号。
b)内部类构造方法c)CallFather方法,给父亲打电话,打印“xxx给yyy打电话”即可,xxx是儿子电话号,yyy是父亲电话号。
2.数据域phone,表示父亲电话号。
3.Son数组,保存儿子。
4.count,保存儿子个数5.构造函数。
6.给儿子打电话的方法CallSon,打印“给xxx打电话”即可,xxx是儿子电话号。
内部类名词解释
内部类名词解释
内部类(Inner Class)是Java中一种特殊的类定义方式,指的是在一个外
部类内部定义的类。
内部类作为外部类的一个成员,并依附于外部类而存在。
Java中允许在一个类内部定义另一个类,这样的类就称为嵌套类,而内部
类是非静态嵌套类的一种。
内部类分为三种类型:成员内部类(Member Inner Class)、局部内部类(Local Inner Class)和匿名内部类(Anonymous Inner Class)。
成员内部类是最常见的内部类类型,它可以访问外部类的所有成员,包括私有成员。
局部内部类是在方法中定义的内部类,它只能在定义它的方法中被访问。
匿名内部类是一种没有名称的内部类,通常用于实现接口或创建对象。
内部类的出现打破了Java单继承的局限性,使得代码更加模块化和组织良好。
此外,内部类可以访问其外部类的所有成员,包括私有成员,这为
Java编程提供了更多的灵活性和便利性。
java课后题答案
第1章Java概述1.编译java application源程序文件将产生相应的字节码文件,这些字节码文件别的扩展名为.java2.执行一个java程序fristapp的方法是运行java fristapp3.main()方法的返回类型是void4.在java代码中,public static void main方法的参数描述正确的是string args【】,string【】args5.内存的回收程序负责释放无用内存√6.java体系主要分为java ME,Java SE,JavaEE三大块第2章Java基础1.Java语言中,下列标识符错误的是40name2.java变量中,以下不属于引用类型的数据类型是字符型3.double d=5.3E12 ×4.C5.A6.for循环的一般形式为;for(初值;终值;增量),以下对for循环的叙述,正确的是初值和增量都是赋值语句,终值是条件判断语句7.当输入下面选项中3值时,将会输出default8.下面哪种方法能够支持javadoc命令/**…*/9.下面声明一个string类型的数组正确的是string str[]10.下面定义一个整型数组,不合法的是int[][]array=new int[][4];11.给定代码;。
下面叙述正确的是输出的结果为:012.java语言规定,标示符只能由字母,数字美元符$和下划线租成,并且第一个字符不能是数字;java是区分大小写的。
13.表达式1/2*3的计算结果是0;设x=2,则表达式(x++)/3的值是014.数组的长度可以用其属性lengt h获得;创建一个数组对象可以使用new关键字创建第3章面向对象基础1.在java中引用对象变量和对象间有什么关系?引用变量是指向对象的一个指针2.对象是面向对象技术的核心所在,在面向对象程序设计中,对象是累的抽象×3.构造方法何时被调用?创建对象时4.A,B,D5.在java语言中在包p1中包含包p2,类A直接隶属于p1,类B直接隶属于包p2.在类c中要使用类a的方法和类b的方法b,需要选择import p1.*; import p1.p2,*;6.java中,访问修饰符限制最高的是private第4章类之间的关系1.在java中,下面关于类的描述正确的是一个父类可以有多个子类2.在java语言中,类worker是类person的子类,worker的构造方法中有一句“super()”,该语句是调用person的构造法法。
内部类和外部类的区别和联系
内部类和外部类的区别和联系其实外部类和内部类是⼀个相对的定义。
类A中有类B,那么类A⾃然就是外部类了,类B就是内部类。
外部类的访问权限只有两种:public和(default)。
但是内部类因类型不同所以对应的访问权限也不⼀样。
内部类可以使⽤外部类的任何变量和⽅法,但是外部类必须要实例化内部类才可以使⽤内部类。
⽽且在实例化之前必须先创建⼀个外部类的实例。
不过也可以使⽤this来调⽤外部类和内部类的元素。
内部类分为成员内部类,匿名内部类、局部内部类和静态内部类。
①成员内部类 成员内部类其实就是最简简单单的那种内部类了,定义在⼀个类的内部。
public class MemInner {int num = 10;public static void main(String[] args) {MemInner mi = new MemInner();Inner in = mi.new Inner();System.out.println(in.num);in.systemOut();}public class Inner{int num = 9;public void systemOut(){System.out.println(num);System.out.println(MemInner.this.num);}}} 如果外部类想要调⽤内部类,先要实例化内部类相对的外部类,然后再实例化⽬标内部类,然后才能访问⾥⾯的成员变量和⽅法。
并且如果想要访问内部类和外部类同名的成员变量或成员⽅法,需要按照以下格式访问:外部类.this.成员变量外部类.this.成员⽅法 ⽽且⽆论外部类的成员变量或成员⽅法的访问权限是什么,内部类统统都可以访问。
②局部内部类 局部内部类是定义在⽅法或者是⼀个作⽤域上⾯的类,它和成员内部类的区别就在于局部内部类的访问权限仅在定义它的这个⽅法或者作⽤域⾥⾯(访问范围缩⼩)。
public class AreaInner {int num = 9;public static void main(String[] args) {AreaInner ai = new AreaInner();ai.Inner();}public void Inner(){String name = "黄花⼤闺⼥";class AInner{void call(){System.out.println(num);System.out.println(name);}}AInner an = new AInner();an.call();}} 就像是main()函数调⽤不了⽅法中的局部变量⼀样,如果想要在外部类实例化局部内部类,⾸先要在这个⽅法或者作⽤域⾥⾯提前实例化此内部类,然后在外部类调⽤其⽅法或者作⽤域的时候,就可以真正为这个内部类提供资源空间。
清览云题库JAVA2实用教程
清览云题库JAVA2实用教程
《Java 2实用教程(第5版)》是由xxx编著,20xx年清华大学出版社出版的高等学校Java课程系列教材、普通高等教育“十一五”国家级规划教材。
该教材既可作为高等院校相关专业Java程序设计的教材,也可供自学者及软件开发人员参考。
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制,Java网络编程,图形、图像与音频,泛型与集合框架等内容。
该教材对部分章节的内容做了调整,删除了原第16章的有关JavaApplet的内容;特别修改了原第11章,将数据库改为MySQL数据库。
该教材由耿祥义、张跃平编著。
外部类与内部类的访问
外部类与内部类的访问外部类与内部类之间的访问内部类相当于外部类的⼀个成员,和其它成员处于同⼀个级别,因此可以在内部类中直接访问外部类的各个成员(包括私有属性)。
需要注意的是在外部类中要想访问内部类的各个成员(这⾥也包括内部类的私有属性)就必须先实例化内部类,然后才能访问。
对于为什么能访问内部类的私有属性,是因为即使内部类的成员是私有的,但是也是在外部类中,和外部类的其它成员是平等的,只不过被内部类囊括是在内部中,因此访问都必须先实例化。
例如:class NodeManager{private Node root; //根节点//public int a = 3; //此处可以直接在内部类中访问,超出外部类要么⾃⼰访问,要么通过内部类的⽅法来访问//管理添加节点public void addNode(String name){if(root!=null){root.add(name);}else{root = new Node(name);}}public void deleteNode(String name){if(root.getName().equals(name)){root = root.next; //此处即使内部类是私有的,在外部类中也可以通过实例化的对象来访问}else{root.delete(name);}}//管理打印节点public void printNode(){if(root != null){System.out.print(root.getName());}root.print();}/* 此⽅法适⽤于在外部类外部实例化外部类让其访问内部类的属性public int getInt(){return b;}*///内部类,每个节点对象class Node{private String name; //节点名称private Node next; //表⽰当前节点的下⼀个节点 //此处的成员属性要么⾃⼰访问,要么通过外部类中实例化内部类对象访问,要么在整个类外部通过⽅法调⽤来访问 //构造⽅法public Node(String name){ = name;}//获得节点名称public String getName(){return name;}//添加节点public void add(String name){if(this.next != null){this.next.add(name);}else{next = new Node(name);}}//删除节点public void delete(String name){if(this.next != null){if(this.next.getName().equals(name)){this.next = this.next.next;}else{this.next.delete(name);}}}//打印所有节点public void print(){if(this.next != null){System.out.print("->"+this.next.getName());this.next.print();}else{System.out.println();}}/*此⽅法可以让在外部类外实例化的内部类对象访问外部类成员属性public int getInt2(){return a;}*/}}但是要是在整个类的外部不管是实例化外部类还是实例化内部类也好,都⽆法访问对⽅的属性或⽅法,只能通过⾃⼰的⽅法去调⽤对⽅的成员。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌套try-catch-finally语句
Java语言的try-catch-finally语句可以嵌套,即
在try块中可以包含另外的try-catch-finally语句。
【示例程序c11_3.java】 使用嵌套的try-catch-finally语句自行处理异常。
public class c11_3 { static int a,b,c; public static void main(String args[ ]) { try { a=10; b=0; try { c=a/b; System.out.println("a/b = " + c); } catch (IndexOutOfBoundsException E) { System.out.println("捕捉超出索引异常 ..."); } finally { System.out.println("嵌套内层的 finally区块 "); } } catch(ArithmeticException E) { System.out.println("捕捉数学运算异常: b="+b); } finally { System.out.println("嵌套外层的 finally区块 "); if(b == 0) System.out.println("程序执行发生异常 !"); else System.out.println("程序正常执行完毕 !"); } } }
例子
class China { final String nationalAnthem="义勇军进行曲"; Beijing beijing; China() { beijing=new Beijing(); } String getSong() { return nationalAnthem; } class Beijing //内部类 { String name="北京"; void speak() { System.out.println("我们是"+name+" 我们的国歌是:"+getSong()); } } } public class Example4_30 { public static void main(String args[]) { China china=new China(); china.beijing.speak(); } }
【示例程序c11_2.java】 使用try-catch-finally语句自行处理异常
public class c11_2 { public static void main(String args[ ]) { int a,b,c; a=67; b=0; try { int x[ ]=new int[-5]; c=a/b; System.out.println(a+"/"+b+"="+c); } catch(NegativeArraySizeException e) { System.out.println("exception: " + e.getMessage( )); e.printStackTrace( ); } catch(ArithmeticException e) { System.out.println("b=0: " + e.getMessage( )); } finally { System.out.println("end"); } } }
一个是Exception类,它包含了一般性的异常,如 I/O异常,SQL异常,这些异常是用户可以捕捉到 的异常,可以通过产生它的子类来创建自己的异 常处理。(try-catch语句) 一个是Error子类,它包含Java系统或执行环境中 发生的异常,这些异常是用户无法捕捉到的异常
ቤተ መጻሕፍቲ ባይዱ
6.3.1 try-catch语句
try-catch语句的说明
(1) try:将可能出现错误的程序代码放在try块中,对try 块中的程序代码进行检查,可能会抛出一个或多个异 常。因此,try后面可跟一个或多个catch。 (2) catch:其功能是捕获异常,参数ExceptionObject是 ExceptionType类的对象,这是由前面的try语句生成的。 ExceptionType是Throwable类中的子类,它指出catch 语句中所处理的异常类型。catch捕获异常的过程中, 要将Throwable类中的异常类型和try语句抛出的异常 类型进行比较,若相同,则在catch中进行处理。 (3) Finally:是这个组合语句的统一出口,一般用来进行 一些“善后”操作,例如释放资源、关闭文件等。它 是可选的部分。
6.3 异常类
所谓异常就是程序运行时可能出现的一些错误,比如说: ① 用户输入出错 ② 所需文件找不到 ③ 运行时磁盘空间不够 ④ 内存不够 ⑤ 算术运算错 (数的溢出,被零除…) ⑥ 数组下标越界 …… 当Java程序出现以上的错误时,就会在所处的方法中产生一个异 常对象。这个异常对象包括错误的类型,错误出现时程序的运行 状态以及对该错误的详细描述。并由系统中相应的机制来处理, 以确保不会产生死机、死循环或其他对操作系统有损害的结果, 从而保证了整个程序运行的安全性。
例子
class Cubic { double getCubic(int n) { return 0; } } abstract class Sqrt { public abstract double getSqrt(int x); } class A { void f(Cubic cubic) { double result=cubic.getCubic(3); // 执行匿名类体中重写的getCubic System.out.println(result); } } public class Example4_31 { public static void main(String args[]) { A a=new A(); a.f ( new Cubic() //使用匿名类创建对象,将该对象传递给方法f的参数cubic { double getCubic(int n) { return n*n*n; } } ); Sqrt ss=new Sqrt() { public double getSqrt(int x) { return Math.sqrt(x); } }; double m=ss.getSqrt(5); System.out.println(m); } }
匿名类可以继承父类的方法,也可以重写父类 的方法 匿名类一定是内部类,可以访问外嵌类中的成 员变量和方法 匿名类的类体中不能声明static成员变量和 static方法 匿名对象的引用必须传递给一个匹配的参数, 匿名类的主要用途就是向方法的参数传值
假设f(B x)是一个方法: void f(B x) { x调用B类中的方法 } 其中参数是B类对象,那么在调用方法f时可以向其参 数x传递一个匿名对象,例如 f ( new B() { 匿名类的类体 } ) 如果匿名类继承了父类的方法,x就调用继承的方法 如果匿名类重写了父类的方法,x就调用重写的方法
Exception类 Error类 Error子类
RuntimeException类 RuntimeException子类
CheckedException类 CheckedException子类
异常类的继承结构
异常类的继承关系
Java中所有的异常类都继承自 ng.Throwable类。Throwable类有两个 直接子类:
生异常,程序就会被终止并显示一些错误信息给用户; 二是使用Java语言提供的try-catch-finally语句自行处理异常。这
种方式的优点很多,其中最主要的优点是将处理异常的代码与程 序代码的主线分离开来,增强了程序的可读性;其次是可减少中 途终止程序运行的可能性。
异常类的继承关系
Object类 Throwable类
try-catch-finally结构
无异常
try 执行catch
有异常
执行finally
try-catch-finally结构
例子
public class Example4_33 { public static void main(String args[ ]) { int n=0,m=0,t=555; try{ m=Integer.parseInt("8888"); n=Integer.parseInt(“abc789”); t=9999; } catch(NumberFormatException e) { System.out.println("发生异常:"+e.getMessage()); e.printStackTrace(); n=123; } System.out.println("n="+n+",m="+m+",t="+t); } }
程序运行时期
是否自行处理异常
使用try-catch-finally语句自行 处理
由预设处理方法加以 处理
Java异常处理机制结构
Java异常处理机制
在Java程序中,当程序运行过程中发生异常时,可采用如图所示 的两种方式处理异常: 一是由Java异常处理机制的预设处理方法来处理,即一旦程序发
和接口有关的匿名类
如果某个方法的参数是接口类型,那么 可以使用接口名和类体组合创建一个匿 名对象传递给方法的参数,类体必须要 实现接口中的全部方法