标签:考试 电脑 容量 内存 需要 程序员 处理 数组 不能
public class ExceptionDemo3{
public static void main(String []args){
Bar bar=new Bar();
try{
bar.enter(15);
}catch(AgeLessThanEighteenException e){
System.out.println("错误信息:"+e.getMessage());
}
System.out.println("end");
}
}
//自定义异常
class AgeLessThanEighteenException extends Exception{
private String message;//描述异常信息
public AgeLessThanEighteenException(String message){
this.message=message;
}
//重写getMessage()方法
public String getMessage(){
return message;
}
}
class Bar{
public void enter(int age)throws AgeLessThanEighteenException{
if(age<18){
throw new AgeLessThanEighteenException("年龄不合格");
}else{
System.out.println("欢迎光临");
}
}
}
这里可以看到,自定义异常并不能直接使用try-catch语句,需要另外一个类作为“桥梁”来判定抛出的条件,接着在主函数使用try-catch语句来将自定义的异常抛出。
问题2解决方案:对于这两个定义,我再理解的时候十分迷惑,为什么可检测的异常需要将在方法头加上throws?
首先如果可检测异常不被throws子句处理或者是被方法捕获,程序将因为而被停止,所以,必须使用相应的方法处理。而不可检测异常则不会编译器检测出来,
非检测异常不遵循处理或声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已解决了这样一个异常。例如:一个数组为 3 个长度,当你使用下标为3时,就会产生数组下标越界异常。这个异常 JVM 不会进行检测,要靠程序员来判断。有两个主要类定义非检测异常:RuntimeException 和 Error。
Error 子类属于非检测异常,因为无法预知它们的产生时间。若 Java 应用程序内存不足,则随时可能出现 OutOfMemoryError;起因一般不是应用程序的特殊调用,而是 JVM 自身的问题。另外,Error 一般表示应用程序无法解决的严重问题。
RuntimeException 类也属于非检测异常,因为普通 JVM 操作引发的运行时异常随时可能发生,此类异常一般是由特定操作引发。但这些操作在 Java 应用程序中会频繁出现。因此,它们不受编译器检查与处理或声明规则的限制。
总结:已检查异常,指的是一个函数的代码逻辑没有错误,但程序运行时会因为IO等错误导致异常,你在编写程序阶段是预料不到的。如果不处理这些异常,程序将来肯定会出错。所以编译器会提示你要去捕获并处理这种可能发生的异常,不处理就不能通过编译。
未检查异常,指的是你的程序逻辑本身有问题,比如数组越界、访问null对象,这种错误你自己是可以避免的。编译器不会强制你检查这种异常。也检查不过来,太多了。
代码如下:
public class ExceptionDemo1_2{
public static void main(String []args){
//testTryFinally("张三");//输出2 end
testTryFinally(null);//空指针异常
}
public static void testTryFinally(String name){
try{
System.out.println(name.length());
}finally{
System.out.println("end");
}
}
}
可以看到这个程序中并没有出现有关异常的语句,但是依旧抛出了异常。原因在哪?首先这就是刚才的可检测异常,而程序可以发现问题,回顾异常的子类
可以知道,这种就属于运行异常,所以,程序就可以自动抛出。当然,程序中有finally子句,可以继续执行。
问题2:IO流的一些问题
问题2解决方案:我们知道,
当在程序中创建一个IO流对象的时候,同时系统也会创建
一个叫做流的东西,在这种情况下,计算机内存中实际产生了两个事物,一个是java程
序中类的实例对象,一个是系统本身产生的某种资源,而java垃圾回收器只能管理程序
中类的实例对象,没办法去管理系统产生的资源,所以程序需要调用close方法,去通
知系统释放其自身产生的资源
但是,close对于一个程序来说,就好比按下了电脑的电源键,一但按下,别的都会关闭,所以,当时我在第一次写入后执行close语句,相当于将输入流直接关闭,而后续的自然午饭写入。所以,对于一个程序,一个close足矣。
错题1
错题2
理解:以这个图为例,
可以看到,它的行号是由高到低的,所以是逆序。
错题3
错题4
错题5
理解:在jdk中可以查到也就说,Scanner中拥有自己的解决异常的方法
错题六
理解:不带缓冲的流的工作原理:它读取到一个字节/字符,就向用户指定的路径写出去 读一个写一个 所以就慢了;带缓冲的流的工作原理:读取到一个字节/字符,先不输出,等凑足了缓冲的最大容量后一次性写出去,从而提高了工作效率。写入效率增高自然提高了运行效率。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 110/110 | 1/1 | 20/20 | |
第二周 | 315/425 | 1/2 | 18/38 | |
第三周 | 475/900 | 2/4 | 22/60 | |
第四周 | 600/1500 | 1/5 | 30/90 | |
第五周 | 1215/2715 | 1/6 | 20/110 | |
第六周 | 382/3097 | 1/7 | 20/130 | |
第七周 | 721/3818 | 1/8 | 15/145 | |
第八周 | 771/4589 | 2/10 | 15/160 | |
标签:考试 电脑 容量 内存 需要 程序员 处理 数组 不能
原文地址:https://www.cnblogs.com/326477465-a/p/9029681.html