JAVA自学日记4(第四周)

一、异常处理

异常的抛出与捕捉:

程序运行出现异常时,程序将在出现异常的位置终止,不再继续执行下面的语句。也就是说,异常抛出后,如果不做任何处理,程序就会被终止。

捕捉异常:java语言的异常捕获结构由try、catch、finally三部分组成,try语句块存放的是可能出现异常的java语句,catch语句块在try语句块之后,用来激发被捕获的异常;finally语句块是异常处理解构的最后执行部分,无论try语句块中的代码如何退出,都将执行finally语句块。

try{
    //代码块
}
catch(Exceptiontype1 e){
    //对Exceptiontype1的处理
}
catch(Exceptiontype2 e){
    //对Exceptiontype2的处理
}
finally{
    //代码块
}

 例:在项目中创建Take类,在主方法中使用try-catch语句块将可能出现的一唱豫剧进行异常处理

public class Take{
    public static void main(String[] args){
            try{
                    String str="lili";
                    System.out.println(str+"年龄是:");
                    int age=Integer.parselnt("20L");
                    System.out.println("age");
               }
           catch(Exception e){
                    e.printStackTrace();
                }
            System.out.println("program over");
        }
}

上面这段代码,因为将非数字的字符转化成int整型是不行的,所以会抛出异常,并且停止。但是在try-catch语句块里,程序仍然输出最后的提示信息,没有因为异常而终止。

        完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论之前的try-catch语句块是否顺利执行完毕,都会执行finally语句。但是在以下四种特殊情况下,finally块不会被执行

        1、在finally语句块中发生了异常

        2、在前面的代码中使用了System.exit()退出了程序

        3、程序所在线程死亡

        4、关闭cpu
在方法中抛出异常

        若某个方法可能会发生异常,但不想再当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常

       例:在项目中创建shoot类,在该类中创建方法pop(),在该方法中抛出NegativeArraySizeException异常,在主方法中调用该方法,并实现异常处理,代码如下:

public class shoot{
    static void pop()throws NegativeArraySizeException{
        int[] arr=new int[-3];
    }
    public static void main(String[] args){
        try{
                pop();
            }catch(NegativeArraySizeException e){
                System.out.println("pop()方法抛出的异常");
                }
        }
}

pop()方法抛出的异常

 运行结果如上

使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。

异常的使用原则

        java异常强制用户去考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运时发生的异常并进行相应的处理。编写代码处理某个方法可能出现的异常时,可遵循以下几个原则

        1、在当前方法声明中使用try-catch语句捕获异常

        2、一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类

        3、如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。

        需要注意的是,在使用一些方法时,java会强制要求用户去抛出相应的异常。

                                                I/O流

一、File类

       文件的创建与删除

              创建一个文件对象

File file=new File("路径");

        下面看一个例子

        例:在项目中创建FileText类,在主方法中判断D盘的根目录是否存在word.txt文件,如果改文件存在则将其删除,不存在则创建该文件

import java.io.File;
public class File Test{
    public static void main(String[] args){
            File file=new File("D:\\word.txt");
            if(file.exists()){
                file.delete();
                System.out.println("文件已删除");
            }else {
                    try{
                            file.createNewFlie();
                            System.out.println("文件已创建");
                       }catch(Exception e){
                            e.printStackTrace();
                        }
            }
    }
}

例:获取文本文件的名称,长度和隐藏属性

import java.io.File;
public class File Test{
    public static void main(String[] args){
            File file=new File("D:\\word.txt");
            if(file.exists()){
                String name=file.getName();
                long length=file.length();
                boolean hidden=file.isHidden();
                System.out.println("文件名称是:"+name);
                System.out.println("文件长度是:"+length);
                System.out.println("是隐藏文件吗:"+hidden);
            }else {
                    System.out.println("文件不存在");
            }
    }
}

​

文件输入/输出流

        FileInputStream与FileOutputStream类

        直接看一个例子:向文本文件中写入内容,再读取出来

import java.io.*;

public class FileSteamDemo {
    public static void main(String[] args)
    {
        File file=new File("D:\\word.txt");
        try{
            FileOutputStream out=new FileOutputStream(file);
            byte buy[]="我有一头小毛驴,我从来也不骑。".getBytes();
            out.write(buy);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try{
            FileInputStream in =new FileInputStream(file);
            byte[] byt=new byte[1024];
            int len=in.read(byt);
            System.out.println("文件中的信息是:"+new String(byt,0,len));
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileReader和FileWriter类

        使用FileOutputStream类项文件中写入数据与使用FileIntputStream类从文件中将内容读取出来,都存在一点不足,即这两个类都只提供了对字节或字节数组的读取方法,由于汉字在文件中占有两个字节,如果使用字节流,读取不好可能出现乱码现象,此时采用字符流FileReader类或者FileWriter类即可避免这种问题。

        FileReader类顺序地读取文件,只要不关闭流,每次调用read()方法就会顺序地读取源文件中的其余内容,直到源文件的末尾或被关闭。读到末尾返回-1

        例:使用字符流读写文本文件

import java.io.*;

public class FileSteamDemo{
    public static void main(String[] args){
        File file=new File("D:\\word.txt");
        try{
            FileWriter fw=new FileWriter(file);
            String word="明月几时有,把酒问青天";
            fw.write(word);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try{
            FileReader fr =new FileReader(file);
            char ch[]=new char[1024];
            int len=fr.read(ch);
            System.out.println("文件中的信息是:"+new String(ch,0,len));
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值