java面向对象程序设计

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

   }

}
  1. 分析程序写出程序的运行结果

 大家好,祝工作顺利!

I am a student,how are you

  1. 代码1的功能是什么?

直接将抽象类speak中的方法在大括号中实现了,可以省略一个类的书写。

  1. 将代码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
  1. 编译并运行这个程序 , 观察得到的效果。

Method main called

Method A called

Method B called

Method C called

Exception thrown in MyException

Exception caught in Main

  1. 现在请将 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。

  1. 现在请在 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、编程:

异常类:

  1. 自定义SexException性别异常类,异常信息为:“性别信息异常[男/女]”
  2. 定义学生类,包含学号,姓名,性别信息。定义无参和带参构造方法,在带参构造方法中,当性别不是男或女时,抛出性别异常类对象
  3. 在测试方法中,构造两个学生对象,完成对象的初始化,当异常发生时,输出异常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();

    }

}

答案见资源下载链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱代码的小郭

请留下一点心意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值