Java 基础(一)
异常通常由 jvm 抛出或者程序员 api 抛出。
断言
?????? 通常用来检查希望发生或者不希望发生的事情,主要用于 debug 。非常简单版本和简单版本。 Assert 后面必须是 boolean 值,第二个表达式是一个字符串,产生调试信息。
?????? 默认禁用断言。启用断言: java –ea ;禁用断言: java –da ;可以有选择的启用或者禁用断言。
?????? 不要使用断言对程序产生副作用。
String , StringBuffer , StringBuilder
String 是不可改变的对象,和基本类型相似。是 final 的,不可以被继承。创建 String 时首先会 check 常量池中是否已经有,如果有则将引用指向已经存在的字符串,否则在常量池中创建字符串,引用指向新字符串。
?????? String s=”hello”;???? // 创建一个对象,一个引用
?????? String s=new String(“hello”); // 创建两个对象 ( 一个在堆中,一个在常量池中),一个引用。
?????? StringBuiler :非线程安全。 StringBuffer :线程安全。建议多使用 StringBuilder ,这样性能更加好。
文件
File
字符读写类
FileReader/FileWriter :构造函数 File , String
BufferReader/BufferWriter: 构造函数: Writer
PrintWriter :构造函数 File , String , OutputStream , Writer
串行化
ObjectOutputStream.writeObject();
OjbectInputStream.readObject();
串行化会自动串行化被引用的变量。如果引用变量的类型没有实现序列化则会有运行时异常: NotSerializableException 。如果引用变量的类型实现了序列化,引用类型被自动序列化。
标识为 transient 字段不被序列化,反串行化时被默认初始化赋值。 Static 字段不被序列化。
使用 readObject ()和 writeObject ()自己实现串行化操作。反串行化不会调用构造函数。
继承和串行化:
父类没有实现 Serializable 。子类反串行化时,继承的父类变量将被默认赋值而不是串行化期间所具有的值,因为父类的默认构造函数将会被调用,因此父类一定要定义默认无参数构造函数,否则反串行化不成功 。
?