首页编程java编程java中什么是必检异常,Java中必检异常有哪些为啥要必检免检异常有哪些

java中什么是必检异常,Java中必检异常有哪些为啥要必检免检异常有哪些

编程之家2023-10-1288次浏览

大家好,今天来为大家分享java中什么是必检异常的一些知识点,和Java中必检异常有哪些为啥要必检免检异常有哪些的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

java中什么是必检异常,Java中必检异常有哪些为啥要必检免检异常有哪些

Java编程中 常见的异常有哪几种

相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。

异常是指程序在编译或运行过程出现的错误。

在java.lang包中Throwable包含了所有的异常。

java中什么是必检异常,Java中必检异常有哪些为啥要必检免检异常有哪些

Error(错误)和Exception(异常)

(1)Error(错误)

一旦发生无法修复,但可以避免发生。

java中什么是必检异常,Java中必检异常有哪些为啥要必检免检异常有哪些

常见错误类:

IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。

VirtualMachineError:虚拟机错误,当 Java虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。

StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。

OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java虚拟机无法分配一个对象,这时抛出该异常。

以上是一些常见的错误,在Error类中还有一些别的错误(参照文件Java.lang.Throwable.Error).

(2)Exception(异常)

一旦发生,可以捕获并处理,不会导致程序终止,有时可以避免有时无法避免。

异常的分类:

1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)

常见的异常有:

IOException:输入输出流异常

FileNotFoundException:文件找不到的异常

ClassNotFoundException:类找不到的异常

DataFormatException:数据格式化异常

NoSuchFieldException:没有匹配的属性异常

NoSuchMethodException:没有匹配的方法异常

SQLException:数据库操作异常

TimeoutException:执行超时异常

常见的运行时异常:

RuntimeException:运行时异常

NullPointerException:空指针异常

ArrayIndexOutofBoundsException:数组越界异

ClassCastException:类型转换异常

IllegalArgumentException:非法的参数异常

InputMismatchException:输入不匹配

以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception

既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。

(1)如何处理编译时异常?

方法一:将需要处理的代码块放在一个try...catch...中

try{

//需要处理异常的代码

}catch(XXXException ef){

ef.printStackTrace();

}

我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。

如以下代码:

方法二:在出现异常的方法上直接向上抛出异常,throws

void ff() throws XXXException{

}

将出现的异常的代码中,放入如上的方法中,就会将异常抛给该方法的上一级,在主函数上继续向上抛,最终抛给JVM java虚拟机,让JVM来解决该问题。

如代码:

注意:在catch和throws的时候如果不确定是什么异常,就直接写一个Exception.

(2)如何处理运行时异常?

1.一般情况下,运行时异常是不用处理的

2.在某些情况下,如果对发生异常的结果进行处理,也可以对运行时异常进行try...catch...

以上就是一些我们处理编译时异常和运行时异常的方法。

在程序出现异常时,有时候我们可以自定义异常,以便我们能够发现是什么异常。

那么如何自定义异常??

1.当运行时,程序出现意外,可以抛出异常对象来结束程序

如:

//抛出运行时异常对象

RuntimeException ef= new RuntimeException("下标越界!index:"+index+",size:"+size());

throw ef;

2.对于编译时异常,同样可以抛出异常对象

但在方法定义时候必须加上throws

如:

public void test(int t) throws Exception{

if(t< 0|| t> 100){

Exception ef= new Exception("数据错误");

throw ef;

}

}

例如:

运行结果:

从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。

在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?

Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception是它

的子类。

Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。

throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。

希望对您有所帮助!~

应用技巧:Java中的异常处理

异常处理是初学者经常忽视执行的编程技巧。然而,当他们完成了一项大型项目后,就会发现仅仅停留在表面的工作是不够的。在本文中,我们将对异常处理进行讨论,并为大家解释其重要性,尤其是要告诉大家怎样处理这些情况。

首先,让我们解释一下什么是异常情况,通常也称例外。正如在其他的编程语言中那样,它也适用于Java:异常情况是那些在运行时出现错误的情况。这些错误并非真正的错误,因为他们是一些例外。我们可以将这些情况理解为必须解决的异常事件,否则程序将无法继续执行。所以我们就有必要了解怎样处理异常事件。

在异常事件的例子中最显著的应该是在程序执行时,运行时的分配变成了零。这样程序就无法执行,于是Java就会抛出一个异常事件,确切点说是ArithmeticException。从Java程序员的角度来看,异常事件是对象。抛出异常事件类似于抛出对象。但是,并非所有的对象都可以被抛出。

为了充分理解可抛出的异常事件,整个类层次结构的一些部分要被提交。主要的类称为Throwable。这个类拥有两个子类:Exception和Error。一个异常事件对象应从Throwable的类中传出。意味着它应该是Exception子类或Error子类的一个对象实例。这些都可以在 java.lang数据包中找到。

异常处理就是捕捉可能在运行时被抛出的异常事件的一项技术。Java通过try-catch-finally的异常处理语句为我们提供了强大的异常处理解决方案。而在另一方面,你也可以使用已经声明的异常事件,如ArithmeticException, NullPointerException等。其他类扩展了Exception类,如IOException子类。

此外,我们应该注意到异常事件包含了两种情况:检查过的和没检查的。技术上,我们认为没检查过的异常事件RuntimeExceptions。这些不需要在抛出的语句中作出声明,而且对它们的捕捉也是选择性的。不过,它们一般不会有什么影响,如果程序员根本不能发现它们的存在。在大多数情况下,这些都是逻辑性的编程错误,如NullPointerException或者ArrayIndexOutOfBounds。

同时,对异常事件进行技术性检查也迫使程序员对其进行处理和管理,意味着要对其进行单独捕捉并覆盖。这些都来自Exceptions类和它的子类,包括我们之前讨论过的RuntimeExceptions。检查过的异常事件要求异常事件处理因为它们有可能导致程序终止。

现在,我们对异常事件有了个基本的了解,下面就让我们启动集成开发环境开始编码吧!

异常处理

前面我们提到了异常处理就是指处理代码中的异常事件,或者在运行时向运行引擎抛出异常事件,在引擎末端它会搜索异常事件处理例程。它使用包含了一系列方法调用的调用堆栈进行搜索。

一般而言,异常事件可能因为包含一个异常活动或其他异步异常导致的。我们讨论的异常事件包括了一些基本的处理议题:怎样捕捉和处理这些异常事件。

Java允许我们创建自己的Exception对象和类,但是会有一个关键的请求。这些对象和类必须是扩展的Exception类。编码标准要求异常事件应该充分命名,意味着它们的名字就代表了其本身。

throw new Exception(“ This is an exception!”)

下面,我们看看要怎样捕捉和处理这些异常事件。检查以下代码:

try{

// this is the block of code where the exception happens

// sometimes called as source/root of exception

// or even called as tricky block or tricky method

catch{Exception_Typel e){

// dealing with this kind of exception

Catch(Exception_Type2 e){

// dealing witn this kind of exception

//... unlimited number of catches are possible

finally{

// this block of code is always executed

try-catch-finally语句的第一个部分是尝试阻止。这是异常事件有可能发生的部分。通常,我们建议代码行用最小的数量来编写,因为它们只会在异常事件发生的时候执行。这种情况发生时,执行会跳转去捕捉那些异常事件被比较的块中。如果它们匹配,那么就可以处理异常事件。

不论尝试阻止的时候,异常事件会不会发生,或不管能不能得到处理,阻止总会执行。由于它总是被执行,所以我们推荐你在这里做一些清理。因此,正如所预料的那样,执行起来就是具有选择性的。

Try-catch模块的结构类似于switch-case的结构。在检查过的需要处理的异常事件中,是有可能在相同方法中将其处理或者抛出的。后者可以通过关键词抛出。在这种情况下,异常事件的种类必须在方法签名中被指定。看这个例子:

Void myMethod() throws SomeKindOfException{

// method goes here

}

接下来,我们将为大家展示更多的异常处理实例。

初学者常常与非匹配数据类型纠缠不清。通常,它们会引发一些问题,例如,在做加法时出现非数字型代码。下面给大家展示的代码中,出现了异常处理的工作环境。检查该网页以完成嵌入式Exception种类的清单。现在,我们要处理NumberFormatException的发生。

public static void main(String args[]){

double sum= 0;

for(int i=0; i﹤args. length;++1)

try{

sum+= Double.parseDboule(args[i]);

}

Catch(NumberFormatException e){

Ststem.out.printIn(args[i]+“non-numeric data on”);

}

System.out.printIn(“Total sum:“+ sum);

}

正如你所见到的,它和命令行参数一起运行,而且一旦轮到非数字型参数,它就会写入system.out,意指出现的问题。但是项目会继续进行,因为try模块是循环的。否则,没有合适的异常处理,项目就会终止。用这种方式总和还是可以计算处理并在最后显示处理。我们来看看另一个例子。在这个例子中,我们会要建立自己的异常实例类,该类扩展了其母Exception类。应用程序会模拟用于异常处理和抛出的堆栈机制,如堆栈是满的或者是空的。检查一下。

Public class StackException extends Exception{

Public StackException(String text){

Super(text)

}

}

现在让我们创建一个Stack类。注意push和pop方法。它们正抛出StackException,而这一动作由方法签名导入。此外,还有一个if条件,且条件满足时,异常事件会被抛出。否则,一切都会顺利运行。

public class Stack{

private final int SIZE= 100;

private Object st[];

private int size;

private int sp;

public Stack(int size){

if(size< MAXSIZE)

this.size= size;

else

this.size= MAXSIZE;

this.st= new Object [size];

this.sp=-1;

}

public void push(Object o) throws StackException{

if(sp== this.size- 1)

throw new StackException("Stack is full");

this.st [++this.sp]= o;

}

public Object pop() throws StackException{

if(sp==-1)

throw new StackException("Stack is empty");

Object o= this.st [this.sp];

this.sp--;

return o;

}

public boolean isEmpty(){

return this.sp==-1;

}

}

好的,现在是时候写一写Main class连同主要方法了。在这一部分,请对try-catch语句给予更多关注。有两类异常情况可以被捕捉到。你也可以很容易地找出它们。

public class Main{

public static void main(String args[]){

Stack s= new Stack(10);

for(int i= 0; i<= 10;++i)

try{

s.push(new Integer(i));

}

catch(StackException e){

System.out.println(e);

}

while(! s.isEmpty()){

try{

System.out.println((Integer)(s.pop()));

}

catch(StackException e){

System.out.println(e);

}

}

}

}

当然,这里也会有附带输出。如你所见,第一行显示出的就是异常事件,因为我们要用11个要素填补堆栈,因此,在循环到isEmpty是错误的时,异常事件不会抛出。

Stack is full

练习几次以上的几段代码。如果异常事件被抛出但是却能够正确被处理那就不要感到惊讶。这就是异常处理的神奇之处。

在这篇文章里我们就异常处理的实用性和重要性进行了分析。我们都知道,不管是检查过的或是未经检查的,程序员都要处理好异常事件,否则可能出现程序的异常终止。我们强调要将理论与实践相结合。坦率地说,本文虽只是冰山一角,但一些基本的知识已经介绍给了大家。希望能在异常处理方面对大家有所帮助。

Java中必检异常有哪些为啥要必检免检异常有哪些

1,java的异常分为两大类,受检异常(即必检异常),它继承自Exception类和运行时异常(即免检异常)它继承自RuntimeException

2,在Java代码设计时,如果A方法调用了B方法,要传给B方法参数,但是这个参数B觉得A可能会传错,所以就会在B中检测,如果发现不对,就抛出一个受检异常。那个A在调用B的方法的时候就会被要求强制检查这个异常,防止出错。比如IOException

3,免检异常一般是那种错误异常,一但出现这种异常,就表示当前执行的程序无法再执行下去了。比如NullPointException.

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

java mock什么意思,java junit+eazymock单元测试 同个类里的会互相影响吗java 什么是堆中的永久代?Java堆的结构是什么样子的什么是堆中的永久代