J2SE5.0学习所得

来源:互联网 发布:http的端口号 编辑:程序博客网 时间:2024/05/15 23:06
  
1. 公共jre与jdk下的jre区别:
Jdk下的jre bin中多了一个server,而公共jre的bin目录下面只有一个client. Server 与 Client选项的差别在于所使用的VM不同,执行java程序时默认会使用client VM. 若使用server VM,会花费较长的启动时间及消耗较多的内存,为的是启动Java后能获得较好的执行效率。
2. J2SE5.0增加了printf函数,为C程序员提供了方便,如:system.out.printf(“%s, C fans!/n”,”Hello”);
3. JDK5.0编译的class文件默认情况下无法在1.4之前版本的JRE上运行。若想在1.4版本运行,则需要添加-source与-target参数。-source指定原代码中可以使用的版本功能,-target指定编译出来的字节码适用的VM版本。eg: javac –source 1.4 –target 1.4 hello.java
4. J2SE5.0中,java.util.Scanner类提供了从命令行读取字符串的方便:
Scanner scanner=new Scanner(system.in);
System.out.printf(“Hello!%s/n”,scanner.next());
5. Autoboxing 与 unboxing:
int i=10;   Integer integ=i;
或者:Number number=3.14f; (java.lang.Number类可自动装箱)
 
Integer fooInteger=10;
Int fooPrimitive=fooInteger;
6. J2SE5.0对数组array增加了foreach语句:
Eg:int[] arr={1,2,3,4,5};
For (int element:arr)
   System.out.println(element);
7. J2SE5.0提供java.lang.StringBuilder类,它产生对象默认为16字符,也可以自行指定初始长度。若附加字符超出可容纳的长度,则StringBuilder对象自动增长。StringBuilder没有处理同步问题,在单机非多线程的情况下有较好的效率。
8. J2SE5.0中String的split()代替了StringTokenizer,它返回string[].
9. J2SE5.0之前,不能重写(override)返回值类型,但从J2SE5.0开始,重写返回值类型是可行的,限制条件是:重写的返回值类型必须是父类中同一方法返回类型的子类。
10.              在J2SE5.0中新增了枚举类型,使用枚举类型,除了简单的常数设定功能之外,还可以获得像编译时期类型检查等更多的好处。当使用enum定义枚举类型时,实际上所定义出来的类型是继承自jav.lang.Enum类,每个被枚举的成员就是定义的枚举类型的一个实例。它们默认为public static final.
11.              J2SE1.4或旧版本上,所以存入List,Map,Set容器中的实例都会失去其类型信息,要从这些容器中取回对象并加以实现,就得记住取回得对象是什么类型。J2SE5.0提供了针对泛型设计的解决方案,要定义一个简单的泛型类是简单的。
        与单纯使用Object声明类型所不同的地方在于,使用泛型所定义的类在声明及配置对象时,可以使用尖括号一并指定泛型类类型持有者T真正的类型,而类型或接口转换就不再需要了。
12.              从J2SE5.0开始增加了泛型设计的新功能,所以像Iteratable,collection相关接口与其实现类,都是用泛型的功能重新改写了,因而可以在原始码或API文件中看到增加了不少与泛型相关的功能或说明。List 数据结构的特性是:每个加入List的元素是循序加入的,并可指定索引来存取元素。对于循序加入与存取使用ArrayList的效率比较好,对于经常变动元素排列顺序的需求,使用LinkedList会比较好。
13.              HashSet不容许重复元素,迭代HashSet中所有的值时,其顺序与加入容器的顺序不一样,是经过HashSet排序后的顺序。若想按加入顺序迭代则可以使用java.util.LinkedHashSet.它是HashSet的子类。TreeSet是J2SE中唯一实现SortedSet接口的类。它使用红黑树结构来对加入的对象进行排序。TreeSet对String对象默认用字典顺序排序,如果对象有自己的一套排序顺序,要定义一个实现java.util.comparator接口的对象,要实现接口中的compare()方法。
14.              Java.util.EnumSet是在J2SE5.0后加入的新类,可以协助建立枚举值的集合。EnumSet提供了一系列的静态方法,可以让你指定不同的集合建立方式。
15.              对象串行化:
若直接存储对象,定义该对象的类必须实现java.io.Serializable接口(这是一个标记接口)。还要注意维持对象串行化版本的一致,即声明:
Private static final long SerialVersionUID=1L;
16.              试图将对象附加至一个先前已经写入对象的文件时,由于ObjectOutputStream在写入数据时还会加上一个特别的流头(Stream Header),所以读取文件时会检查这个流头。若多次附加写入则读取抛出异常,解决方法:重定义ObjectOutputStream的WriteStreamHeader()方法,若以附加方法写入对象,就不写入流头。
17.              特殊流:
SequenceInputStream:可看作数个InputStream对象的组合,顺序读取多个InputStream对象(而不必自行判断每个分割文件是否读取完毕)
Java.io.PrintStream:可以自动进行字符转换的动作,默认会使用操作系统的编码来处理对应的字符转换动作。
流的来源或目的地不一定时文件,也可以时内存中的一个空间。例如一个位数组。Java.io.ByteArrayInputStream, java.io.ByteArrayOutputStream即是将位数组当作流输入来源,输出目的地的类。
PushbackInputStream:它有一个pushback缓冲区,从pushbackInputStream读出数据后,只要pushback缓冲区没有满,就可以使用unread()将数据推回流的前端。
18.              字符流:
Java.io.Reader和java.io.Writer 支持Unicode标准字符集,而字节流则只支持ISO-Latin-1 8-bit. Reader和Writer在处理流数据时,会根据系统默认的字符编码来进行字符转换。
19.              Daemon进程:
一个Daemon线程是一个在背景执行服务的线程,例如网络服务器倾听连接端口的服务,隐藏的系统线程如垃圾回收线程或其他JVM建立的线程。如果所有的非Daemon线程都结束了,则Daemon线程自动终止。
从main方法开始的是一个非Daemon线程,若希望某个线程在产生它的线程结束后也跟着终止,那么要将它设定为Daemon线程。 thread.setDaemon(true); Java默认所有从Daemon线程产生的线程也是Daemon线程。
20.              线程安全:
容器类默认没有考虑线程安全。事实上,可以使用java.util.Collections的Synchronized×××()等方法来返回一个同步化的容器对象,以这种方式返回的容器对象在存取数据时,会进行同步化的工作,但在使用Iterator遍历对象时,仍必须实现同步化,因为这样的容器使用Iterator()方法返回的Iterator对象并没有保证线程安全。
J2SE5.0新增了java.util.concurrent这个package,其中包括一些确保线程安全的collection类,如ConcurrentHashMapCopyOnWriteArrayListCopyOnWriteArraySet等,这些collection基本行为与MapListSet等对象是相同的,不同的是增加了同步化功能。
原创粉丝点击