java中的常见异常1 -- 新手上路,减速慢行

java中的常见异常1 -- 新手上路,减速慢行,第1张

java中的常见异常1 -- 新手上路,减速慢行

Throwable: 异常的顶级父类
            ----Error:错误,程序无法处理
            ----Exception:异常,可通过编码修复
                        ----编码异常:未运行已经报错
                        ----运行异常:可编译,运行报错

1.  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at cn.tedu.basic.TestArray.main(TestArray.java:11)
    ------数组下标溢出异常
    
2.    There is no default constructor available in 包名 
    ------没有可用的默认构造函数
    ---解释:父类的含参构造覆盖了默认的无参构造,子类默认不显示的super()
    不能调用父类对应参数的构造方法,
    -解决办法:子类添加super(参数)
    
3.    ArithmeticException
    ----算术异常
    --例子:10/0 :0不能作为除数
    
4.    InputMismatchException
    ----输入不匹配异常
    --解释:输入的数据类型与自己预先定义的数据类型不匹配
    
5.    StackOverflowError
    ----堆栈溢出错误
    --解释:内部类和外部类一直互相调用占据了所有内存
            一直在创建内部类或外部类对象
例:Outer o = new Outer();o.eat();---Inner i = new Inner();i.eat2();---Inner i = new Inner();
public class TestInner {
    public static void main(String[] args) {
        //Outer.Inner oi =new Outer().new Inner();
        Outer o = new Outer();
        o.eat();
        //oi.eat2();
    }
}
class Outer{
    private String name ="小二";
            int a =10;
    public void eat(){
        Inner i = new Inner();
        i.eat2();
        System.out.println(i.sum);
        System.out.println("外部类eat");
        System.out.println(i.toString());
        try {
            finalize();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
    public static void good(){

        System.out.println("外部类静态good()");

    }

    class Inner{
        Inner i = new Inner();
            //private double S =10.1;
            int sum =10;
        public void eat2(){
            System.out.println(i.toString());
            //Outer.good();
            System.out.println(name);
            System.out.println(a);
            System.out.println("内部类eat2()");
        }

    }
}


6.    NullPointExcept -- 空指针异常
    ----调用空对象的实例方法。
        访问或修改字段或空对象。
        以null的长度作为数组。
        访问或修改null插槽,就好像它是一个数组一样。
        将null视为Throwable值。
        --解决办法:可以通过适当地初始化给定对象(该对象将设置该对象的实例)来解决或解决。 因此,该对象将具有一个实例,并且不会为null,这是Null Pointer Exception的原因。
                    在捕获异常外面加一个非空判断
        --例:FileReader in = null;//定义的变量为空值,所以在下面需要赋值,否则后面使用对象in时一直为空
              new FileReader("D:\ready\1.txt");          
              
              
7.    FileNotFoundException -- 文件无法找到
    ----文件位置更换
        文件名、目录名或卷标语法不正确。

8.    InvalidClassException -- 无效类异常
    ----解释:stream classdesc serialVersionUID = -3193364654654535741,  自动生成的默认UID
              local class serialVersionUID = 3102686376622831557, 改动代码后生成的UID
        --解决办法:使前后UID保持一致:序列化与反序列化同时或者按顺序一个一个执行,
                    再或者手动将序列化版本号写出固定值 //private static final long serialVersionUID = 1L;
                    
9.    NotSerializableException -- 不可序列化异常
    ----要序列化对象所在的类并没有实现序列化接口,即没有implements父接口
        --解决方案:实现序列化接口
        
10.    Error:(27, 25) java: 未报告的异常错误java.lang.InterruptedException; 必须对其进行捕获或声明以便抛出
    ----中断异常:当阻塞方法收到中断请求的时候就会抛出InterruptedException异常
        --
                Thread.sleep(10);//让线程休眠10秒
例:

public class TestThread2 {
    public static void main(String[] args) {
        //创建自定义类对象
        TicketRunnable target = new TicketRunnable();
        创建自定义线程对象
        Thread t1 = new Thread(target);
        Thread t2 = new Thread(target);
        Thread t3 = new Thread(target);
        Thread t4 = new Thread(target);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

//1.创建自定义多线程类实现多线程接口
class TicketRunnable implements Runnable{
    //定义变量用来保存要收买的票数
    int tickets = 100;
    //重写run(),完成业务
    @Override
    public void run() {
        //循环卖票
        while (true){
            synchronized (TicketRunnable.class){
                if(tickets>0){
                    try {
                       
                        Thread.sleep(10);//让线程休眠10秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //打印当前正在卖票的线程名称,并且票数减一
                    System.out.println(Thread.currentThread().getName()+"="+tickets--);
                }
                //做判断,如果没票了就停止循环卖票
                if (tickets<=0)break;
            }
        }
    }
}

11.    NoSuchMethodException -- 没有这个方法异常
    ----构造方法的含参及全参,使用反射创建含参对象时,不报错但会出异常
    
12. ClassCastException -- 类抛出异常,
    ----即是类型转换错误,通常是进行强制类型转换时候出的错误
例子:a1和a2都是动物,但是a1这只动物是一只狗,而a2这只动物是猫,所以要把a1转换成狗可以,因为a1本身就是狗,而a2是一只猫,所以要转换成狗就出错
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
public class Test7 {
    public static void main(String[] args){
        Animal a1 = new Dog();//父类引用指向子类对象                                                                                                                                                                                                                                                                                                                                                
        Animal a2 = new Cat();
        Dog d1 = (Dog)a1;//强制父类引用类型转换为子类引用类型
        Dog d2 = (Dog)a2;
    }
}

13. IllegalArgumentException -- 非法参数异常
    ----传入的参数违反了一个方法要求的某些特性
    
14. MyBatisSystemException -- MyBatis 系统异常

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5685350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存