java基础知识十二

第十二章

  • 异常

异常(Exception):又称为例外,是程序在运行过程中发生的非正常事件,其发生会影响程序的正常执行。Exception是程序级错误,可由程序本身处理;Error是系统级错误,程序可不用处理。
Java异常类都必须继承Throwable类或其子类。用户通过继承自定义异常。
常见异常:除数为零、负数开方、数组越界、I/O异常。

抛出的异常由catch捕获,未被捕获的异常逐层传播直到main。如果main也没有处理该异常,则操作系统会终止main执行。

处理异常时,也可以抛出新异常,也可以转发现有异常:链式异常。
抛出而未捕获(未处理)异常的函数,必须用throws声明其未处理的这些异常。

//Main.Java主程序
package  testException;
import java.lang.System;
import java.lang.ArithmeticException;
public  class  Main {
    static  int  div(int x, int y) throws  ArithmeticException{//处理了但又抛出了,故需声明
        try{ return x/y; }             //若y为0,系统自动产生除数为0异常
        catch(ArithmeticException ae){
            System.out.print(ae.toString( ));
            throw ae;                   //将逐层往上传递直到操作系统捕获为止
        }
    }
    public  static  void  main(String[ ] args) {
        div(5, 0);                       //产生的异常main也没有处理,所以会导致main被中止执行
    }
}
  • 异常捕获顺序

无论何时,throw以后的语句都不会执行。
无论同层catch是否捕获、处理本层的异常(即使抛出或转发异常),同层的finally总是都会执行。
一个catch捕获到异常后,同层catch都不会执行,然后执行同层finally。
一个同层try-catch-finally结束,若无异常则执行其后语句,若有异常则跳过其后语句,进入上层catch流程。

//Main.Java主程序
package  testMoreException;
import java.lang.System;
import java.lang.ArithmeticException;
public  class  Main {
    static int div(int x, int y) {  //各种Exception都被捕获,函数无须声明异常
        int   r=0;
        try{  if(y==0) throw  new ArithmeticException( );      r=x/y; }   //通过new产生异常对象,程序自己抛出
        catch(ArithmeticException  ae){   System.out.print(ae.toString( ));   }   //捕获除数为0异常
        catch(Exception  ae){     System.out.print(ae.toString( ));   }    //捕获各种Exception:若第个1catch执行则无机会
        finally{  r=-1; }      //无论是否有异常,r=-1
        return  r;               //若有Error类型的异常,则不会执行该语句。ERROR不是Exception的子类
    }
    public  static  void  main(String[ ] args) {
        try{   div(5, 0);   } //调用div(5, 0)后,div函数的执行轨迹已用红色标出
        catch(Throwable  ae){     System.out.print(ae.toString( ));   }   //任何异常都被捕获,包括Error类型异常
    }
}
  • 自定义异常类

自定义异常类必须继承Throwable或其子类。
自定义异常类通常继承Exception及其子类,因为Exception是程序可处理的类。
自定义异常类会在父类的基础上增加成员变量,因此,通常需要覆盖toString函数(经常被打印)。未增加新成员就没有必要自定义异常类。

import  java.lang.Exception;
public class beyondMark extends Exception{
    int value, mark;
    public beyondMark(int v, int m){ value=v; mark=m; }
    public toString( ){
        return String.valueOf(value)+” beyonds “+String.valueOf(mark);
    }
}
//用例:catch(beyondMark b){ System.out.print(b.toString( )); }
  • 文本I/O

    • 类File: 路径管理,文件读写状态、修改获取日期等;并非读写文件。

file类的方法如下图:

【此处有图】

    • 类Scanner用于读取文件:File或InputStream的读入。可按串、字节、整数、双精度、或整行等不同要求读入。

【此处有图】

    • 类PrinterWriter用于输出到文件: File或InputStream的输出。 可按串、字节、整数、双精度、或整行等不同要求输出

【此处有图】

package  filecopy;
import java.lang.System;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Scanner;
public class Main {     //一个简单的非二进制文件拷贝程序
    public static void main(String[ ] args) {  //参数不含程序名
        if(args.length!=2){
            System.out.println("Usage: Java  copy  <sourceFile>   <tagetFile>");
            System.exit(1);
        };
        File sF=new File(args[0]);                     //处理源文件
        if(!sF.exists( )){
            System.out.println(“Source File "+args[0]+ "does not exist!");
            System.exit(2);
        };        File tF=new File(args[1]);      //处理目标文件        if(tF.exists( )){            System.out.println("Target File "+args[0]+ "already exist");            System.exit(3);        };        try{            Scanner input=new Scanner(sF);            PrintWriter output=new PrintWriter(tF);            while(input.hasNext( )){                String s=input.nextLine( );  //每次读入一行                output.println(s);            }            input.close( );       output.close( );        }        catch(IOException ioe){       System.out.println(ioe.toString( ));      }    }}

在windows下,目录分隔符是反斜杠( \ ),但是在java中,反斜杠是一个特殊的字符,应写成\\的形式。

原文地址:https://www.cnblogs.com/jing-yu/p/9060717.html

时间: 2024-08-07 16:42:27

java基础知识十二的相关文章

Scanner、String(java基础知识十二)

1.Scanner的概述和方法介绍 * A:Scanner的概述 * 是一个从键盘输入的类,有final修饰,不能被子类继承 * Scanner sc = new Scanner(System.in); * String str = sc.nextLine(); * B:Scanner的构造方法原理 * Scanner(InputStream source) * System类下有一个静态的字段: * public static final InputStream in; 标准的输入流,对应着键

java基础知识(二)

1.关于static关键字总结: 1.不能在static修饰的方法中引用this变量,只能引用一些静态变量或方法,或new新的对象(可以定义局部变量). 简言之,静态方法或块中,只能引用静态的方法或变量. 2.类中的成员变量(static修饰)有缺省值,而类的定义的方法中的局部变量没有缺省值. 3.在类的构造器中,可以引用任何的静态或非静态的变量和方法,可以在非static方法中调用static方法. 4.static{}块中的代码在类装载中仅执行一次. 5.在7-7,A staticmetho

java基础知识(二)-----多态和构造函数

一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍,我一遍都没看完.现在每次都写写自己的最新指导的知识点吧.努力!!!刚刚在一个群上说了下这,别人给我说了句话“你要提醒自己,所有的技术别人能学会的你迟早能学会,没什么大不了的”.记住 二:内容 (1):关于构造方法的问题 我们每次写一个类中,都会说在类中加一个无参数的构造方法,我时常在想,这个无参数的构造函数有

java基础(十二章)

一.变量的作用域(有效的使用范围) 1.变量有2种 1.1成员变量(属性) 声明在类的里面,方法的外面 1.2 局部变量 声明在方法里面或for循环结构中 2.调用时的注意事项(初始值不同.作用域不同) 2.1 成员变量,有默认值 在当前类直接通过成员变量名调用:在其他类中,通过该类的对象名.属性(成员变量)名调用:成员变量名称在同一个类中是唯一的. 2.2 局部变量,没有默认值,必须先赋值再使用 局部变量,只能在当前的方法中使用,其他方法和其他类不能调用:在同一个方法中名称是唯一的,但多个方法

Java基础(十二)IO输入输出

一.IO 概述 1.IO 概念 IO:I 代表 Input 输入:O 代表 Output 输出. Java 中 IO 是以流为基础进行输入输出,所有的数据被串行化(保存)写入输出流,或者从输入流读入. 注:数据串行化指把对象的状态以特定的形式(比如 byte[])保存到流,通过流的方式写入. 2.IO 的作用 1.文本文件,通过特定方法能够把数据写到文件,也能够读取出文件中的内容. 2.把信息保存到磁盘文件中. 3.Java 操作文件 1.创建 File 对象方式 测试创建文件的三种方式: 1

ASP.NET Core 2.2 基础知识(十二) 发送 HTTP 请求

可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例. 这能带来以下好处: 提供一个中心位置,用于命名和配置逻辑 HttpClient 实例. 例如,可以注册 github 客户端,并将它配置为访问 GitHub. 可以注册一个默认客户端用于其他用途. 通过委托 HttpClient 中的处理程序整理出站中间件的概念,并提供适用于基于 Polly 的中间件的扩展来利用概念. 管理基础 HttpClientMessageHandler 实例的池和

包、修饰符、内部类、匿名内部类(java基础知识十)

1.package关键字的概述及作用 * A:为什么要有包     * 将字节码(.class)进行分类存放  * B:包的概述     *   * C:包的作用     * 包名要定义在第一行,     * 包名.*这个包下所有的类都可见     * 具体的类比较好,能提高效率 2.包的定义及注意事项 * A:定义包的格式 * package 包名; * 多级包用.分开即可* B:定义包的注意事项 * A:package语句必须是程序的第一条可执行的代码 * B:package语句在一个jav

Java基础语法&lt;十二&gt; 泛型程序设计

1 意义 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用. 常见应用 : ArrayList 2 K T V E ? object等的含义 类型变量使用大写形式 E – Element (在集合中使用,因为集合中存放的是元素) T – Type(Java 类)(需要时还可以用临近的字母U和S)表示任意类型  S.U.V – 2nd.3rd.4th types K – Key(键) V – Value(值) N – Number(数值类型) ? – 表示不确定的java类型(无限制通配

集合框架、泛型、迭代(java基础知识十六)

1.ArrayList存储自定义对象并遍历 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException.* ArrayList存储自定义对象并遍历 ArrayList<Person> list = new ArrayList<>(); list.