1. StackOverflowError异常
意思:栈内存溢出
原因:栈深度超过虚拟机分配给线程的栈大小
常发生于方法的无限递归调用(没有结束递归的条件)
在写Student信息时,由于经常要调到Student()方法,出现了该异常
解决办法:
生成 serialVersionUID
具体操作:
1.点击 File,点击Settings,然后![!](https://img-blog.csdnimg.cn/3a264d05003648ca98c3efed9816aead.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATmV3QWdlLCBDb25hbg==,size_20,color_FFFFFF,t_70,g_se,x_16
2.设置之后,选中对应的类名,然后按 alt-enter 快捷键,点击就可以自动生成了。
2. StreamCorruptedException异常
异常出现的原因:ObjectOutputStream的构造函数会向输出流中写入一个标识头,而ObjectInputStream会首先读入这个标识头.因此,多次以追加方式向一个文件中写入 object 时,该文件将会包含多个标识头.所以用ObjectInputStream来deserialize这个ObjectOutputStream时,将产生StreamCorruptedException.
解决办法:将原文档内容删除后重新添加一下(目前没有找到更好的办法(可以再查一查怎么把后面的头文件删除(***-----------保留问题一***)))
3. 一个class如何调用另一个class中的方法
1- new一个其它 class 的实例,通过实例调用该方法
2-使用 stastic 静态方法,可以直接调用,但使用静态方法太耗内存,不建议使用
4. 泛型
详细见 https://www.cnblogs.com/jpfss/p/9928747.html
泛型,即“参数化类型”。
解释:将具体的类型参数化,类似于方法中的变量参数
三种使用方式:泛型类、泛型接口、泛型方法
举例:class<1> , 1可以随便写
implement<1>
Add<1>
在使用/调用时传入具体的类型(类型实参),如自定义的 Student 类型
在结束之后接下来的计划:
1.正则表达式下去可以多了解一点
5. Pattern与Matcher
详细见 https://www.cnblogs.com/gdwkong/articles/7782331.html
Pattern与Matcher 一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matches(String regex,CharSequence input)一种最基础最简单的匹配。
Pattern.matcher(CharSequence input)返回一个Matcher对象.
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
我在这次的项目中使用过,代码如下::
Pattern p = Pattern.compile("1{0,1}(\d+)$");
Matcher m = p.matcher(water01);
6.小问题一(弄了好久,一直 break;调方法 break;调方法,肝疼)
在输入格式错误一直错误的时候,需要让它一直重新输入(返回该方法,即嵌套)
方法(使用 continue 关键字):
public double inputWater() {
/* System.out.println("请输入用水量(正整数,包括0):");
Scanner sc = new Scanner(System.in);
double water = 0;
while (true) {
String water01 =sc.next();
Pattern p = Pattern.compile("^[+]{0,1}(\\d+)$");
Matcher m = p.matcher(water01);
if (m.matches()) {
water = Double.valueOf(water01);
break;
}else{
System.out.println("格式错误! ");
//sc.nextLine();
inputWater();
break;
}
}*/
double water = 0;
while(true) {
System.out.println("请输入用水量(正整数,包括0):");
Scanner sc = new Scanner(System.in);
try {
String water01 =sc.next();
String regex = "^[+]{0,1}(\\d+)$";
if(!(water01.matches(regex)) )throw new Exception();
if((water01.matches(regex))){
water = Double.valueOf(water01);
}
} catch(Exception e) {
System.out.println("格式错误!");
continue; //------------------换成 continue;
}
break; //必须要 try-catch 一下
}
return water;
}
7. 小问题二之 if-else if - else 那个大病(仍未解决,再查查,哪位好心人帮帮忙已经):
if(sc.nextInt() == 0)
……
else if(sc.nextInt() == 1)
……
else
在运行时(2)总是需要多输一次 1 ,绝绝子!(偶尔会变得正常一点,只用输一次)
算了,还是用 switch吧!我这里的代码用 switch 有点冗长。。。
+ ↩︎