栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【记录后端学习—Java基础 5】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【记录后端学习—Java基础 5】

接口和抽象类、异常

接口和抽象类

接口抽象类 异常

认识 Exception什么是 Throwable常见的 Exception与Exception有关的Java关键字

throws 和throwtry、finally、catch 什么是Error


接口和抽象类 接口

接口相当于是对外地一种约定和标准,以操作系统举例,操作系统就是为了屏蔽软件地复杂性和硬件地简单性之间的差异,为软件提供统一的标准。

在Java 语言中接口是由 interface 关键字来表示的,如下定义

public interface CxuanGoodJob {}

比如我们定义了一个CxuanGoodJob 的接口,在其内部定义cxuan做得好的事情。

public interface CxuanGoodJob {
 	void writeWell();
}

这里隐含了一些接口的特征:

interface 接口是一个完全抽象的类,他不会提供任何方法的实现,只会进行方法定义接口中只能使用两种访问修饰符,一种是 public ,他对整个项目可见;一种是default 缺省值,它只具有包访问权限。接口只提供方法的定义,接口没有实现,但接口可以被其它类实现,即实现接口的类需要提供方法的实现,实现接口使用 implements 关键字来表示,一个接口可以有多个实现。

class CXuanWriteWell implements CxuanGoodJob{

	@Override
	public void writeWell() {
		System.out.println("Cxuan write Java is vary well");
	}
}

-接口不能被实例化,所以接口中不能有任何构造方法。
接口的实现必须实现接口的全部方法,否则就必须定义为抽象类。

抽象类

抽象类是一种抽象能力弱于接口的类,在Java中,抽象类使用 abstract 关键字来表示。如果把接口形容为狗这个物种,那么抽象类就可以说是毛发是白色,小体的品种,而实现类可以是具体的类,比如说是柴犬、边牧等。

抽象类定义如下:

public interface Dog {
 	void FurColor();
}
abstract class WhiteDog implements Dog{
 	public void FurColor(){
 		System.out.println("Fur is white");
 	}
 	abstract void SmallBody();
}

抽象类具有如下特征:

如果一个类中有抽象方法,那么这个类一定是抽象类。抽象类中不一定只有抽象方法,抽象类中也可以有具体的方法。抽象类中的约束不像接口那么严格,可以在抽象类中构造方法、抽象方法、普通属性、方法、静态属性和静态方法。抽象类和接口一样不能被实例化,实例化只能实例化具体的类。 异常

异常是程序经常会出现的,发现错误的最佳时机是在编译阶段。也就是在运行程序之前。但是编译期间并不能找到所有的错误,比如 NullPointerException 和ClassNotFoundException 异常在编译期找不到,是在RuntimeException 运行时异常。

Java程序经常会出现两种问题,一种是java.lang.Exception,一种是 java.lang.error, 都用来表示出现了异常情况。

认识 Exception

Exception 位于java.lang 包下,是一种顶级接口,继承于Throwable 类,Exception 类及其子类都是Throwable 的组成条件,是程序出现的合理情况。

什么是 Throwable

Throwable类是Java语言中所有错误(errors)和异常(exceptions)的父类。只有继承于Throwable 的类或者子类才能够被抛出,还有一种方式是带有Java 中的@throw 注解的类也可以抛出。
Throwable 及其子类归类:

可以看出Throwable位于异常和错误的最顶层,常用的Throwable 类的方法和属性:

// 返回抛出异常的详细信息
public string getMessage();
public string getLocalizedMessage();
//返回异常发生时的简要描述
public public String toString()Ҕ
 
// 打印异常信息到标准输出流上
public void printStackTrace();
public void printStackTrace(PrintStream s);
public void printStackTrace(PrintWriter s)
// 记录栈帧的当前状态
public synchronized Throwable fillInStackTrace();

此外Throwable 的父类也是Object,所以常用的方法还有继承其父类getClass() 和 getName()方法。

常见的 Exception

Exception的父类是Throwable,并且Exception有两种异常,一种是RuntimeException;一种是CheckedException,这两种异常都应该去捕获。
RuntimeException

序号异常名称异常描述
1ArrayIndexOutOfBoundsException数组越界异常
2NullPointerException空指针异常
3IllegalArgumentException非法参数异常
4NegativeArraySizeException数组长度为负异常
5IllegalStateException非法状态异常
6ClassCastException类型转换异常

UncheckedException

序号异常名称异常描述
1NoSuchFieldException表示该类没有指定名称抛出来的异常
2NoSuchMethodException表示该类没有指定方法抛出来的异常
3IllegalAccessException不允许访问某个类的异常
4ClassNotFoundException类没有找到抛出异常
与Exception有关的Java关键字

主要有throws、throw、try、finally、catch

throws 和throw

在Java中异常是一个对象,能够被自定义抛出或者应用程序抛出,必须借助于throws和throw语句来定义抛出异常。
throws和throw通常是成对出现的。

static void cacheException() throws Exception{
 throw new Exception();
}

throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者处理。throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。throw是具体向外抛异常的动作,是抛出一个异常实例。 try、finally、catch

这三个关键字主要有以下几种组合方式:try…catch、try…finally、try…catch…finally。

try…catch表示对某一段代码可能抛出异常进行的捕获,如:

static void cacheException() throws Exception{
 try {
 	System.out.println("1");
 }catch (Exception e){
 	e.printStackTrace();
 }
}

try…finally表示对一段代码不管执行情况如何,都会走finally中的代码,如:

static void cacheException() throws Exception{
 for (int i = 0; i < 5; i++) {
 	System.out.println("enter: i=" + i);
 	try {
 		System.out.println("execute: i=" + i);
 		continue;
 	} finally {
 		System.out.println("leave: i=" + i);
 	}
 }
}

try…catch…finally也是一样的,表示对异常捕获后,再走finally中的代码逻辑。 什么是Error

Error是程序无法处理的错误,表示运行应用程序中较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM出现的问题。这些错误是不可检查的,因为它们在应用程序的控制和处理能力之外。

首先介绍一下Java内存模型,以JDK1.7为例:

这包括两部分,由所有线程共享的数据区和线程隔离的数据区组成。在上面的Java内存模型中,只有程序计数器是不会发生OutofMemoryError情况的区域。程序计数器控制着计算机指令的分支、循环、跳转、异常处理和线程恢复,并且程序计数器是每个线程私有的。

如果应用程序执行的是Java方法,那么这个计数器记录的就是虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空(Undefined)。

除了程序计数器外,其他区域:方法区(Method Area)、虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)和堆(Heap)都是可能发生OutOfMemoryError的区域。

虚拟机栈:如果线程请求的栈深度大于虚拟机栈所允许的深度,将会出现StackOverflowError异常;如果虚拟机动态扩展无法申请到足够的内存,将会出现OutOfMemoryError。本地方法栈和虚拟机栈一样堆:Java堆可以处理物理上不连续。逻辑上连续,就像我们的磁盘空间一样,如果堆中没有内存完成实例分配,并且堆无法扩展时,将会抛出OutOfMemoryError。方法区:方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号