JavaSE复习_7 异常
public static int f(int n){
try{
int r =n *n ;
return r ;
}
finally{
if(n ==2)
return 6;
}
}
该语句当n=2时,返回6。
△try finally语句中,finally语句中如果关闭抛出了异常,那么后抛出的异常将会把刚抛出的异常给覆盖
class XyyException extends Exception{
public XyyException(String s ){
super(s );
}
}
class HlhException extends Exception{
public HlhException(String s ){
super(s );
}
}
public class Demo { public static void main(String[] args) throws XyyException, HlhException {
f();
} public static void f() throws XyyException, HlhException {
int x =2;
try{
x= x*2;
throw new XyyException("try");
}
finally{
if(x ==4){
throw new HlhException("finally");
}
}
} }
Exception in thread "main" string.Demo.HlhException: finally
at string.Demo.Demo.f( Demo.java:26)
at string.Demo.Demo.main( Demo.java:15)
public static int f(){
int x=10;
try{
System.out.println(12/0);
return x;
} catch(Exception e) {
x=20;
return x;
}
finally {
x=30;
if(x==30)
return x;
}
}
这个代码finally会将return30,因为finally中的return会将catch中的return覆盖,而如果没有return x,则该方法返回20,因为x仅仅赋值,但是返回的此时已经确定好了值.即在finally语句在return执行后返回前执行。
import java.util.*; public class FinallyTest6
{
public static void main(String[] args) {
System.out.println(getMap().get("KEY").toString());
} public static Map<String, String> getMap() {
Map<String, String> map = new HashMap<String, String>();
map.put("KEY", "INIT"); try {
map.put("KEY", "TRY");
return map;
}
catch (Exception e) {
map.put("KEY", "CATCH");
}
finally {
map.put("KEY", "FINALLY");
map = null;
} return map;
}
}
这个代码运行结果是finally。因为在try中即返回了引用所指向的对象(即确定的是对象),随后对对象的操作都会改变返回值,但是在finally代码块的最后一句将引用指向空,对于对象不构成任何影响,原对象返回。
package io.project.one;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger; public class Demo2 {
public static void main(String[] args) {
Logger logger=Logger. getLogger("io.project.one.Demo2");
logger.setLevel(Level. FINE);
try {
FileHandler fh= new FileHandler("MyLogger.txt" );
fh.setLevel(Level. FINE);
fh.setFormatter( new MyFormatter());
logger.addHandler( fh); logger.fine( "进入main函数" );
int x =2;
int y =3;
add(x,y);
logger.exiting( "io.project.one.Demo2", "main" );
} catch (Exception e ) {
e.printStackTrace();
}
} public static void add(int x, int y) {
Logger logger=Logger. getLogger("io.project.one.Demo2");
logger.fine( "io.project.one.Demo2");
System. out.println("x+y" );
logger.fine( "io.project.one.Demo2");
} }
class MyFormatter extends Formatter{ @Override
public String format(LogRecord record ) {
return "类别:" +record .getLevel()+"....信息:"+ record.getMessage();
}
}
JavaSE复习_7 异常的更多相关文章
- javaSE复习之——线程
线程其实就是程序执行的一条路径,一个进程中可以包含多条线程,多线程并发执行可以提高程序效率,可以同使完成多项任务 多线程的应用场景 迅雷多线程一起下载 服务器同时处理多个客户请求 多线程原理(单核CP ...
- JavaSE复习(三)异常与多线程
异常 分类 编译时期异常:checked异常. 在编译时期,就会检查,如果没有处理异常,则编译失败.(如日期格式化异常) 运行时期异常:runtime异常. 在运行时期,检查异常.在编译时期,运行异常 ...
- javaSE复习总结
之前匆匆忙忙学完了java,后来又接着学习ee,然而,越是想要快一点最后反而会更慢一点.因为匆忙间 我几乎什么都没学会.在后面的学习中实在非常吃力.就把javase 的视频大部分又重新看了一遍.真的收 ...
- JavaSE复习总结之集合(Collection)
Java早期版本只给集合类库提供了很少的一组类,但是随着Java版本的升级,Java集合类库越来越充实.集合类库里面存放的,是各式各样的数据容器,我们基本都学过数据结构这门课,数据结构所讲的就是ADT ...
- JavaSE复习日记 : 算是个小前言吧
/* * Java也学了好久了,抽个时间整理了一下课堂笔记,也有些是我刚开始学会犯的一些错误.在这里浅谈一下JavaSE的基础内容,对我来说也是一种不错的复习方式. * * 那好,对于初学者来说,学习 ...
- JavaSE复习巩固
第二天:复习if语句,扫描器,switch语句,循环语句 1.if语句---流程控制语句 if之前学的语句是顺序结构 1.1 单个if的语法结构 if(条件判断){ 满足条件需要做的事情: } int ...
- JavaSE复习_12 Socket网络编程
△客户端使用Scanner与BufferedReader的异同,Scanner在客户端调用s.shutdownoutput的时候,将会因为读不到行而报异常,但是BufferedReader的readl ...
- JavaSE复习_11 IO流复习
△FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表) FileWriter是使用默认码表写出文件, 如果需 ...
- JavaSE复习_10 多线程复习
△wait()和sleep()的区别: 1.wait():没有等待时间,而sleep()需要有等待时间作为参数. 2.在同步中对于CPU的执行权和锁的处理不同: wait()会释放执行权和锁. ...
随机推荐
- CSS select样式列表-------美化列表
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vs2013的asp.net 管理
iisexpress.exe /path:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ASP.NETWebAdminFiles /vpath:/AS ...
- 20150603_Andriod 多个窗体数据回调
package com.example.test1; import android.support.v7.app.ActionBarActivity;import android.os.Bundle; ...
- define与typedef 区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如:#define PI 3. ...
- 内存恶鬼drawRect
标题有点吓人,但是对于drawRect的评价倒是一点都不过分.在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的程序内存暴增.下面我们来看一个例子. 去年的某天午后,北京的雾霾依旧像现在 ...
- [Python]如何使用HtmlTestRunner让自动化测试报告内容更丰富
简述 使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告,Python我们使用的HTMLtestrunner 进行生成,但是默认提供的生成报告内容,并不能 ...
- D3D 模板缓存的创建过程
下面是我对模板缓存创建的理解: 1. 模板缓存是和深度缓存一起被创建的,将深度缓存的一部分作为模板缓存使用. 深度缓存和模板缓存是在Direct3D初始化时创建的,D3DPRESENT_PARAMET ...
- IDEA -14 注册码生成工具
import java.math.BigInteger; import java.util.Date; import java.util.Random; import java.util.zip.CR ...
- C语言培训第一天
下面是一些命令,先来谈谈今天的若干收获吧! 计算机中的一切文件都是以二进制补码的形式存在,问题也就来了. 第一个问题 如果我们给一个无符号的数赋值一个负数,他会读取到什么,又会输出什么?(似乎问题和上 ...
- JLINK仿真器与ST-LINK仿真器的安装与配置.pdf
JLINK仿真器与ST-LINK仿真器的安装与配置.pdf 工欲善其事,......stm32的开发环境搭建 观看地址 说到仿真器,首先要了解一下JTAG. JTAG协议 JTAG(Joint Te ...