java面向对象程序设计
实验目的
- 理解嵌套类和内部类的概念;
- 学习使用成员内部类 ;
- 掌握 static 嵌套类的用法限制 ;
- 掌握基本异常的处理机制 ;
- 熟悉 try 语句与 catch 语句的搭配使用 ;
- 多重 catch 语句的使用 ;
- 使用 Throws 声明异常和 Throw 抛出异常。
- 自定义异常类及使用
实验内容
1、内部类
abstract class Speak {
public abstract void speakHello();
}
class Student {
void f(Speak sp) {
sp.speakHello();
}
}
public class Example6_2 {
public static void main(String args[]) {
Speak speak=new Speak() {
public void speakHello() {
System.out.println("大家好,祝工作顺利!");
}
}; //代码1
speak.speakHello();
Student st=new Student();
st.f(new Speak() {
public void speakHello() {
System.out.println("I am a student,how are you");
}
}); //代码2
}
}
- 分析程序写出程序的运行结果
大家好,祝工作顺利!
I am a student,how are you
- 代码1的功能是什么?
直接将抽象类speak中的方法在大括号中实现了,可以省略一个类的书写。
- 将代码1用等价的命名内部类表示,如何修改程序?
改为lambda写法
Speak speak=()->{
System.out.println(“大家好,祝工作顺利!”);
}
2、异常处理的链式搜索
本实验是要创建一个程序 , 该程序包含多个方法 method A,method B,method C,这些方法形成三级调用 , 主方法 main 调用 method A,methodA 调用 method B,method B 调用 method c, 最后 method C 会抛出一个异常 , 用户的任务是观察这个异常是如何被截获和处理的 , 在这个过程中用户会被要求对原始程序进行适当的修改,并观察修改后程序运行的结果 , 从而加深对异常处理机制的理解。
// SearchForExceptionHandler.java
class MyException extends Throwable{
public MyException(){
System.out.println("Exception thrown in MyException ");
}
}
public class SearchForExceptionHandler{
static public void main(String[] args) {
try{
System.out.println("Method main called ");
methodA();
}
catch(MyException ex) {
System.out.println("Exception caught in Main ");
}
} // end main
static void methodA() throws MyException{
System.out.println("Method A called ");
methodB();
}
static void methodB() throws MyException{
System.out.println("Method B called ");
methodC();
}
static void methodC() throws MyException{
System.out.println("Method C called ");
throw new MyException();
}
} // end SearchForExceptionHandler
- 编译并运行这个程序 , 观察得到的效果。
Method main called
Method A called
Method B called
Method C called
Exception thrown in MyException
Exception caught in Main
- 现在请将 method A 中对 method B 的调用加上一组 try/catch 语句。修改后 , 观察程序运行结果。为什么程序输出最后一行从 Exception caught in Main 变成了 Exception caught in Method A 呢 ? 请分析其中的原因。
结果:
Method main called
Method A called
Method B called
Method C called
Exception thrown in MyException
Exception caught in Method A
原因:
Method A调用 Method B, Method B 又调用了Method C ,在Method C中抛出了 MyException,
被catch后输出Exception caught in Method A。
- 现在请在 main() 方法和 method A() 方法中分别加入如下两个 finally 语句 , 然后运行这个程序 ,这两个 finally 语句都会输出吗 , 还是仅仅输出其中的一个呢 ?
Method main called
Method A called
Method B called
Method C called
Exception thrown in MyException
Exception caught in Method A
This is a Methed A finally
This is a main finally
两个都会输出
3、编程:
异常类:
- 自定义SexException性别异常类,异常信息为:“性别信息异常[男/女]”
- 定义学生类,包含学号,姓名,性别信息。定义无参和带参构造方法,在带参构造方法中,当性别不是男或女时,抛出性别异常类对象
- 在测试方法中,构造两个学生对象,完成对象的初始化,当异常发生时,输出异常message
/**
* @author admin
* @description:
* @date 2020/3/2712:11
*/
public class Example6_2 {
public static void main(String args[]) {
Speak speak=new Speak() {
public void speakHello() {
System.out.println("大家好,祝工作顺利!");
}
}; //代码1
speak.speakHello();
Student st=new Student();
st.f(new Speak() {
public void speakHello() {
System.out.println("I am a student,how are you");
}
}); //代码2
}
}
abstract class Speak {
public abstract void speakHello();
}
class Student {
void f(Speak sp) {
sp.speakHello();
}
}