❶ java编程中常见的错误有哪些
相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。
异常是指程序在编译或运行过程出现的错误。
在java.lang包中Throwable包含了所有的异常。
Error (错误) 和Exception(异常)
(1)Error(错误)
一旦发生无法修复,但可以避免发生。
常见错误类:
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:空指针异常
:数组越界异
ClassCastException:类型转换异常
IllegalArgumentException:非法的参数异常
InputMismatchException:输入不匹配
以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception
既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。
(1) 如何处理编译时异常?
方法一:将需要处理的代码块放在一个try...catch...中
try{
//需要处理异常的代码
}catch(XXXException ef){
ef.printStackTrace();
}
我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。
如以下代码:
从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。
在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?
Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception 是它
的子类。
Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。
throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。
❷ Java编程中常见异常有哪些
【导语】在进行Java编程的过程中,我们需要通过代码编写进行程序的运行,都是人工进行代码编写,所以会出现不少异常现象,这都是属于正常现象,但是遇到这些异常现象是需要大家了解并学会处理的,今天就先给大家介绍一下Java编程中常见异常有哪些?一起来看看吧。
Java中常见的异常:
1、空指针异常类:NullPointerException
2、数据类型转换异常:java.lang.ClassCastException
3、没有访问权限:java.lang.IllegalAccessException
4、方法的参数错误:java.lang.IllegalArgumentException
5、数组下标越界异常:java.lang.IndexOutOfBoundsException
6、文件已结束异常:EOFException
7、文件未找到异常:FileNotFoundException
8、字符串转换为数字异常:NumberFormatException
9、指定的类不存在: java.lang.ClassNotFoundException
10、实例化异常:java.lang.InstantiationException
Java中数据类型转换异常如何理解?
数据类型转换异常:java.lang.ClassCastException
当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常,如下列代码。
Object obj = new Integer(0);
String str = obj;
Java中空指针异常类是什么意思?
空指针异常类:NullPointerException
调用了未经初始化的对象或者是不存在的对象。经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,
即把数组的初始化和数组元素的初始化混淆起来了。
数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化, 依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。
Java常见异常有很多,以上这10种希望大家能够提前了解,这样能够帮助大家在实际编写代码过程中,更快的进行一场处理,加油!
❸ 应用技巧: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
练习几次以上的几段代码。如果异常事件被抛出但是却能够正确被处理那就不要感到惊讶。这就是异常处理的神奇之处。
总结
在这篇文章里我们就异常处理的实用性和重要性进行了分析。我们都知道,不管是检查过的或是未经检查的,程序员都要处理好异常事件,否则可能出现程序的异常终止。我们强调要将理论与实践相结合。坦率地说,本文虽只是冰山一角,但一些基本的知识已经介绍给了大家。希望能在异常处理方面对大家有所帮助。