一些常见问题
关于BufferedWriter写入丢失问题
在完成一个Java项目的时候发现了一个关于BufferedWriter写入丢失问题
我们通常认为,在IO的时候,不关闭一些流通常就是占用资源的缘故,但是其实可能远远不止这些隐患
例如以下这段代码
package com.fq.zoo.BufferedWriter;
import java.io.*;
public class Test {
public static void main(String[] args) {
File file = new File("C:\\Users\\小艺\\IdeaProjects\\Test310\\src\\com\\fq\\zoo\\Zoo.txt");
Writer writer = null;
BufferedWriter bw = null;
StringBuffer sb = new StringBuffer();
try{
writer = new FileWriter(file);
bw = new BufferedWriter(writer);
sb.append("测试"+" "+"\n");
bw.write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
按理来说应该在文件中有写入数据才对
但实际上Zoo.txt是空的
我们把流关闭试试
package com.fq.zoo.BufferedWriter;
import java.io.*;
public class Test {
public static void main(String[] args) {
File file = new File("C:\\Users\\小艺\\IdeaProjects\\Test310\\src\\com\\fq\\zoo\\Zoo.txt");
Writer writer = null;
BufferedWriter bw = null;
StringBuffer sb = new StringBuffer();
try{
writer = new FileWriter(file);
bw = new BufferedWriter(writer);
sb.append("测试"+" "+"\n");
bw.write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
finally{
try{
if(bw!=null) {
bw.close();
}
if(writer!=null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
文件中出现了数据。
我们在操作流之后一定要记得关闭流!!!!!
关于null
Set集合可以放入null,因此造成了一些误解,比如,在一个HashSet中放入Student类型对象,即HashSet,其中Student对象可以为null,但是此时HashSet并不为null,我们需要用Student为null来作为条件判断时只能够遍历获得其中的元素看是不是null
public class MarkDemo {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add(null);
System.out.println("set包含元素"+set.size());
}
}
/*
set包含元素1
*/
true、false、null虽然颜色是黄色的,但是其实它们是字面量
关于DTO和VO
我区分这两个的办法很简单
在entity中,往MVC中model去的方向作为DTO,即往数据库里面去的
往view去的方向作为VO,即返回到展示层的,给用户看的数据对象叫做VO
关于String的长度
经了解发现String可做不到无线的扩大,在其内部是使用一个char[]来存储的,数组的最大值为0x7ffffff,即2147483548