目录
为什么 Java 被称为“平台独立的编程语言”?
平台独立性意味着我们程序的执行不依赖于操作系统的类型(无论是 Linux、Windows 还是 Mac 等)。我们只需要编译一次代码,就可以在任何系统上运行它(而在 C/C++ 中,我们需要在每一台运行代码的机器上重新编译)。Java 是一种同时基于编译器和解释器的语言。我们的 Java 源代码首先通过 javac 编译器编译成字节码。这种字节码可以很容易地通过 JVM 转换成等价的机器码。JVM(Java 虚拟机)在我们安装的所有操作系统中都可用。因此,由 javac 生成的字节码是通用的,可以在任何操作系统上转换为机器码,这就是 Java 平台独立的原因。
解释 Java 中的 Final 关键字?
Java 中的 final 关键字用于限制对变量、类和方法的使用。
- 变量:final 变量的值是常量,我们无法修改它。
- 方法:我们无法重写 final 方法。
- 类:我们无法继承 final 类。
点击这里查看详情。
什么时候使用 super 关键字?
super 关键字用于引用:
- 直接父类构造函数
- 直接父类变量
- 直接父类方法
点击这里查看详情。
StringBuffer 和 String 有什么区别?
String 是一个不可变类,这意味着一旦创建,我们就无法修改其内容。而 StringBuffer 是一个可变类,意味着我们可以稍后修改其内容。每当我们修改 String 对象的内容时,它会创建一个新的字符串并引用它,而不会修改现有的字符串。这就是为什么 StringBuffer 的性能优于 String 的原因。
点击这里查看详情。
为什么 Java 不支持多重继承?
Java 支持多重继承,但不是通过类,而是通过接口。不支持类多重继承的原因是为了避免由此产生的冲突和复杂性,并保持 Java 是一种简单的面向对象语言。如果我们回想一下 C++ 中的这种情况,存在一个特殊的多重继承情况(菱形问题),即我们有两个方法冲突的类进行多重继承。因此,Java 开发者决定避免此类冲突,根本不允许通过类进行多重继承。
顶层类可以是 private 或 protected 的吗?
Java 中的顶层类不能是 private 或 protected 的,但内部类可以。不将顶层类设为 private 的原因很明显,因为没有人能看到 private 类,因此也就无法使用它。将类声明为 protected 也没有任何意义。默认可见性和 protected 可见性之间的唯一区别在于,我们可以通过继承在任何包中使用它。由于 Java 中没有包继承的概念,因此将类定义为 protected 与默认可见性没有任何区别。
Java 异常处理中 ‘throw‘ 和 ‘throws‘ 有什么区别?
以下是两者之间的区别:
- throw 关键字用于从任何方法或静态块中抛出异常,而 throws 用于指示该方法可能抛出哪种异常。
- 如果任何方法抛出已检查异常,那么调用者可以处理该异常(使用 try catch 块),或者可以在方法声明中声明另一个 ‘throws‘ 子句来重新抛出它。
- throw 子句可以在代码的任何部分使用,只要你觉得需要向调用方法抛出特定的异常。
例如:
throw
throw new Exception("You have some exception")
throw new IOException("Connection failed!!")
throws
throws IOException, NullPointerException, ArithmeticException
finalize() 方法是什么?
与 C++ 不同,在 Java 中我们不需要显式地销毁对象。“垃圾回收器”会自动为我们完成这项工作。垃圾回收器会检查对象是否存在引用,如果不存在引用,则假定该对象不再需要,并且可以释放该对象占用的内存。有时对象可能持有非 Java 资源,例如文件句柄或数据库连接,此时我们希望确保在对象被销毁之前也释放这些资源。为了执行此类操作,Java 在 Object 类中提供了 protected void finalize() 方法。我们可以在自己的类中重写此方法并执行所需的任务。在对象被释放之前,Java 运行时会调用该对象的 finalize() 方法。
点击这里了解更多详情。