各种总结Tips



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


linuxunix系统的换行是"/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);//错误!
  } 


8. foreach 语句和 while处理 Iterator时的区别 : 

for(Iterator it=al.iterator();it.hasNext();)
{
System.out,println(it.next());
}

第一种方式while循环完后,对象还在内存中,而第二种方式for循环完后,对象被回收了,因为实在for内部定义的,属于局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值