I/O、Applet以及其他主题

这是《Java8编程参考官方教程》第13章的笔记。

I/O的基础知识:字节流、字符流、预定义流;
字节流和字符流都使用Unicode编码。
     预定义流包括in、out、err。
所有的Java程序都自动导入java.lang包。这个包定义了System类。in、out、err在System类中被声明为public、static、final。System.in是InputStream类型的对象,System.out和System.err是PrintStream类型的对象。

使用PrintWriter想控制台输出简单文本比使用System.out更容易使程序国际化。

FileNotFoundException是IOException的子类。

自动关闭文件:起始自JDK 7。自动资源管理(Automatic Resource Management, ARM),该特性以try语句的扩展板为基础。
带资源的try语句:
     try(resource-specification) {
         // us the resource 
     }
resource-specification用来声明和初始化资源。只有对于那些实现了AutoCloseable接口的资源,才能使用带资源的try语句。所有流类都实现了这Closeable和AutoCloseable接口。
当离开try语句时,会隐式的调用close()方法。
try语句中声明的资源被隐式声明为final。资源的作用域局限于带资源的try语句。

transient和volatile修饰符:
  1. 如果将实例变量声明为transient,那么当存储对象时,实例变量的值将不需要永久保存。
  2. 由volatile修饰的变量可以被程序的其他部分随意修改。涉及多线程的程序就是这些情况中的一种。


instanceof返回一个boolean,代表对象是否是指定的类型或可以被转换为这种指定类型。

strictfp确保采用与java以前版本使用的相同方式执行浮点计算(以及所有截断)。

本地方法,native修饰符:          没看懂,                    略。

assert:判断是否为true。用于测试。
-ea开启断言,-da禁用断言。
-ea:package...     启用指定包(及其所有子包)中的断言;
-da:package...     同上。
-ea:class              启用某个类;
-da:class              同上。

静态导入:
e.g.     import static pke.type-name.static-member-name;
可以在静态方法的前面略去类名。e.g.Math.sqrt()可以写成sqrt()。
但是,Java将类库组织到包中的目的是避免名称空间发生冲突。当导入静态成员时,就将这些成员带入全局名称空间。
除非频繁使用某个静态成员,不要滥用。

this()调用重载构造函数:this()最适合用于包含大量初始化代码的构造函数,而不适合用于那些只简单设置少量域变量值的构造函数。
调用this()相对那些包含内联初始化代码的构造函数来说,要慢一点,因为调用和返回机制增加了开销。
在构造函数中,this()的调用必须是第一条语句,同一个构造函数中不能同时又this()和super()。因为super()也要是第一条语句。
在调用this()时不能使用当前类的任何实例变量。

紧凑API配置文件:起始自JDK 8。
优势在于,用不到完整库的程序不需要下载整个库。
使用紧凑配置文件减小了库的大小,让一些Java程序能够在无法支持完整JavaAPI的设备上运行。
还降低了加载程序所需的时间。
posted @ 2016-06-23 13:40  StevenLuke  阅读(123)  评论(0编辑  收藏  举报