Throwable:
成员方法:
1.getMessage():获取异常信息,返回字符串;
2.toString():获取异常类名和异常信息,返回字符串;
3.printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void;
4.printStackTrace(PrintStream s):通常用该方法将异常内容保存在日志文件中以便查阅;
throws:
概述:
定义功能方法时,需要把出现的问题暴露出来让调用者来处理,那么就通过throws在方法上标识;
格式:
throws 异常类名;
注意:尽量不要在main方法上抛出异常;
编译异常抛出,将来调用者必须处理,运行异常抛出,将来调用者可以不必处理;
throw:
概述:
在功能方法内部出现某种情况,程序不能继续运行,需要跳转时,就用throw把异常抛出;(这个时候抛出的是异常的对象);
throw和throws的区别:
throws:
用在方法声明里面,跟的是异常类名;
可以跟多个异常类名,用逗号隔开;
表示抛出异常,由该方法的调用者来处理;
throws表示出现异常的一种可能性,并不一定会发生这些异常;
throw:
用在方法体内,跟的是异常对象名;
只能抛出一个异常对象名;
表示抛出异常,由方法体内的语句处理;
throw则是抛出了异常,执行throw则一定抛出了某种异常;
如何处理异常:
原则:
如果改功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws;
区别:
后续程序需要继续运行就try;
后续程序不需要继续运行就throws;
finally的特点作用:
特点:
被finally控制的语句体一定会执行;
特殊情况;在执行到finally之前jvm退出了(比如System.exit(0));
作用:
用于释放资源,在IO流操作和数据库操作中会见到;
final,finally,finalize的区别:
final:修饰符;
finally:是异常处理的一部分,用于释放资源;
finalize:垃圾回收;
如果catch里有return语句,finally语句是否执行,执行时实在return前还是后;
会,前;
try…catch…finally的变种:
1.try....catch.....catch.....finally;
2.try...finally(释放资源);
自定义异常:
继承自Exception;
继承自RuntimeException;
异常注意事项:
1.子类重写父类方法时,子类的方法必须抛出与父类相同的异常,或是父类异常的子类异常;
2.如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或是它的子集,不能抛出父类没有的异常;
3.如果被重写的方法没有异常抛出,那么子类的方法绝不可以抛出异常,如果子类方法内有异常,那么子类只有try,不能throws;
File类:
文件和目录路径名的抽象表现形式(将文件目录路径名封装成对象):
构造对象:
1.public File(Strign pathname);
2.public File(String parent,String child);
3.public File(File parent,String child);
成员方法:
添加功能:
1.public boolean createNewFile():创建文件;
2.public boolean mkdir():创建文件夹;
3.public boolean mkdirs():创建多级文件夹;
4.public boolean delete():删除文件,不走回收站;
5.public boolean renameTo(File dest):重命名,如果调用文件对象和指定文件对象路径名相同,则重命名,不同,则剪切到指定文件路径并重命名;
判断功能:
1.public boolean isDirectory():判断是否是目录;
2.public boolean isFile():判断是否是文件;
3.public boolean exists():判断是否存在;
4.public boolean canRead():判断是否可读;
5,public boolean canWrite():判断是否可写;
6.public boolean isHidden():判断是否隐藏;
获取功能:
1.public String gerAbsolutePath():获取绝对路径;
2.public String getPath():获取相对路径;
3.public String getName():获取名称;
4.public long length():获取字节数;
5.public long lastModefied():获取最后一次的修改时间,毫秒值;
高级获取:
1.public String[] list():返回一个字符串数组,文件和目录的名称;
2.public File[] listFiles():获取指定目录下的所有文件或文件夹的File数组;
文件名称过滤器:
1.public String[] list(FilenameFilter filter);
2.public File[] listFiles(FilenameFilter filter);
可通过匿名内部类new filter 重写方法来过滤文件名,return true代表未过滤,return false代表成功过滤;(此处的过滤理解成过滤豆浆,你想要的没有被过滤掉,不想要的被过滤掉);
递归:
方法定义中调用方法本身的现象;
注意:
要有出口,不然就是死递归;
次数不能太多,否则就内存溢出:
构造方法不能递归使用;
例子:不死神兔(名字不是我起的QWQ):
有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
本质是斐波那契数列,我们可以找到规律;
第一个月:1对;
第二个月:1队;
第三个月:2对;
第四个月:3对;
第四个月:5对;
.
.
.
.
不难发现,从第三个月开始,每个月兔子的对数都是前两个月兔子数目相加得到,不信邪的可以一直递推到20qwq;
假设函数f(n)表示第n个月的兔子,那么f(n)=f(n-1)+f(n-2),当然n是大于2的;
下面我们用代码来实现;
public static int(返回兔子对数) getNum(int n(表示月数)){
if(n==1||n==2){
return 1;
}else {
return f(n-1)+f(n-2);
}
}
关于n是负数这里我就不判断了,在这里手打代码可太累了QAQ;