2022.1.7Java基础

本文介绍了Java中的异常处理,包括RuntimeException和CheckedException的区别,以及如何通过try-catch-finally、异常抛出和try-with-resource来管理异常。同时,展示了自定义包装类的基本实现,并讨论了字符串相关类如String、StringBuilder和StringBuffer的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 碰到错误Error了,不需要我们处理,系统已经处于不可恢复的崩溃状态了,重启程序就完事了

异常

异常有两类:

一种RuntimeException        运行时异常,编译能过,运行的时候报错了,需要增加逻辑处理来处理异常

一种是CheckedExciption      已检查异常,编译时异常,

碰到异常就两种处理方式,一种是自己处理,第二种是抛出异常,让上级调用者处理

异常处理方式之一,捕获异常

注意遇到异常的时候,如果有父子关系,要把子类异常放到前面,父类异常放后面,不然执行不到子类异常

语句2出现问题后,语句3和他以后的try内代码都不会执行了

package com.demo;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test02 {
    public static void main(String[] args) {
        FileReader reader = null;
        try {
            reader = new FileReader("D:\\Users\\JavaWebWork\\javaSE\\exception\\src\\test.txt");
            char c = (char)reader.read();
            char c2= (char)reader.read();
            char c3= (char)reader.read();
            char c4= (char)reader.read();
            System.out.println(""+c+c2+c3+c4);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

文件中的内容有3个字符,执行第四次read()的时候,也会正常读取,但读取的内容是“□”?。。。

异常处理方式之一,抛出异常

package com.demo;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Test03 {
    public static void main(String[] args) throws IOException {
        FileReader reader = null;
        reader = new FileReader("D:\\Users\\JavaWebWork\\javaSE\\exception\\src\\test.txt");
        char c = (char)reader.read();
        char c2= (char)reader.read();
        char c3= (char)reader.read();
        char c4= (char)reader.read();
        System.out.println(""+c+c2+c3+c4);
        reader.close();
    }
}

main方法中出现的异常全部抛出,抛给虚拟机JVM

异常处理方式之一,使用try-with-resource

package com.demo;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

//使用try-with-resource
public class Test04 {
    public static void main(String[] args) {
        try(FileReader reader = new FileReader("D:\\Users\\JavaWebWork\\javaSE\\exception\\src\\test.txt");){
            char c = (char)reader.read();
            char c2= (char)reader.read();
            char c3= (char)reader.read();
            System.out.println(""+c+c2+c3);
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这种方式就是让程序员简便,本质和try catch一样,只不过自己不用写finally代码块了

IDEA-Debug的用法

 基本常用类介绍

包装类

 

 

 这种情况会出异常;i赋值null,j在进行拆箱的时候会报空指针异常

自动装箱时,[-128,127]之间的数有缓存!

练习:自定义一个包装类

package com.demo;

import java.util.Arrays;

//自定义一个简单的包装类(仅限于练习)
public class MyIntger {
    private final int value;

    private static MyIntger[] cache; //缓存【-128,127】之间的数字
    private static final int LOW =-128;
    private static final int HIGH=127;
    static {
        cache=new MyIntger[HIGH-LOW+1];
        for(int i = LOW;i<=HIGH;i++){
            cache[i-LOW]=new MyIntger(i);
        }
        System.out.println(Arrays.toString(cache));
    }

    public MyIntger(int value) {
        this.value = value;
    }

    public static MyIntger valueOf(int value){
        if(value>=LOW&&value<=HIGH){
            return cache[value-LOW];
        }
        return new MyIntger(value);
    }

    public int intValue(){
        return value;
    }

    public static void main(String[] args) {
        MyIntger a = new MyIntger(10);
        MyIntger b = MyIntger.valueOf(100);
        MyIntger b2=MyIntger.valueOf(100);
        MyIntger b3=MyIntger.valueOf(1000);
        MyIntger b4=MyIntger.valueOf(1000);

        System.out.println(b==b2);
        System.out.println(b3==b4);
        int c = b.intValue();
    }

    @Override
    public String toString() {
        return value+"";
    }
}

字符串相关类

String类代表不可变的字符序列

StringBuilder类和StringBuffer类代表可变字符序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值