Java教程

Java学习--常见异常情况

本文主要是介绍Java学习--常见异常情况,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、java.lang.NullPointerException:空指针异常

  空指针异常就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法;比如上面的s假如为null,你还要用s的方法。

 1 package 空指针;
 2 import java.util.Scanner;
 3 public class Lianxi {
 4     static Scanner x=new Scanner(System.in);
 5     private int a;
 6     public void set(int a) {
 7         this.a=a;
 8     }
 9     public static void main(String[] args) {
10         Lianxi[] a=new Lianxi[10];
11 
12         for(int i=0;i<10;i++) {
13             a[i].set(x.nextInt());
14         }
15     }
16 }

纠错

 1 //对其进行初始化
 2 public static void main(String[] args) {
 3         Lianxi[] a=new Lianxi[10];
 4         for(int i=0;i<10;i++) {
 5             a[i]=new Lianxi();
 6         }
 7         for(int i=0;i<10;i++) {
 8             a[i].set(x.nextInt());
 9         }
10     }

2、ClassCastException - 类型强制转换异常。

Animal a1 = new Dog();  // 1
  Animal a2 = new Cat();   // 2
 
  Dog d1 = (Dog)a1;  // 3
  Dog d2 = (Dog)a2;  // 4
第3行代码和第4行代码基本相同,从字面意思看都是把动物(Animal)强制转换为狗(Dog),但是第4行代码将产生java.lang.ClassCastException。 原因是你要把一个猫(a2这只动物是猫)转换成狗,而第3行中是把狗转换成狗,所以可以。   从上面的例子看,java.lang.ClassCastException是进行强制类型转换的时候产生的异常, 强制类型转换的 前提是 父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生java.lang.ClassCastException异常。   就是上面a1和a2都是动物,但是a1这只动物是一只狗,而a2这只动物是猫,所以要把a1转换成狗可以,因为a1本身就是狗,而a2是一只猫,所以要转换成狗就出错了。 解决: 如果你知道要访问的对象的具体类型,直接转换成该类型即可。即对于上面的例子而言,假如我知道我要访问的对象的具体类型为猫类,那么我就 Cat c = new Cat(); 通过new出来的对象c来调用它的方法。但是呢,一般我们无法确定要访问的对象的具体类型。 如果不能确定类型可以通过下面的两种方式进行处理(假设对象为o):   1、通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,即System.out.println(s.getClass().getName()); 然后根据类型进行进行具体的处理。   2、通过if(o instanceof 类型)的语句来判断o的类型是什么。、   3、IllegalArgumentException - 传递非法参数异常。 抛出的异常表明向方法传递了一个不合法或不正确的参数。
 1 public class ThreadPriorityDemo {
 2     public static void main(String[] args) {
 3 
 4         ThreadPriority tp1 = new ThreadPriority();
 5         ThreadPriority tp2 = new ThreadPriority();
 6         ThreadPriority tp3 = new ThreadPriority();
 7 
 8         tp1.setName("奥拉夫");
 9         tp2.setName("挖掘机");
10         tp3.setName("德邦总管");
11 
12         //获取默认优先级
13         //System.out.println(tp1.getPriority());//5
14         //System.out.println(tp2.getPriority());//5
15         //System.out.println(tp3.getPriority());//5
16 
17         //设置优先值
18         //IllegalArgumentException:非法参数异常
19         tp1.setPriority(1000);
20 
21         //通过查看API设置正确的优先级
22         // tp1.setPriority(1);
23         // tp3.setPriority(10);
24 
25         //启动线程
26         //  tp1.start();
27         //  tp2.start();
28         //  tp3.start();
29     }
30 }

解决:要么更换jdk,要么重新下载符合jdk的springjar包

4、ArithmeticException - 算术运算异常

1 public static void main(String[] args) {
2   // 整数0做了分母,报算术运算异常
3   System.out.println(1 / 0);
4 }

解决:检查代码,修改错误运算式。

5、ArrayStoreException - 向数组中存放与声明类型不兼容对象异常

 1 public ArrayList(Collection<? extends E> c) {
 2     elementData = c.toArray();
 3     if ((size = elementData.length) != 0) {
 4         // c.toArray might (incorrectly) not return Object[] (see 6260652)
 5         if (elementData.getClass() != Object[].class)
 6             elementData = Arrays.copyOf(elementData, size, Object[].class);
 7     } else {
 8         // replace with empty array.
 9         this.elementData = EMPTY_ELEMENTDATA;
10     }
11 }

解决:将String对象放入Object变量中。

6、IndexOutOfBoundsException - 下标越界异常

解决:重新定义循环,修改代码,添加限制条件

7、NegativeArraySizeException - 创建一个大小为负数的数组错误异常

java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.NegativeArraySizeException

如果应用程序试图创建大小为负的数组,则抛出该异常。


8、NumberFormatException - 数字格式异常

1 public static void main(String[] args) {
2   // 将字符串“it”转换为Integer类型的,当然会报数字格式异常啦
3   System.out.println(Integer.parseInt("it"));
4 }

解决:在输出时传对参数一般没有问题。

9、SecurityException - 安全异常

这是由ASP.NET安全性引起的异常,有可能的原因是部署 服务器上的machine.config或web.config中配置的 安全策略被修改过

解决:我一般的解决思路是重新配置服务器

10、UnsupportedOperationException - 不支持的操作异常

public class ListTest {
public static void main(String[] args) {
String[] array = {"1","2","3","4","5"};
List<String> list = Arrays.asList(array);
list.add("6");
}
}

调用Arrays.asList()生产的List的add、remove方法时报异常,这是由Arrays.asList() 返回的市Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新,所以会抛出异常。

解决:

1 public class ListTest {
2     public static void main(String[] args) {
3         String[] array = {"1","2","3","4","5"};
4         List<String> list = Arrays.asList(array);
5         List arrList = new ArrayList(list);
6         arrList.add("6");
7     }
8 }

11、

java.lang.AbstractMethodError

抽象方法错误。当应用试图调用抽象方法时抛出。

12、

ava.lang.AssertionError

断言错。用来指示一个断言失败的情况。

13、

java.lang.ClassCircularityError

类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。

14、

java.lang.ClassFormatError

类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。

15、

java.lang.Error

错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。

16、

java.lang.ExceptionInInitializerError

初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。

17、

java.lang.IllegalAccessError

违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。

18、

java.lang.IncompatibleClassChangeError

不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。

19、

java.lang.InstantiationError

实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

20、

java.lang.InternalError

内部错误。用于指示Java虚拟机发生了内部错误。

21、

java.lang.LinkageError

链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。

22、

java.lang.NoClassDefFoundError

未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。

23、

java.lang.NoSuchFieldError

域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。

目前只找到了这些,后续会继续补充。

这篇关于Java学习--常见异常情况的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!