发表日期: 2021-03-26 12:39:34 浏览次数:95
醴陵小程序制作【醴陵企业邮箱】醴陵网站外包、醴陵微信商城开发、醴陵网店美工、醴陵淘宝设计
醴陵市,为湖南省辖县级市,由株洲市代管,地处湖南省东部,总面积2156.46平方千米,醴陵市东邻江西省萍乡市湘东区、上栗县,北接浏阳市,西倚株洲市芦淞区、渌口区,南界攸县。截至2018年末,醴陵市辖19镇、4街道办事处、1个经济开发区、1个示范区,户籍人口105.3万。
醴陵市拥有渌江书院、宋名臣祠、醴泉古井、状元芳洲、文笔奇峰、云岩寺等名胜古迹。醴陵市境内浙赣复线横贯东西,醴(陵)茶(陵)线连通南北,距株洲站仅40千米,沪昆高铁、沪昆高速、106国道、320国道纵横交错,市区距长沙黄花国际机场90千米。 [1]
2019年,醴陵市实现地区生产总值716.4亿元,实现财政总收入72.92亿元。 [2] 2020年度真抓实干成效明显,2021年1月29日被湖南省人民政府公布为推动高质量发展成效明显的县市区,给予100万元标准奖励。
Java提供的try-catch语句嵌套是可以任意嵌套,修改14.3.2节示例代码如下:
//HelloWorld.java文件package com.a51work6;… …public class HelloWorld {
public static void main(String[] args) {
Date date = readDate();
System.out.println("读取的日期 = " + date);
}
public static Date readDate() {
FileInputStream readfile = null;
InputStreamReader ir = null;
BufferedReader in = null;
try {
readfile = new FileInputStream("readme.txt");
ir = new InputStreamReader(readfile);
in = new BufferedReader(ir);
try { ①
String str = in.readLine(); ②
if (str == null) {
return null;
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str); ③
return date;
} catch (ParseException e) {
System.out.println("处理ParseException...");
e.printStackTrace();
} ④
} catch (FileNotFoundException e) { ⑤
System.out.println("处理FileNotFoundException...");
e.printStackTrace();
} catch (IOException e) { ⑥
System.out.println("处理IOException...");
e.printStackTrace();
}
return null;
}}复制代码上述代码第①~④行是捕获ParseException异常try-catch语句,可见这个try-catch语句就是嵌套在捕获IOException和FileNotFoundException异常的try-catch语句中。
程序执行时内层如果会发生异常,首先由内层catch进行捕获,如果捕获不到,则由外层catch捕获。例如:代码第②行的readLine()方法可能发生IOException异常,该异常无法被内层catch捕获,最后被代码第⑥行的外层catch捕获。
注意 try-catch不仅可以嵌套在try代码块中,还可以嵌套在catch代码块或finally代码块,finally代码块后面会详细介绍。try-catch嵌套会使程序流程变的复杂,如果能用多catch捕获的异常,尽量不要使用try-catch嵌套。特别对于初学者不要简单地使用Eclipse的语法提示不加区分地添加try-catch嵌套,要梳理好程序的流程再考虑try-catch嵌套的必要性。
多catch代码块客观上提高了程序的健壮性,但是程序代码量大大增加。如果有些异常虽然种类不同,但捕获之后的处理是相同的,看如下代码。
try{
//可能会发生异常的语句} catch (FileNotFoundException e) {
//调用方法methodA处理} catch (IOException e) {
//调用方法methodA处理} catch (ParseException e) {
//调用方法methodA处理}复制代码三个不同类型的异常,要求捕获之后的处理都是调用methodA方法。是否可以把这些异常合并处理,Java 7推出了多重捕获(multi-catch)技术,可以帮助解决此类问题,上述代码修改如下:
try{
//可能会发生异常的语句} catch (IOException | ParseException e) {
//调用方法methodA处理}复制代码在catch中多重捕获异常用“|”运算符连接起来。
注意 有的读者会问什么不写成FileNotFoundException | IOException | ParseException 呢?这是因为由于FileNotFoundException属于IOException异常,IOException异常可以捕获它的所有子类异常了。
有时在try-catch语句中会占用一些非Java资源,如:打开文件、网络连接、打开数据库连接和使用数据结果集等,这些资源并非Java资源,不能通过JVM的垃圾收集器回收,需要程序员释放。为了确保这些资源能够被释放可以使用finally代码块或Java 7之后提供自动资源管理(Automatic Resource Management)技术。
try-catch语句后面还可以跟有一个finally代码块,try-catch-finally语句语法如下:
try{
//可能会生成异常语句} catch(Throwable e1){
//处理异常e1} catch(Throwable e2){
//处理异常e2} catch(Throwable eN){
//处理异常eN} finally{
//释放资源}复制代码无论try正常结束还是catch异常结束都会执行finally代码块,如图14-2所示。

图14-2 finally代码块流程
使用finally代码块示例代码如下:
//HelloWorld.java文件package com.a51work6;… …public class HelloWorld {
public static void main(String[] args) {
Date date = readDate();
System.out.println("读取的日期 = " + date);
}
public static Date readDate() {
FileInputStream readfile = null;
InputStreamReader ir = null;
BufferedReader in = null;
try {
readfile = new FileInputStream("readme.txt");
ir = new InputStreamReader(readfile);
in = new BufferedReader(ir);
// 读取文件中的一行数据
String str = in.readLine();
if (str == null) {
return null;
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
return date;
} catch (FileNotFoundException e) {
System.out.println("处理FileNotFoundException...");
e.printStackTrace();
} catch (IOException e) {
System.out.println("处理IOException...");
e.printStackTrace();
} catch (ParseException e) {
System.out.println("处理ParseException...");
e.printStackTrace();
} finally { ①
try {
if (readfile != null) {
readfile.close(); ②
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (ir != null) {
ir.close(); ③
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (in != null) {
in.close(); ④
}
} catch (IOException e) {
e.printStackTrace();
}
} ⑤
return null;
}}复制代码上述代码第①行~第⑤行是finally语句,在这里通过关闭流释放资源,FileInputStream、InputStreamReader和BufferedReader是三个输入流,它们都需要关闭,见代码第②行~第④行通过流的close()关闭流,但是流的close()方法还有可以能发生IOException异常,所以这里又针对每一个close()语句还需要进行捕获处理。
注意 为了代码简洁等目的,可能有的人会将finally代码中的多个嵌套的try-catch语句合并,例如将上述代码改成如下形式,将三个有可以发生异常的close()方法放到一个try-catch。读者自己考虑一下这处理是否稳妥呢?每一个close()方法对应关闭一个资源,如果第一个close()方法关闭时发生了异常,那么后面的两个也不会关闭,因此如下的程序代码是有缺陷的。
try {
... ...} catch (FileNotFoundException e) {
... ...} catch (IOException e) {
... ...} catch (ParseException e) {
... ...} finally {
try {
if (readfile != null) {
readfile.close();
}
if (ir != null) {
ir.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}}