当前位置: 首页 > news >正文

海安网站开发新闻摘抄

海安网站开发,新闻摘抄,秦皇岛网站建设汉狮怎么样,福鼎网站建设目录 1.异常的概念与体系结构 1.1异常的体系结构 1.2异常的举例 1.3错误的举例 2.异常的分类 2.1编译时异常 2.2运行时异常 3.异常的处理 3.1异常的抛出throw 3.2try-catch捕获并处理 3.3finally 3.4 异常声明throws 4.自定义异常类 1.异常的概念与体系结构 1.1异常的…

目录

1.异常的概念与体系结构

 1.1异常的体系结构

1.2异常的举例

1.3错误的举例

 2.异常的分类

2.1编译时异常

 2.2运行时异常

3.异常的处理

3.1异常的抛出throw

3.2try-catch捕获并处理

3.3finally

3.4 异常声明throws

4.自定义异常类


1.异常的概念与体系结构

 1.1异常的体系结构

异常种类繁多,为了对不同异常或者错误进行很好的分类管理, Java 内部维护了一个异常的体系结构:

  从上图中可以看到:

1. Throwable 是异常体系的顶层类,其派生出两个重要的子类 , Error Exception
2. Error 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等 ,典型代表: StackOverflflowError OutOfMemoryError ,一旦发生回力乏术。
3. Exception 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说 的异常就是Exception

 

1.2异常的举例

Java 中,将程序执行过程中发生的不正常行为称为异常
比如:
(1)算术异常
 public static void main(String[] args) {System.out.println(10/0);}

运行结果及分析:

补充:

 

 (2)数组越界异常

public static void main(String[] args) {int[] arr = {1, 2, 3,4,5};System.out.println(arr[10]);}
// 执行结果
Exception in thread "main" java . lang . ArrayIndexOutOfBoundsException : 100
(3)空指针异常
public static void main(String[] args) {int[] arr = null;System.out.println(arr.length);}
// 执行结果
Exception in thread "main" java . lang . NullPointerException

1.3错误的举例

StackOverflflowError

public class Text2 {public static void fun(){fun();}public static void main(String[] args) {fun();}
}

执行结果:


 2.异常的分类

异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:

2.1编译时异常

在程序编译期间发生的异常,称为编译时异常,也称为受检查异常 (Checked Exception)
举个经典的例子:

理解: 

正确完整代码:

public class Text3 {public static void main(String[] args) throws CloneNotSupportedException {Person p1 = new Person(18, "WH");Person p2= (Person) p1.clone();}
}
public class Person {int age;String nume;public Person(int age, String nume) {this.age = age;this.nume = nume;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

 2.2运行时异常

在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常 (Unchecked Exception)
RunTimeException 以及其子类对应的异常,都称为运行时异常
比如:
NullPointerException 、 ArrayIndexOutOfBoundsException、 ArithmeticException
在1.2异常的举例中展示了相关代码
注意:编译时出现的语法性错误,不能称之为异常。
例如将 System.out.println 拼写错了 , 写成了 system.out.println. 此时编译过程中就会出错 , 这是 " 编译期 " 出错。
而运行时指的是程序已经编译通过得到 class 文件了 , 再由 JVM 执行过程中出现的错误 .

 


3.异常的处理

在Java中,异常处理主要的5个关键字:try、catch、final、throw、throws。

异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明throws 以及 try-catch捕获处理。

3.1异常的抛出throw

在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者
在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者
语法:
throw new XXXException ( " 异常产生的原因 " )
主动抛出指定异常

运行结果:

Exception in thread "main" java.lang.NullPointerException: hahaha

注意事项
(1) throw 必须写在方法体内部
(2)抛出的对象必须是 Exception 或者 Exception 的子类对象
(3) 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处                 理, 直接交给JVM来处理
(4)如果抛出的是编译时异常,用户必须处理,否则无法通过编译
(5)异常一旦抛出,其后的代码就不会执行

对于(3)(5)举例:

3.2try-catch捕获并处理

语法形式:

如果真正要对异常进行 处理,就需要try-catch
注意事项
(1) try块内抛出异常位置之后的代码将不会被执行
public static void main(String[] args) {try{System.out.println(10/0);System.out.println(100);}catch (ArithmeticException e){e.printStackTrace();}}

运行结果:

java.lang.ArithmeticException: / by zero

(2)如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的

public static void main(String[] args) {try {System.out.println(10/0);} catch (NullPointerException e) {System.out.println(10);}}

运行结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero

没有打印10,而是报java.lang.ArithmeticException: / by zero,
因为:异常没有被成功捕获,也就不会被处理继续往外抛,直到 JVM收到后中断程序
(3)try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,多次捕获

 

(4)如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误

(5)可以通过一个catch捕获所有的异常,即多个异常,一次捕获(不推荐)

Exception 类是所有异常类的父类. 因此可以用这个类型表示捕捉所有异常

3.3finally

在写程序时, 有些特定的代码,不论程序是否发生异常,都需要执行,比如程序中打开的资源 :网络连接、数据库 连接、IO 流等, 在程序正常或者异常退出时,必须要对资源进进行回收 。另外,因为 异常会引发程序的跳转,可能 导致有些语句执行不到 finally 就是用来解决这个问题的。
小结: finally 中的代码一定会执行的,一般在 finally 中进行一些资源清理的扫尾工作
注意:
finally 执行的时机是在方法返回之前 (try 或者 catch 中如果有 return 会在这个 return 之前执行 fifinally). 但是如果 finally 中也存在 return 语句 , 那么就会执行 fifinally 中的 return, 从而不会执行到 try 中原有的 return.
一般我们不建议在 finally 中写 return ( 被编译器当做一个警告 )

 

3.4 异常声明throws

处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助 throws 将异常抛 给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常

 

语法格式:

修饰符 返回值类型 方法名 ( 参数列表 ) throws 异常类型 1 ,异常类型 2 ...{
}

  注意:

如果方法是main方法调用者仍然可以不处理异常,借助throws将异常抛 给JVM来处理。

注意事项
1. throws 必须跟在方法的参数列表之后
2. 声明的异常必须是 Exception 或者 Exception 的子类
3. 方法内部如果抛出了多个异常, throws 之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。
4.我们在使用throws时,要明确声明的异常是编译时异常还是运行时异常。

比如:

(1)

(2) 

 

如果是 运行时异常调用者不处理异常也没关系,JVM会处理。

如果是编译时异常一定要处理异常

处理方式:(1)try-catch捕获并处理

                  (2)借助throws将异常抛 给JVM来处理。



4.自定义异常类

Java 中虽然已经内置了丰富的异常类 , 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我 们实际情况的异常结构.
如何自定义异常类?
例题:

定义Course类,Course包含private String cno,private String cname,private int credit,Course包括方法:public Course(),public Course。Define CreditException类扩展(继承) 在RunTimeException中,CreditException包含以下方法:public CreditException()、public CreditException(String Message)。

如果课程的学分低于0.5或高于6,则课程的构建方法将抛出CreditException,消息为“学分应在0.5和6之间!”。

定义公共类TestCourse,创建一个Course对象,并使用try/catch块来处理CreditException。

代码:
import java.util.Scanner;public class LogIn {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);System.out.println("请输入cno");String cno=scanner.next();System.out.println("请输入课程名字");String cname=scanner.next();System.out.println("请输入学分");double credit=scanner.nextDouble();Course course=new Course(cno,cname,credit);try {if(!(course.getCredit()>=0.5&&course.getCredit()<=6)){throw new CreditException("课程的学分应在0.5到6之间");}else{System.out.println("输入成功学分为:"+course.getCredit());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
class Course{private String cno;private String cname;private double credit;public Course(String cno, String cname, double credit) {this.cno = cno;this.cname = cname;this.credit = credit;}public Course() {}public String getCno() {return cno;}public void setCno(String cno) {this.cno = cno;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public double getCredit() {return credit;}public void setCredit(double credit) {this.credit = credit;}}
class CreditException extends RuntimeException{public CreditException(String message){super(message);}
}

注意事项

  • 自定义异常通常会继承自 Exception 或者 RuntimeException
  • 继承自 Exception 的异常默认是受查异常
  • 继承自 RuntimeException 的异常默认是非受查异常

以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

http://www.hkea.cn/news/122776/

相关文章:

  • wordpress手机uiseo关键词的选择步骤
  • 自己制作网页的步骤windows优化大师在哪里
  • 黑龙江企业信息系统seo推广优化外包公司
  • wordpress+增加域名赣州网站seo
  • 政府门户网站建设思路怎样优化网络
  • 厦门个人网站建设百度账户代运营
  • 企业网站开发注意什么企业网站官网
  • 网站建设开发合同书关键词怎么找出来
  • 常州微信网站建设附子seo
  • 上海网站seo招聘十种营销方式
  • 农产品网络营销模式百度推广怎么优化
  • 公司网站维护如何做分录自己搭建一个网站
  • 做期货浏览哪些网站网络优化工程师前景如何
  • 垂直b2b电子商务网站有哪些google搜索排名优化
  • 建设中网站源码网络推广工具和方法
  • 厦门做点击付费网站培训教育
  • 常州网站建设案例网站制作建设公司
  • 外国人做家具的网站一站传媒seo优化
  • 佛山h5建站模板怎样优化网站
  • 第三方做公司网站谷歌搜索广告优化
  • 网站风格模板快速排名精灵
  • 做网站横幅 的网站推荐几个公司推广
  • html5国内网站建设客户管理软件
  • 网站建设报价单站长工具 seo查询
  • 日本电商网站贵州快速整站优化
  • 物业服务网站建设建立网站要多少钱一年
  • 中铁建设门户加长版廊坊百度提升优化
  • 最便宜的外贸网站建设电商平台运营方案
  • 做网站应该会什么问题网络营销软文范例500字
  • 摄影网课百度关键词优化查询