`
yx1989
  • 浏览: 10573 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类
最新评论

Java学习笔记

阅读更多
操作系统的环境变量:在操作系统中定义的变量,可以被操作系统上运行的所有程序所访问。
以在命令行中set命令看到的结果为准。在命令行设置的环境变量,仅针对本次设置有效。

2011-4-16
Iterator 是工作在一个独立的线程中,并且拥有一个mutex锁。
Iterator被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生改变时,这个索引表不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照fail-fast原则Iterator会马上抛出java.util.ConcurrentModificationException异常。所以Iterator在工作的时候是不允许被迭代对象改变的。但可以使用Iterator本身的方法remove()来删除对象,Iteraor.remove()方法会在删除当前迭代对象的同时维护索引的一致性。

2011-4-24
关于Map.Entry
标准的Map访问方法如下:
Set keys = map.keySet();
if(keys!=null) {
Iterator it = keys.iterator();
While(iterator.hasNext() {
Object key = iterator.next();
Object value = map.get(keys);
;……;
}
}
这个方法有一个问题。从Map中取得关键字之后,我们必须每次重复返回到Map中取得相对的值,这是很繁琐和费时的。
这里有一个更加简单的途径。Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更加符合逻辑。举例如下:
Set entries = map.entrySet();
If(entries!=null) {
Iterator iterator = entries.iterator();
while(iterator.hasNext()) {
Map.Entry entry = iterator.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
}
尽管增加了一行代码,却省略了许多对Map不必要的”get”调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。
Map.Entry同时也提供了一个setValue()方法,程序员可以使用它来修改Map里的值。
2011-5-9
在多任务系统中,每个独立执行的程序成为进程,也就是“正在进行的程序”。
一个进程中又可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索,如果要以程序中实现多段代码同时交替运行,就需要产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。
如果一个Java程序中只有后台线程在运行的话,整个Java程序就会结束。
一个Thread对象代表一个线程

Runnable接口
适合多个相同的代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效分离,较好地体现了面向对象的设计思想。

多线程同步(多线程安全)


2011-5-30
前一个异常还没处理就抛出下一个异常是一种糟糕的编程错误。
要把所有抛出异常的方法,全部打包到try-catch子句里面。

2011-5-31
这种通用的清理惯用法在构造器不抛出任何异常时也应该运用,其基本规则是:在创建需要清理的对象之后,立即进入一个try-finally语句块。

2011-6-18
FileOutputStream 的write方法写入字符串内部调用了flush方法。
先用new File 再new FileOutputStream 这样可以先判断文件是否存在,是否是目录等。

使用管道流类,可以实现各个程序模块之间的松耦合通信。

ByteArrayInputStream和ByteArrayOutputStream, 用于以IO流的方式来完成对字节数组内容的读写。来支持类似内存虚拟文件或者内存映像文件的功能。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics