第九章and第十章Java笔记总结大全

文章目录

    • 接口
      • 接口·概念
      • 接口定义
      • 接口的设计模式
    • java的异常处理
    • 异常类
        • Exception类及其子类
      • Error类及其子类
      • try...catch
      • 多重catch代码块的用法
      • finally子句的用法
      • 使用throws关键字抛出异常
      • 使用throw关键字抛出异常
      • throw和throws不同点
      • 使用异常处理语句的注意事项
    • 自定义异常
        • 如何创建和自定义异常?

接口

接口·概念

接口由若干常量定义和一组抽象方法组成,接口中不包括变量和有具体实现的方法。从本质上讲,接口是一种特殊的抽象类,它比抽象类还要抽象,因为只能包含常量方法的声明而没有变量和方法的实现接口中的方法是由它的实现类来实现。也可以将接口理解为一种契约,主要用于声明一组应该履行的方法

接口定义

接口是由常量抽象方法两部分组成,定义一个接口跟创建一个类非常相似。接口定义包括接口声明接口体

第九章and第十章Java笔记总结大全_第1张图片
第九章and第十章Java笔记总结大全_第2张图片
第九章and第十章Java笔记总结大全_第3张图片
第九章and第十章Java笔记总结大全_第4张图片
第九章and第十章Java笔记总结大全_第5张图片
举例

public interface Callnterface{
float PI=3.14159f;//定义用于表示圆周率的常量PI,省略了public static final修饰符
float getArea(float r);//定义一个用于计算面积的方法
float getCircumference(float r);//定义一个用于计算周长的方法

接口实现
接口在定义后,要想使用接口,就需要借助于类来实现该接口。在类中实现接口可以使用关键字implments
第九章and第十章Java笔记总结大全_第6张图片
第九章and第十章Java笔记总结大全_第7张图片
第九章and第十章Java笔记总结大全_第8张图片
第九章and第十章Java笔记总结大全_第9张图片
第九章and第十章Java笔记总结大全_第10张图片
接口与抽象类的区别
(1)相同点:都不能直接实例化,即不能直接new对象,通过子类实例化。
(2:不同点
**1.**抽象类包括一般方法,抽象方法,变量,常量;而接口只能包括常量和抽象方法。
**2.**抽象类可以有构造方法;而接口不能有构造方法。
**3.**抽象类可以实现多个接口;而接口不能继承一个抽象类。
**4.**如果继承类时会引发单继承所带来的局限性;而通过实现接口的方式能够解决单继承带来的局限性
接口的使用场合
接口的使用场合主要在两个方面,一个是多重继承,一个是可扩展性
Java中类不允许多重继承,接口可以弥补这一缺陷。

Java引入接口的目的
(1)实现多重继承。
(2)通过接口能够更好的提高程序的可扩展性和维护性。

接口的设计模式

1.适配器设计模式
第九章and第十章Java笔记总结大全_第11张图片
注:
适配器设计模式可以实现根据需要重写相应的方法。

2.简单工厂设计模式
第九章and第十章Java笔记总结大全_第12张图片
2.简单工厂设计模式则USBSimulator类中的代码:
USB usb=new MP3();//生产了符合USB接口规范的MP3可以修改为:可以修改为:
通过中间加一个过渡,只管接口和工厂, 解决了子类直接和接口的耦合,这就是简单工厂设计模式,当需要改变类对象时,只需要修改工厂类,不会影响到客户端的实现。

java的异常处理

异常(Exception)也就是不正常,又称为例外或突发事件,在生活中,异常情况随时都有可能发生。
异常处理,类似于现实生活中的应急工作预案。
Java中的异常,指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。
例如:

import java.util.Scanner;

public class DivByZero {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
  int x,y;
  System.out.println("请输入除数x:");
  x=input.nextInt();
  y=10/x;
  System.out.println("10/x的结果为:"+y);
  input.close();
	}

}

当输入0或者非整数的时候就会运行错误。就会退出程序的运行状态。
这是Java程序在运行时出现的突发情况,它不影响程序的编译,也不影响正常情况下的运行使用。
改进当输入0和非整数时能够运行代码

import java.util.Scanner;

public class DivByZeroPlus {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);//输入对象
       int x,y;
       System.out.println("请输入除数x:");
       if(input.hasNextInt()) {//判断是否为整数
    	   x=input.nextInt();
    	   if(x==0) {
    		   System.out.println("除数是0,运算结果为无穷大");
      }else {
    		   y=10/x;
    		   System.out.println("10/x的结果为:"+y);
    	   }}
    	   else {
    		   System.out.println("您输入的数据不是整数类型。");
    	   }
    	   input.close();
       
       }
	}

异常类

1.在java语言中,所有的异常都是用类表示的。
2.当程序发生异常时,会生成某个类的对象。
3.异常类对象包括:关于异常的信息、类型和错误发生时程序的状态,以及对该错误的详细描述。
4.java通过API中“Throwable类的众多子类”,来描述各种不同的异常。因而,java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件成立时,错误将引发异常。
5.Throwable类有两个子类Exception(异常)类Error(错误)类
6.Java程序用继承的方式来组织各种异常。所有的异常都是个Throwable类或其子类,而Throwable类又直接继承object类。
第九章and第十章Java笔记总结大全_第13张图片
(1)当出现RuntimeException的时候,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。
(2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及 用户自定义的Exception异常。

Exception类及其子类

可以被捕获并且可能恢复的异常类,用户程序也可以通过继承Exception类,来生成自己的异常类。
Exception异常类包括
1.java.awt.AWTException,抽象窗口工具包AWT出现异常
2.java.nio.channels.AlreadyBoundException,尝试绑定已经绑定的、网络套接字时抛出的异常;
3.java.util.zip.DataFromatException,数据格式错误异常;
4.java.io.EOFException,在向文件写入数据的过程,意外的到达了文件或流操作文件,其它的输入操作,是返回值而不是抛出异常;
5.java.io.FileNotFoundException,试图打开一个指定路径的文件时,引发的异常。当指定路径的文件不存在时,而使用FileInputStream、FileOutputStream或RandomAccessFile构造实例时,就会抛出这个异常;如果这个文件确实存在,但因为某种特殊的原因(如:打开一个只读文件进行读写时),也会抛出这个异常;
6.java.net.HttpRetryException,当流媒体模式被启动,一个HTTP请求需要重新发送、却无法自动重发而引发的异常;
7.java.net.MalformedURLException,统一资源定位器(URL)的格式不正确,引发的异常;
8.java.net.ProtocolException,网络协议异常;
9.java.net.SocketException,Socket操作异常;
10.java.lang.ArithmeticException,算术(如除数为0)运算引发的异常;
11.java.lang.ClassCastException,类型转换异常;
12.java.lang.IndexOutOfBoundsException,下标越界异常;
13.java.lang.NullPointerException,访问一个空对象中的成员时,引发的异常;
14.java.lang.NumberFormatException,数据类型转换错误的异常;
15.java.util.InputMismatchException,通过Scanner对象输入的数据类型,与接收数据的类型不匹配,而引发的异常。
16.java.lang.ArrayIndexOutOfBoundsException,数组下标越界异常,如定义int a[]=new int[3];引用int a[3]={1,2,3},引用其中的元素a[3],其实a[3]为第4个元素,因为Java数组引用下标是从0开始的,a[0]是第1个元素,类似后a[3]是第4个元素。

Error类及其子类

一般情况下,被认为是不可恢复、和不可捕捉的异常类,用户程序不需要处理这类异常。
在捕捉Error类及子类时要多加小心,因为它们通常、是在出现灾难性错误时被创建。
Error异常类包括
1.java.lang.LinkageError,一个类A依赖于另一个类B,当类A编译完成后,类B发生了更改,导致A无法找到B,而创建的错误信息对象;
2.java.lang.VirtualMachineError,Java虚拟机坏了,或继续运行Java虚拟机,所需的资源已经耗尽了,而创建的错误信息对象;
3.java.awt.AWTError,抽象窗口工具包,AWT发生严重错误时,而创建的错误信息对象。
**

try…catch

try…catch格式:

try{
   可能产生异常的代码
   }catch(异常类 异常对象){
   异常处理代码
   }
   //try代码块中的代码,可能同时存在多个异常。
   catch代码中的“异常类”参数,指定要捕获哪类异常。
   

catch代码块类似于方法的声明,包括一个异常类
类型、和该类型的一一个实例,异常类必须是Throwable
类的子类,用来指定catch语句要捕获的异常,异常类对
象可以在catch代码块中被调用,如调用对象的printSta
ckTrace()方法,将异常信息打印显示到指定的对象中去。

多重catch代码块的用法

多个catch块结构的一般格式:

try{
    可能产生异常的代码
    }catch(异常类1 异常对象1){
    异常1处理代码
    }catch(异常类2 异常对象2){
    异常2处理代码
    }
    ...其他的catch语句块
    }catch(异常类n 异常对象n){
    异常n处理代码
    }

finally子句的用法

Java中的try…catch结构提供了finally子句,在try…catch 结构中、使用finally子句后,不管程序中有无异常发生,也不管之前的try…catch结构、是否程序顺利有无执行,都实现finally里面的内容。

使用throws关键字抛出异常

如果某个方法会抛出异常,但不想在当前的这个方法中来处理这个异常,可以将这个异常抛出,在调用这个方法的代码中,捕捉这个异常并进行处理。Java语言中通过关键字throws,声明某个方法可能抛出的多种异常,throws可以同时声明多个异常,各个异常之间用逗号分隔。

使用throw关键字抛出异常

使用try…catch结构与throws关键字,抛出与捕获的都是系统定义异常;或用户自定义的异常;
Java中提供了throw关键字,可以在方法体内部抛出一个异常类对象。

public class ChkAgeByThrow {

	public static void main(String[] args) {
		try {
			int age=chkAge("-23");//调用chkAge方法
			System.out.println("字符串的年龄为:"+age+"岁");
		}catch(Exception ex) {
			//捕获throw抛出的异常
			System.out.println("年龄数据有逻辑错误!");
			System.out.println("原因:"+ex.getMessage());
		}

	}

	private static int chkAge(String strAge) throws Exception {
		int age=Integer.parseInt(strAge);//将字符串转换为整型
		if(age<0) {
			//如果年龄小于0//抛出一个异常
			throw new Exception("年龄不能为负数!");
		}
		return age;
	}

}

(1)在数字格式的字符串数据,转换为整型数据时(如int age=chkAge("-23A"),抛出NumberFormatException,该类异常由系统抛出并做处理;
(2)当年龄age<0时,发生逻辑错误而抛出的Exception异常。

throw和throws不同点

(1)作用不同:
①throw用于Java语言环境不能捕捉的异常:如年龄、性别等逻辑错误、由程序员自行产生并抛出。
②throws用于声明在该方法内抛出异常;
(2)使用位置不同:
①throw位于方法体内部,可以作为单独的语句使用。
②throws必须跟在方法参数列表的后面,不能单独使用;
例如:throws的代码

import java.util.InputMismatchException;
import java.util.Scanner;

public class DivByZeroUseThrows {

	public static void main(String[] args) {
		try {
			divByZero();//调用自定义方法
		}catch(InputMismatchException ex) {
			//异常
	    	  System.out.println("数入的除数数据必须是整数类型");
	      }catch(ArithmeticException ex){
	    	  System.out.println("除数不能为0");
	      }finally {
	    	  //finally子句肯定被执行
	    	  System.out.println("欢迎使用本计算机程序");
	      }

	}

	private static void divByZero() {
		Scanner input=new Scanner(System.in);//输入对象
		int x,y;
		System.out.println("请输入除数x:");
		x=input.nextInt();
		y=10/x;
		System.out.println("10/x的结果为:"+y);
	   input.close();
	}

}

throw代码

public class ChkAgeByThrow {

	public static void main(String[] args) {
		try {
			int age=chkAge("-23");//调用chkAge方法
			System.out.println("字符串的年龄为:"+age+"岁");
		}catch(Exception ex) {
			//捕获throw抛出的异常
			System.out.println("年龄数据有逻辑错误!");
			System.out.println("原因:"+ex.getMessage());
		}

	}

	private static int chkAge(String strAge) throws Exception {
		int age=Integer.parseInt(strAge);//将字符串转换为整型
		if(age<0) {
			//如果年龄小于0//抛出一个异常
			throw new Exception("年龄不能为负数!");
		}
		return age;
	}

}

(3)内容不同:
①throw抛出一个异常对象,而且只能抛出一个。
②throws后面跟异常类,而且可以跟多个异常类。

使用异常处理语句的注意事项

异常处理主要使用:try、catch、finally、throws、throw等关键名字。
注意事项
(1)对于程序中的异常,必须使用try…catch结构捕获,或通过throws向上抛出异常,否则编译会出错;
(2)不能单独的使用try、catch或者finally代码块,否则代码在编译时会出错;
(3)try代码块后面,可以单独的跟一个到多个catch块,也可以单独的仅跟一个finally块,catch块和finally块可以同时存在,但finally块一定要跟在catch块之后,
格式为:
try{
//try块的代码
}catch(异常类型 异常变量){
//最多只能有一个finally块
//不管是否有异常抛出或捕获,
finally代码块都会被执行
}

(4).在try…catch…finally结构中,不论程序是否会抛出异常,finally代码块都会被执行;
(5) try只跟catch代码配合使用时,可以使用多个catch块,来捕获try代码块中、可能发生的多种异常,异常发生后,Java
虚拟机、会由上而下的检查当前catch代码块所捕获的异常,是否与try代码中的发生的异常匹配,若匹配,则不再执行其它的catch代码块。
如果多重catch代码块捕获的是同种类型的异常,则捕获子类异常的catch代码块要放在捕获父类异常的catch块代码之前,否则将会在编译时发生编译错误。
== 例如:==
try{
//try块的代码
}catch(NumberFormatException ex){ //数据格式化异常
//异常1,
}catch(llegalArgumentException ex){ //非法参数异常
//异常2,NumberFormatException是IllegalArgument
Exception的子类
}catch(RuntimeException ex){ //运行时异常
//异常3,IllegalArgumentException是RuntimeException的子类
}catch(Exception ex){
//异常4, RuntimeException是Exception的子类
}
(6)在try、catch、 finally等的代码块中,定义的变量为局部变量,只能在代码块内部使用,如果要使用全局变量,则要将变量定义在这几个模块之外;
(7)在使用throw语句,抛出一个异常对象时,该语句后面的代码将不会被执行,
== 例如:==
if(age<0){ //如果年龄小于0
throw new Exception("年龄不能为负数! ");//①抛出一个异常}
return age;//②
}
在程序运行过程中,当年龄小于0时,会使用①处的代码行抛出异常,并中断该段程序的执行,因此此时代码行②将不能执行。

自定义异常

如何创建和自定义异常?

自定义异常类,必须是继承自Throwable类或其子类,才能被视为异常类,在实现中通常继承Exception类或其子类。

你可能感兴趣的:(第九章and第十章Java笔记总结大全)