- 当某个对象被 java 虚拟机察觉不会被使用到,该对象就会被标记成可回收的。如果内存开始不足,垃圾收集器就会启动来清理垃圾、回收空间,让空间能够再次被利用。
- 任何变量只要加上 public、static 和 final,基本上都会变成全局变量取用的常数。
- 事实上没有对象变量这样的东西存在,只要引用到对象的变量,对象引用变量保存的是存取对象的方式。
- 数组是个对象,不管里面放的是不是 primitive 主数据类型。
- java 是通过值传递的,也就是通过拷贝传递,方法无法改变调用方所传入的参数。
- 在创建一个类之前我们需要写出下面三种东西:伪码、测试码、真实码。
- 标准版的扩展都以 javax 作为包名称的开头。
- import 和 C 的 include 并不相同,运用 import 只是帮你省下每个类前面的包名称而已。程序不会英文用来 import 而变大或变慢。
- 抽象类的产生源于有些类不应该被初始化,比如动物类应该是什么?
- 任何从
ArrayList<Object>
取出的东西都会被当作 Object 类型的引用而不管它原来是什么。而且编译器是根据引用类型来判断哪些方法可以调用,而不是根据 Object 实际的类型。 - 多重继承会产生 “致命方块 " 问题,即两个及以上的直接父类拥有相同的方法,子类不知道应该调用哪个方法。
- 接口解决致命方块的方法很简单:把全部方法设为抽象的,如此一来,子类就得实现这个此方法,因此 java 虚拟机在执行期间就不会搞不清楚要用哪一个继承版本。
- 在 java 中,程序员会在乎内存中的两个区域:对象的生存空间堆 (heap) 和方法调用及变量的生存空间 (stack)。
- 不管对象是否声明或创建,如果局部变量是个对该对象的引用,只有变量本身会放在栈上,对象本身只会存在于堆上。
- 实例变量声明在类中方法之外的地方,局部变量声明在方法或方法的参数上。
- 构造函数在执行的时候,第一件事是去执行它的父类的构造函数,这会连锁反应到 Object 这个类为止。因为如果我们没有调用 super (),编译器会帮我们加上 super () 的调用。
- 基本数据类型有默认值,而包装类则没有默认值。
- 编译器不会注意 RuntimeException 类型的异常,它所关心的是称为检查异常的异常。
- 内部类可以使用外部所有的方法和变量,就算是私有的也一样可以使用。
- 如果某实例变量不能或不应该被实例化的,因为有些变量要在执行期当场创建才有意义。这个时候需要把它标记为 transient (瞬时) 的,transient 的引用变量会以 null 返回,而不管存储当时它的值是什么。恢复时会被赋值为 null 的对象引用或基本数据类型的默认值。
- 一个不可序列化的父类,其子类可以是可序列化的。
- 解序列化时新的对象会被配置到堆上,但构造函数不会执行,不然会抹去对象的状态。
- 静态变量不会被序列化,因为所有对象都是共享同一份静态变量值。当对象还原时,静态变量会恢复成类中原本的样子,而不是存储时的样子。
- 将 FileWriter 链接到 BufferedWriter 可以提升效率,因为 BufferedWriter 可以暂存一堆数据,然后到满的时候再实际写入键盘,这样可以减少对磁盘的操作。
- File 对象代表文件的路径,而不是文件本身。
- 对象的状态并非只能用序列化来存储,也可以使用 transient 修饰存储。
- java 的好处就在于大部分的输入 / 输出工作并不在乎链接串流的上游实际是什么。也就是说可以使用 BufferedReader 而不管是来自串流来自文件或 socket。
- 调度器在不同的 java 虚拟机上有不同的做法,就算是同一个程序在同一台机器上运行也会有不同的遭遇。
- 对泛型来说,extends 这个关键词代表 "是一个…",且适用于类和接口。
- hashcode 是用来缩小寻找成本的,但最后还是要用 equals () 才能认定是否真的找到了相同的项目。如果两个对象有相同的 hashcode 值,它们不一定是相等的。但若两个对象相等,则 hashcode 值一定要相等。
- 数组的类型是运行时检查的,但集合的类型检查只会发生在编译期间。
- JAR 就是 JavaARchive,这种文件是个 pkzip 格式的文件,它能让你的一组类文件包装起来,所以交付时只需一个 JAR 文件。
- JWS (Java Web Start) 程序由两个部分组成:可执行的 JAR 文件和.jnlp 文件。.jhlp 文件是用来描述 JWS 应用程序的 XML 文件,它有 target 指定 JAR 的名称和位置,以及带有 main () 的类名称。
上一篇

2023-10-12
本篇

2023-10-12