异常、IO

1:异常(理解)
    (1)程序出现的不正常的情况。
    (2)异常的体系
        Throwable
            |--Error    严重问题,我们不处理。
            |--Exception
                |--RuntimeException    运行期异常,我们需要修正代码
                |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
    (3)异常的处理:
        A:JVM的默认处理
            把异常的名称,原因,位置等信息输出在控制台,但是呢程序不能继续执行了。
        B:自己处理
            a:try...catch...finally
                自己编写处理代码,后面的程序可以继续执行
            b:throws
                把自己处理不了的,在方法上声明,告诉调用者,这里有问题
    (4)面试题
        A:编译期异常和运行期异常的区别?
            编译期异常 必须要处理的,否则编译不通过
            运行期异常 可以不处理,也可以处理
        B:throw和throws是的区别
            throw:
                在方法体中,后面跟的是异常对象名,并且只能是一个
                throw抛出的是一个异常对象,说明这里肯定有一个异常产生了
            throws:
                在方法声明上,后面跟的是异常的类名,可以是多个
                throws是声明方法有异常,是一种可能性,这个异常并不一定会产生
    (5)finally关键字及其面试题
        A:finally用于释放资源,它的代码永远会执行。特殊情况:在执行到finally之前jvm退出了
        B:面试题
            a:final,finally,finalize的区别?
            b:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
                会,前。

                实际上在中间。这个上课我们讲过
        C:异常处理的变形
            try...catch...finally
            try...catch...
            try...catch...catch...
            try...catch...catch...fianlly
            try...finally
    (6)自定义异常
        继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可
    (7)异常的注意实现
        A:父的方法有异常抛出,子的重写方法在抛出异常的时候必须要小于等于父的异常
        B:父的方法没有异常抛出,子的重写方法不能有异常抛出
        C:父的方法抛出多个异常,子的重写方法必须比父少或者小
 JDK7出现了一个新的异常处理方案:
         try{

         }catch(异常名1 | 异常名2 | ...  变量 ) {
              ...
         }

          注意:这个方法虽然简洁,但是也不够好。
              A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
             B:多个异常间必须是平级关系。

  JDK7增加的新处理方式。

  尽量不要在main方法上抛出异常。

  throw抛出的是异常对象,不是异常名。

class ExceptionTest extends Throwable {
    public String getLocalizedMessage() {
        return "除数不能为0";
    }

}

public class ExceptionDemo {

    public static void main(String[] args) throws ExceptionTest {
        try {
            System.out.println(10 / 0);
        } catch (ArithmeticException a) {
            // 抛出异常对象
            throw new ExceptionTest();
        }

    }

}

Throws和Throw的区别

 * 格式:
 *         throws 异常类名
 *         注意:这个格式必须跟在方法的括号后面。
 *
 * 注意:
 *         尽量不要在main方法上抛出异常。
 *         但是我讲课为了方便我就这样做了。
 *
 * 小结:
 *         编译期异常抛出,将来调用者必须处理。
 *         运行期异常抛出,将来调用可以不用处理。

如何处理异常

  原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
  区别:
    后续程序需要继续运行就try
    后续程序不需要继续运行就throws

  catch语句中有return语句,finally语句还是会被执行。因为虚拟机没有退出,finally就会执行。在return语句之前执行,return语句之后不能有东西的。

时间: 2024-11-06 07:18:00

异常、IO的相关文章

JAVA中IO和异常处理练习

1.SystemI\O练习:1)通过键盘输入若干字符,并通过显示器输出:2)定义一个静态方法validOrNot()用于对输入的字符进行合法性校验,若包含非英文字符,则抛出IllegalStringException异常:3)通过Try/Catch异常处理机制,处理异常:若包含非英文字符,给予相应提示:若只包含英文字符,则统计字符数量,并输出. 1 package iooutput; 2 3 import java.io.BufferedReader; 4 import java.io.IOEx

pythonasyncore异步IO由python标准库学习

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import asynchat,asyncore,logging,socket #asyncore异步IO #作用:异常IO处理 #功能是处理IO对象,如套接字,从而能异步管理这些对象(而不是多个线程或者进程),包括类有dispatcher,这是一个套接字的包装器,提供了一些HOOK(钩子),从主循环函数loo()调用时可以处理连接以及读写事件 #服务器 #第一个类

异常处理----使用 try…catch…finally 处理异常

使用 try-catch-finally 处理异常 异常处理是通过try-catch-finally语句实现的. try { ...... //可能产生异常的代码 } catch( ExceptionName1 e ) { ...... //当产生ExceptionName1型异常时的处置措施 } catch( ExceptionName2 e ) { ...... //当产生ExceptionName2型异常时的处置措施 } [finally { ...... //无条件执行的语句 } ] 异

Java学习IO流

IO流概述 之前的程序,数据都是在内存中,一旦程序运行结束,数据就没有了.IO流的出现就是把运算完的数据都保存下来,下次运行程序时还能使用.把数据持久化的存储,就是把内存中的数据存储到内存以外的其他持久化的设备(光盘.硬盘.U盘等)上. 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为IO操作. File类 File类有两个静态成员变量和三个构造方法 1.pa

阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_4_字节输出流写入数据到文件

数据由内存写入到硬盘中 构造函数传的路径是一个相对路径.有异常需要捕获异常 释放资源 这三个方法,都有异常 IO异常是父类,所以这里只需要抛出IO异常就可以了. 运行程序.目录内多了个a.txt文件 大小是一个字节 原文地址:https://www.cnblogs.com/wangjunwei/p/11267047.html

IO并发

IO分类 IO分类:阻塞IO,非阻塞IO,IO多路复用,异步IO等 阻塞IO 定义:在执行IO操作时如果执行条件不满足则阻塞.阻塞IO是IO的默认形态. 效率:阻塞IO是效率很低的一种IO.但是由于逻辑简单所以是默认IO行为. 阻塞情况: 因为某种执行条件没有满足造成的函数阻塞 如:accept        input        recv等 处理IO的时间较长产生的阻塞状态 如:网络传输,大文件读写等 非阻塞IO 定义:通过修改IO属性行为,使原本阻塞的IO变为非阻塞的状态 设置套接字为非

Python异常处理

1.异常概述 (1)异常:Python用异常对象来表示异常情况,遇到错误后,会引发异常,如果异常对象未被处理捕捉,程序就会用所谓的回溯终止执行 (2)异常处理:程序出现bug时不将错误信息显示给用户,而是现实一个提示的页面 2.常见python 异常: (1)AttributeError:试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x (2)IOError:输入/输出异常:基本上是无法打开文件 (3)ImportError:无法引入模块或包:基本上是路径问题或名称错误 (4)I

网站后端_Flask-第三方库.利用Flask-Socketio扩展构建实时流应用?

模块简介: 说明: 此模块主要用于构建支持实时,双向基于事件的通信,将Websocket和Polling等其它实时通信方式封装成了通用接口,从而可在各个平台/浏览器/设备上稳定工作. 快速安装: pip install flask-socketio <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 应用场景: 1. 实时分析, 服务端将数据推送到客户端,客户端可以为实时计数器,图表,

复习java基础第二天(异常处理)

一.常见的异常类型: public class TestException { public static void main(String[] args) { int i = 10; //数学异常: java.lang.ArithmeticException int j = i / 0; System.out.println(j); int [] scores = new int[]{1, 2, 4, 5}; //数组下标越界异常: java.lang.ArrayIndexOutOfBound

java自学之路-day16

JAVA16 IO流 转换流 引入 l  中文系统默认编码表GBK l  FileWriter的构造方法假定默认编码GBK l  但是一些文本文件有可能是其他编码方式 l  所以引入转换流 可以对编码表进行设定 l  对之后开发互联网程序很重要 概述 l  字符流的一种 l  字符与字节的桥梁 l  继承Writer类 OutputStreamWriter l  Java.io. OutputStreamWriter l  继承Writer类 l  字符输出流 向文本文件写入数据 l  字符流转