3.3补

3.3 java基础总结①异常②自定义异常

①异常②自定义异常

一、Java中问题概述
一般来说有个2/8原则,一个程序员80% 的精力在处理20%可能发生异常的代码
Java中问题分为错误(Error)和异常(Exception)

错误:不能用代码解决的问题,往往是环境或者硬件的问题
异常:可通过修改代码或者预处理来解决的不正确情况,称为异常

异常分为编译期异常和运行时异常,如果抛编译异常,语法上调用者必须处理或往上抛;抛运行时异常,调用者可不往上抛

Java里边结束的3中方式:
①正常执行完
②return返回
③发生异常,没有处理,强制结束
都是返回方法的调用处

处理异常的方式:
①捕获异常,不让它沿调用栈继续抛出
②捕获,并继续向下抛出
③不捕获,导致方法从调用栈中弹出

二、捕获异常 try catch finally

try{
try块(尝试)
}catch(Exception Type){
catch块(捕捉)
}finally{
finally块(总会执行)
}

try块如果发生异常,抛出异常,跳到对应的catch块,执行问catch块后跳出,(不会再执行匹配后边的catch)。最后加Exception,防止有未捕获到的异常。
Exception要写在最后,catch有顺序,有继承关系的,子类在前,父类在后。
try后边可以接多个catch,复杂代码中多种异常处理可以提升用户体验。

finally块总会执行,即使有break,return,都会执行完finally再return,代码级别能关闭finally的只有System.exit();

所以这里一般用作清理一些资源,比如流的关闭,链接的关闭

catch和finally必须要配套try,不能单独出现,可以有
try catch,catch
try finally
try catch finally

三、抛异常 throw

throw Exception 方法声地方,后边跟抛出的异常类型(语句)
throws 后边可接多种异常类型,子类抛出的异常不能比父类多(不是指个数,而是范围)
方法声明完整格式:访问修饰符、可选修饰符、返回类型、方法名(形参列表) throws 异常类型1,2,3

Throwbale这里有两个方法比较重要:
-getMessage(得到异常信息,不是所有的异常都有异常信息,这里的信息比如除数为0) 
-printStackTrace(打印堆栈信息)

throw抛异常(主动抛)非常有用,
抛编译异常,方法里必须处理(trycatch或者往上抛),如果往上抛,调用者也必须trycatch或者往上抛
抛运行异常,可以不用往上抛,或者trycatch

四、自定义异常:
①创建一个类继承Exception
②添加构造方法和普通方法
构造方法里主要是各种异常类型,普通方法里可以写日志等等
③在一个方法中抛出异常
④在另一个方法中捕获异常并处理

好处:不用每一处都处理,直接往上抛
遇到异常统统往上抛,可以把所有的异常全部抛到表现层,在表现层进行处理,并调用自定义异常的写日志等方法存起来

public class LovoException extends Exception{

public LovoException() {
}

public LovoException(Exception e){
//JVM产生的异常,使用多
super(e);
}

public LovoException(String message){
//根据业务异常,构造,使用较少
super(message);
}

public void writeLog (){
//各种日志文件
this.getStackTrace();
System.out.println(this.getMessage());
}
}

public void count() throws Exception {

int a = new Scanner(System.in).nextInt();
try {
int b = 3 / a;
System.out.println(3/a);
} catch (Exception e) {
// throw new LovoException(e.getMessage() + "除数不能是0");
throw new LovoException(e);
}
}

时间: 2024-10-05 03:21:09

3.3补的相关文章

昨天没写今天补上

恩因为今天要考试所以昨天晚上在复习,没来得及写,现在补上. 昨天依旧是循环,被虐了整整一天! 到现在仍然不知道for里的循环体怎么写.... 感到人生无望...(不想说什么了粘题吧) p1032;#include〈iostream〉 using namespace std; int main () { long long a,b=0,c,d,sum=0; cin>>a; while (a>0) { d=a/10; sum++; for(int i=1;i<=sum;i++) { c

python tab补全

让python的交互解释器支持tab补全.提示功能 方法1: 一.执行python脚本 1.创建一个python脚本,以.py结尾: 脚本如下: import sys import readline import rlcompleter import atexit import os readline.parse_and_bind('tab:complete') histfile =os.path.join(os.environ['HOME'], '.pythonhistory') try: r

补零与离散傅里叶变换的分辨率

离散傅里叶变换(DFT)的输入是一组离散的值,输出同样是一组离散的值.在输入信号而言,相邻两个采样点的间隔为采样时间Ts.在输出信号而言,相邻两个采样点的间隔为频率分辨率fs/N,其中fs为采样频率,其大小等于1/Ts,N为输入信号的采样点数.这也就是说,DFT的频域分辨率不仅与采样频率有关,也与信号的采样点数有关.那么,如果保持输入信号长度不变,但却对输入信号进行补零,增加DFT的点数,此时的分辨率是变还是不变? 答案是此时分辨率不变.从时域来看,假定要把频率相差很小的两个信号区分开来,直观上

Elasticsearch in java 范例:自动补齐功能(completion suggester)

ES(elasticsearch)的suggester共有四类(term suggester, phrase suggester, completion suggester, context suggester), 其中completion suggester作为搜索框中的自动补齐功能,尤为常用. 本文将用java语言实现一个简单例子来叙述如何使用completion suggester. 例子的主要功能是为股票的名称和编号建立自动补齐功能. 实现一个完整的completion suggeste

linux下的python如何使用tab键补全

一.vim下的补全: pydiction插件 实现功能: 简单python关键词补全 python 函数补全带括号 python 模块补全 python 模块内函数,变量补全 安装步骤: cd ~ wget https://github.com/rkulla/pydiction/archive/master.zip unzip master.zip mkdir -pv ~/.vim/tools/pydiction cp -r pydiction-master/after ~/.vim cp py

code M资格赛 补题

A: 音乐研究 时间限制:1秒 空间限制:32768K 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一个长度和第一段音频相等且是连续的子序列,使得它们的 difference 最小.两段等长音频的 difference 定义为:difference = SUM(a[i] - b[i])2 (1 ≤ i ≤ n),其中SUM()表示求和 其中 n 表示序列

VIM的自动补全

自动补全可以很好的提高输入的效率: 触发自动补全的方法总结: 可供弹出式菜单的使用的命令: 其它再补充:

Linux Vim中自动补全Python插件:Pydiction

Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. python_pydiction.vim  -- Vim plugin that autocompletes Python code. complete-dict         -- Dictionary file of Python keywords, modules, etc. pydiction.p

TensorFlow实现基于深度学习的图像补全

目录 ■ 简介 ■ 第一步:将图像理解为一个概率分布的样本 你是怎样补全缺失信息的呢? 但是怎样着手统计呢?这些都是图像啊. 那么我们怎样补全图像?  ■ 第二步:快速生成假图像 在未知概率分布情况下,学习生成新样本 [ML-Heavy] 生成对抗网络(Generative Adversarial Net, GAN) 的架构 使用G(z)生成伪图像 [ML-Heavy] 训练DCGAN 现有的GAN和DCGAN实现 [ML-Heavy] 在Tensorflow上构建DCGANs 在图片集上跑DC

Ubuntu 16.04.2 LTS 安装python vim自动补全工具pydiction

Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. 下载Pydiction mkdir ~/.vim mkidr ~/.vim/tools cd ~/.vim/tools #可以先下载好放到Ubuntu系统中 git clone https://github.com/rkulla/pydiction.git 配置Pydiction #- UNIX/LINUX/OSX: Put python_pydiction.vim in ~/.vim/after