P41
任何变量只要加上public,final和static,基本上都可以变成全局变量可以取用的常量值
P78
java中所传递的所有东西都是值,但此值是变量所携带的值。引用对象的变量所携带的是远程控制而不是对象本身,若你对方法传入参数,实际上传入的是远程控制的拷贝。
P85
局部变量没有默认值。
P151
长运算符(&,|)
使用在布尔表达式时会强制虚拟机一定要计算运算符两边的算式。但这个运算符通常用作位运算
P203
抽象类代表此类必须要被extends过,抽象方法表示此方法必须要被重写过。抽象类可以有具体方法实现。
P236
对象的生存空间:堆(heap)。
方法调用及变量的生存空间:栈(stack)。
非primitive对象只是保存对其的引用而已,因此局部变量若为非primitive类型则其对象也还是存在于堆上。
P243
java可以有与类同名的方法而不会变成构造函数,其中的差别在于是否有返回类型,构造函数不会有返回类型。
P256
this()用于 从某一个构造函数调用同一个类的另一个构造函数
只能用在构造函数中,且只能是第一行语句
super()与this()不可兼得。
P282
申明final类型的变量时可以有两种初始化方式,初始化之后就不能再改变值了
public final static a=2;
或者
public final static a;
static{
a=2;
}
P432
序列化文件很难让一般人阅读,但它比纯文本文件更容易让程序恢复,也比较安全,因为一般人不知道怎么做手脚改数据
P439
如果某实例变量不应该或不能被序列化,那应该将它标记为transient
P476
网页服务器(HTTP)端口号 80
Telnet服务器: 23POP3邮件服务器:110
SMTP邮局交换服务器:25
聊天服务器:5000
P478
127.0.0.1这个IP有特殊意义,可以代表“本机IP”
P545
public<T extends Animal> void takeThing(ArrayList<T> list)
public void takeThing(ArrayList<Animal> list)
二者是不一样的,前者表示任何被声明为Animal或Animal的子型,后者代表只有ArrayList<Animal>是合法的
P563
equals()与hashCode()
P572
数组的类型是在运行期间检查的,但集合类型检查只会发生在编译期间
takeAnimals(ArrayList<Animal> animals)方法不能使用animals不能为ArrayList<Dog>类型
P574
takeAnimals(ArrayList<? extends Animal> animals)
使用带<?>的类型时,编译器不会让你加任何东西到集合里
P661
String的不变性
String str="0";
for(int i=1;i<10;i++){
str+=i;
}
实际上会创建出10个String对象,虚拟机会把它放到名为“String pool”的特殊存储区中,如果已经出现同值的String,虚拟机是不会重复建立String ,只会引用已存在者。
String Poor不受Garbage Collection管理