实训20190806

Java的异常是通过5个关键字来实现的:try(执行可能产生异常的代码),catch(捕获异常),finally(无论是否发生异常,代码总能执行),throw(声明方法可能要抛出的各种异常),throws(手动抛出异常)

捕获异常,声明异常,抛出异常

三种情况:1.没有出现异常

 

  1. 出现异常:try→产生异常对象→异常匹配类型→进入catch块→程序继续执行

          3.异常类型不匹配:try→产生异常对象→异常类型不匹配→异常中断执行

 

 

printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程。

 

try-catch块后加入finally

1.是否发生异常都执行

2.不执行的唯一情况:有异常,catch块有System.exit(1),中断程序,退出Java虚拟机

存在returntry-catch-finally块:出现异常:try→产生异常对象→异常匹配类型→进入catch块→执行finally块→执行return退出方法

多重catch块:

引发多种类型的异常:1.排列catch语句的顺序:先子类后父类;2.发生异常时按顺序逐个匹配;3.只执行第一个与异常类型匹配的catch语句。 

 

声明异常,在一个方法中抛出了异常,如何通知调用者

 

除了系统自动抛出异常外,有些问题需要程序员自行抛出异常:

 

 

接口:实现防盗门的功能:将门定义为抽象类,锁定义为接口,防盗门继承门,实现锁的借口。

Interface修饰接口,对于接口当中所有方法都是public abstract,所以可以省略。

接口的特性:1.不可以被实例化 2.实现类必须实现接口的所有方法 3.实现类可以实现多个接口,由此实现多继承 4.接口中的变量都是静态常量  5 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。

根据需求设计方法,实现所有方法,用多态的方式使用

接口是一种能力,关心实现类有何能力,而不关心类的实现细节。

 作业:

1.请说明下面的代码中存在什么问题,该如何解决。

public interface Utility {

}

public class Phone implements Utility {

void use(){

System.out.println("using phone");

}

}

public class Test {

public static void main(String[] args) {

Utility util = new Phone();

util.use();

}

}

util.use();出错,父类直接调用了子类特有的方法,而父类中并没有该方法。

将Utility util = new Phone();改成Phone p = new Phone();即可,再调用sue()方法。

2.阅读如下代码,指出其中存在的错误,并说明其原因。

public interface Constants {

int MAX = 100000;

int MIN = 1;

 

}

public class Test {

public static void main(String[] args) {

Constants con  = new Constants();//不能实例化接口

System.out.println(con.MAX);//不能实例化后调用属性

int i = 50;

if(i>Constants.MAX){//不能用接口名调用属性

Constants.MAX = i;//全局静态常量不能被修改

}

}

}

 3.阅读如下Java代码,给出运行结果。

public interface Animal {

void shout();

}

 

public class Cat implements Animal {

 

@Override

public void shout() {

System.out.println("M M!");

}

}

 

public class Dog implements Animal {

 

@Override

public void shout() {

System.out.println("w w!");

}

}

 

public class Stores {

public static Animal get(String choice){

if(choice.equalsIgnoreCase("dog")){

return new Dog();

}else{

return new Cat();

}

}

}

 

public class AnimalTest {

 

public static void main(String[] args) {

Animal a1 = Stores.get("dog");

a1.shout();

}

}

运行结果:

w w!

4.在第三题的基础上进行功能扩展,要求如下。

增加一种新的动物类型:Pig(猪),实现shout()方法。

修改Store类的get()方法:如果传入的参数是字符串dog,则返回一个Dog对象;如果传入的参数是字符串pig,则返回一个Pig对象;否则,返回一个Cat对象。

在测试类Test中加以测试:向Store类的get()方法中传入参数“pig”,并在返回的对象调用shout()方法,看看与预期的结果是否一致。

 

1 public class Pig implements Animal {
2     @Override
3     public void shout() {
4         System.out.println("h h!");
5     }
6 }

 

 1 public class Stores {
 2     public static Animal get(String choice){
 3         if(choice.equalsIgnoreCase("dog")){
 4             return new Dog();
 5         }else if(choice.equalsIgnoreCase("pig")){
 6             return new Pig();
 7         }else{
 8             return new Cat();
 9         }
10     }
11 }
1 public class AnimalTest {
2 
3     public static void main(String[] args) {
4         Animal a1 = Stores.get("pig");
5         a1.shout();
6     }
7 }

5.对贯穿本书的案例电子宠物系统的类结构进行重构,要求如下。

定义Eatable接口,在接口中定义eat()方法,表示吃饭功能。

定义FiyingDiscCatchable接口,在接口中定义catchingFiyDisc()方法,表示接飞盘功能。

定义Swimmable接口,在接口中定义swim()方法,表示游泳功能。

定义抽象类Pet,包括宠物名称(name),健康值(health)和与主人亲密度(love)属性,并提供抽象类方法print(),用来输出宠物信息。

定义狗类Dog,继承Pet类,实现EatableFlyDiscCatchable接口,并重写或实现各个方法。

定义企鹅类Penguin和继承Pet,实现EatableSwimmable接口,并重写或实现各个方法。

编写测试类,实现狗吃饭,企鹅游泳和狗玩接飞盘游戏的功能,并输出企鹅信息。

 1 public interface Eatable {
 2     /**
 3      * 吃饭功能
 4      */
 5     void eat();
 6 }
 7 
 8 public interface FiyingDiscCatchable {
 9     /**
10      * 接飞盘
11      */
12     void catchingFiyDisc();
13 
14 }
15 
16 public interface Swimmable {
17     /**
18      * 游泳方法
19      */
20     void swim();
21 
22 }
 1 public abstract class Pet {
 2     protected String name;
 3     protected int health;
 4     protected int love;
 5     
 6     
 7     public Pet(String name, int health, int love) {
 8         super();
 9         this.name = name;
10         this.health = health;
11         this.love = love;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public int getHealth() {
20         return health;
21     }
22     public void setHealth(int health) {
23         this.health = health;
24     }
25     public int getLove() {
26         return love;
27     }
28     public void setLove(int love) {
29         this.love = love;
30     }
31     public abstract void print();
32 
33 }
 1 public class Dog extends Pet implements Eatable, FiyingDiscCatchable {
 2     
 3     
 4 
 5     public Dog(String name, int health, int love) {
 6         super(name, health, love);
 7     }
 8 
 9     @Override
10     public void catchingFiyDisc() {
11         System.out.println("我在接飞盘...");
12 
13     }
14 
15     @Override
16     public void eat() {
17         System.out.println("我在吃饭饭...");
18 
19     }
20 
21     @Override
22     public void print() {
23         System.out.println("宠物的自白:");
24         System.out.print("我的名字叫"+super.getName()+",健康值为"+super.getHealth()
25                 +",和主人的亲密度是"+super.getLove());
26         
27     }
28 
29 }
30 
31 public class Penguin extends Pet implements Eatable,Swimmable{
32 
33     public Penguin(String name, int health, int love) {
34         super(name, health, love);
35     }
36 
37     @Override
38     public void swim() {
39         System.out.println("我在游泳...");
40         
41     }
42 
43     @Override
44     public void eat() {
45         System.out.println("我在吃饭饭...");
46         
47     }
48 
49     @Override
50     public void print() {
51         System.out.println("宠物的自白:");
52         System.out.print("我的名字叫"+super.getName()+",健康值为"+super.getHealth()
53                 +",和主人的亲密度是"+super.getLove());
54         
55     }
56 
57 }
58 
59 public class Test {
60 
61     public static void main(String[] args) {
62         Dog d=new Dog("多多",60,3);
63         d.eat();
64         d.catchingFiyDisc();
65         Penguin p = new Penguin("落落",60,5);
66         p.swim();
67         p.print();
68 
69     }
70 
71 }

 

posted @ 2019-08-08 19:22  这里瓶子  阅读(270)  评论(0编辑  收藏  举报