1. Format类有以下3个子类
MessageFormat:格式化资源文件的占位字符串
NumberFormat: 数字的格式化
DateFormat(SimpleDateFormat):日期类型的操作,SimpleDateFormat类经常用于将String变为Date类型数据。
2. 抽象类 VS 接口
1, 都不能直接实例化,只能通过子类的对象向上转型实例化。
2, 抽象类通过子类实例化的对象来实例化自己, 不能调用子类里面的特有的方法。
3, 接口也只能通过子类实例化的对象来实例化自己, 此时不能调用子类中特有的方法!
3. 异常 java.io.IOException: Stream closed 的产生原因
请看这里: java.io.IOException:stream closed 异常的原因及处理
BufferedReader Input1 = new BufferedReader(new InputStreamReader(System.in));
BufferedReader Input2 = new BufferedReader(new InputStreamReader(System.in));
这两句话中的Input1和Input2都是由System.in封装而来。这是设计模式中的装饰模式的应用,顾名思义,装饰模式就是对最原始的东西进行装饰,只改变了外表,但实质并没有改变。System.in就是最原始的东西,Input1和Input2只是他被装饰后的外表,所以程序中的Input1和Input2的实质上都是System.in。调用Input1.close(),会自动调用Input1的实质System.in.close(),所以对于Input2来说他的实质System.in已经关闭掉,所以...
多个线程索引同一个input stream,当某一个thread在执行完之后,把这个inputstream关闭了;而此时正在从这个input stream流中读取信息的线程就会抛出 java.io.IOException: Stream closed 异常。
4. IO部分
Writer方法write(String s)输出回车换行: \r\n
linux和unix系统的换行是"/n",而windows的换行并不是直接的"/n",是"\r\n"。所以out.write("\n")只能得到一个黑框,因为windos不认为这是个“换行”。直接从记事本输入的话,windows自动输入了"\r\n",所以从从文本文件中读出来的也是"\r\n",可以正常显示。
那么这是为什么呢?稍微学过正则表达式的朋友都知道:\r是回车符,而\n是换行符。Windows默认\n在文档中显示的是一个空格或者小黑框。所以,要先回车,再换行。
5. BufferedReader读取从命令行窗口多行数据时,如何判断输入已经结束了
6. BufferedReader输入流关闭后,System.in也关闭了。。就算重新在new 一个BufferedReader(System.in)也没用。因为System.in已经被关闭了。。。那么,该如何关闭单一BufferedReader??
7.增强循环 (foreach语句)
增强型的for循环 优点主要体现在集合中,随便举个例子
比如对 set 的遍历
一般是迭代遍历:
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
for循环遍历:
for (String str : set) {
System.out.println(str);
}
是不是简单些?
优点还体现在泛型 假如 set中存放的是Object
Set<Object> set = new HashSet<Object>();
for循环遍历:
for (Object obj: set) {
if(obj instanceof Integer){
int aa= (Integer)obj;
}else if(obj instanceof String){
String aa = (String)obj
}
........
}
如果你用Iterator遍历,那就晕了
map list 也一样
唯一的缺点就是 在遍历 集合过程中,不能对集合本身进行操作
for (String str : set) {
set.remove(str);//错误!
}
{
System.out,println(it.next());
}
第一种方式while循环完后,对象还在内存中,而第二种方式for循环完后,对象被回收了,因为实在for内部定义的,属于局部变量。