Day19_IO第一天
1、异常
基本格式try{可能发生异常的代码;}catch(异常类名 变量名){异常的处理代码;}finally{释放资源的代码;}变形格式try..catchtry..catch..catchtry..catch..catch..finallytry..finally注意:不能写成 try{}单独存在JDK1.7针对多个catch做了优化try{可能发生的异常代码;}catch(异常1 | 异常2 | 异常3){//注意,这些异常必须是平级关系}finally{}
2、异常常见面试题总结
内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资 源回收,例如关闭文件等。JVM不保证此方法总被调用
static int test() {
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}
---------执行结果 ---------
运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。
3、File类
4、File类-成员方法
File(String pathName)
根据指定的路径创建File对象
File(String parent, String child)
根据指定的父文件夹和子文件或者文件夹创建File对象
File(File parent, String child)
根据指定的父文件夹对象和子文件或文件夹创建File对象
以上三个方法,创建当前文件或文件夹的时候都是先看是否存在,如果存在就不创建,否则就创建
创建功能
boolean createNewFile()
创建文件
boolean mkdir()
创建文件夹
boolean mkdirs()
创建多级文件夹
删除功能
public boolean delete()
删除文件或文件夹
A:如果删除的目录下还有内容,则必须先把该目录下的的内容清空
B:JAVA语言的删除不走回收站
判断功能
public boolean exists()
判断 file 对象是否存在
public boolean isFile()
判断 file对象是否是文件
public boolean isDirectory()
判断 file对象是否是文件夹
public boolean isAbsolute()
判断 file对象是否是绝对路径
public boolean canRead()
判断 file对象是否可读
public boolean canWrite()
判断 file对象是否可写
public boolean isHidden()
判断 file对象是否隐藏
获取功能
public File getAbsoluteFile()
获取文件的绝对路径
public String getName()
获取文件名称
public String getPath()
获取相对路径
public long length()
获取文件的大小,单位是字节
public long lastModified()
获取上次修改时间的毫秒值
public static File[] listRoots()
列出可用的系统文件根目录
public String[] list()
返回的是指定目录下所有文件或者文件夹的名称数组
public String[] list(FilenameFilter filter)
public File[] listFiles()
返回的是指定目录下所有文件或者文件夹对象数组
public File[] listFiles(FilenameFilter filter)
3、案例(掌握)
3、案例代码(掌握)
package com.heima.test;
import java.io.File;
import java.io.FilenameFilter;
public class Test3 {
/**
* @param args
* * A:案例演示
* 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
*/
public static void main(String[] args) {
File dir = new File("E:\\");
// String[] arr = dir.list(); //获取e盘下所有的文件或文件夹
// for (String string : arr) {
// if(string.endsWith(".jpg")) {
// System.out.println(string);
// }
// }
/*File[] subFiles = dir.listFiles(); //获取e盘下所有的文件或文件夹对象
for (File subFile : subFiles) {
if(subFile.isFile() && subFile.getName().endsWith(".jpg")) {
System.out.println(subFile);
}
}*/
String[] arr = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//System.out.println(dir);
//System.out.println(name);
File file = new File(dir, name);
return file.isFile() && file.getName().endsWith(".jpg");
}
});
for (String string : arr) {
System.out.println(string);
}
}
}
package com.heima.test;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Test2 {
/**
* 键盘录入一个int类型的整数,对其求二进制表现形式
* 如果录入的整数过大,给予提示,录入的整数过大请重新录入一个整数BigInteger
* 如果录入的是小数,给予提示,录入的是小数,请重新录入一个整数
* 如果录入的是其他字符,给予提示,录入的是非法字符,请重新录入一个整数
*
* 分析:
* 1,创建键盘录入对象
* 2,将键盘录入的结果存储在String类型的字符串中,存储int类型中如果有不符合条件的直接报错,无法进行后续判断
* 3,键盘录入的结果转换成int类型的数据,是正确的还是错误的
* 4,正确的直接转换
* 5,错误的要进行对应判断
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
while(true) {
String line = sc.nextLine(); //将键盘录入的结果存储在line中
try {
int num = Integer.parseInt(line); //将字符串转换为整数
System.out.println(Integer.toBinaryString(num));//将整数转换为二进制
break; //跳出循环
}catch(Exception e) {
try {
new BigInteger(line);
System.out.println("录入错误,您录入的是一个过大整数,请重新输入一个整数:");
}catch (Exception e2) { //alt + shif + z (try catch快捷键)
try {
new BigDecimal(line);
System.out.println("录入错误,您录入的是一个小数,请重新输入一个整数:");
} catch (Exception e1) {
System.out.println("录入错误,您录入的是非法字符,请重新输入一个整数:");
}
}
}
}
}
}
package com.heima.test;
public class Test1 {
/**
* * A:面试题1
* final,finally和finalize的区别
* final可以修饰类,不能被继承
* 修饰方法,不能被重写
* 修饰变量,只能赋值一次
*
* finally是try语句中的一个语句体,不能单独使用,用来释放资源
*
* finalize是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
* B:面试题2
* 如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return后。
*/
public static void main(String[] args) {
Demo d = new Demo();
System.out.println(d.method());
}
}
class Demo {
public int method() {
int x = 10;
try {
x = 20;
System.out.println(1/0);
return x;
} catch (Exception e) {
x = 30;
return x;
} finally {
x = 40;
//return x; 千万不要在finally里面写返回语句,因为finally的作用是为了释放资源,是肯定会执行的
//如果在这里面写返回语句,那么try和catch的结果都会被改变,所以这么写就是犯罪
}
}
}
6、今天必须掌握的内容,面试题,笔试题。