【java面试经(架构师&设计师)-第4课】java基础常识
发布日期:2021-05-10 03:44:41 浏览次数:18 分类:精选文章

本文共 5109 字,大约阅读时间需要 17 分钟。

技术清单

Java基础知识

1. Java中"=="与"equals"的区别,equals方法是怎样实现的?

在Java中,"=="用于对象的引用比较,而"equals"方法用于对象的值比较。Two objects are considered equal if they are instances of the same class and their corresponding fields are equal. The equals() method is typically implemented in Java classes to check for object equality based on relevant fields or properties.

2. &和&&的区别?||和||的差别?

& is a bitwise AND operator, which operates on the binary representations of the operands. && is a logical AND operator that evaluates to true only if both operands are true. || is a logical OR operator that evaluates to true if at least one operand is true. &&= is a combined assignment and logical AND operator.

3. static与final, finally, finalize关键字的区别是什么,用法有哪些?

  • static: A static keyword is used to declare static members of a class, including static variables and methods. Static members are associated with the class, not with any instance.
  • final: A final keyword is used to indicate that a class, method, or variable cannot be modified after it is declared. It is often used to create immutable objects.
  • finally: A finally block is used to execute code regardless of whether an exception was thrown or not. It is typically used for cleanup operations.
  • finalize: The finalize() method is called by the garbage collector when it is time to finalize the objects of the class. It can be used to perform cleanup tasks.

4. 不同编码的字符串之间是怎么转换的?比如,怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

在Java中,可以使用String类的编码方法来进行编码转换。例如,可以将一个GB2312编码的字符串转换为ISO-8859-1编码的字符串使用如下方法:

String gb2312Str = "测试";
String iso8859Str = new String(gb2312Str.getBytes(StandardCharsets.GB_2312), StandardCharsets.ISO_8859_1);

5. Error和Exception有什么区别,常见的Exception有哪些?平时是怎样处理Error和Exception的?

  • Error: Error表示异常情况,通常是严重的错误,可能导致程序崩溃。例如,OutOfMemoryError。
  • Exception: Exception表示异常情况,通常是程序运行中的错误或异常,可能由程序本身的错误或环境问题引起。例如,NullPointerException。

常见的Exception包括:

  • IOException
  • SQLException
  • ClassNotFoundException
  • NoSuchMethodException
  • IllegalArgumentException

在处理Error和Exception时,我们可以使用try-catch-finally-finally块来捕捉异常并进行处理。对于Error,通常无法通过catch块处理,但可以使用Error类来进行处理。

6. 面向对象的三个基本元素,五大基本原则,如何理解,为什么要这样设计?

  • 三个基本元素

    • 实例:每个对象都是一个具体的实例,具有状态和行为。
    • 类:定义了对象的类型,包括属性和方法。
    • 方法:定义了对象的行为。
  • 五大基本原则

  • 抽象性:允许我们只关注对象的行为,而不必关注具体实现。
  • 封装性:代码和数据被封装在一起,提高代码的安全性和可维护性。
  • 继承性:允许我们基于已有的类创建新类,减少重复代码。
  • 多态性:同一个方法可以在不同对象中有不同的行为。
  • 类型安全性:通过严格的类型检查,确保程序的安全性和正确性。

这些原则的设计目的是为了提高程序的可扩展性、可维护性和可靠性。

7. 类、抽象类、接口之间的区别和关系是什么,支持多继承吗?

  • :具体的对象类型,具有具体的属性和方法。
  • 抽象类:定义了一个类的结构,但没有具体的实现,通常用于多个类之间的继承。
  • 接口:定义了类或接口的行为和约束,不涉及实现。

在Java中,类可以实现多个接口,但不能直接支持多继承,因为Java不支持多继承。然而,可以通过接口继承来模拟多继承的功能。

8. Java中private、protected、public和default的区别,支持继承吗?

  • private:只能在类内部访问,不能被继承。
  • protected:可以在类及其子类中访问,适用于继承。
  • public:可以在任何地方访问,适用于公开的API。
  • default:在本类中使用,不能被继承。

在Java中,private和protected允许继承,public和default则不支持继承。

9. 值传递和引用传递的区别?

  • 值传递:将对象的值传递给方法,方法接收的是拷贝,而不是原对象。
  • 引用传递:将对象的引用传递给方法,方法接收的是指向对象的引用,方法可以修改原对象的数据。

10. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

  • 重载:在同一个类中,方法名相同,但参数类型不同,属于编译时绑定。
  • 重写:在子类中,方法名和参数类型与超类中的方法完全相同,属于运行时绑定。

重载的方法不能根据返回类型进行区分,因为它们是根据参数类型进行区分的。

技术解析

一、Java中"=="与"equals"的区别,equals方法是怎样实现的?

在Java中,"=="用于引用比较,而"equals"方法用于值比较。Two objects are considered equal if they are instances of the same class and their corresponding fields are equal. The equals() method is typically implemented in Java classes to check for object equality based on relevant fields或properties。

例如,String类的equals方法实现如下:

public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
String other = (String) obj;
return hashCode == other.hashCode();
}

二、&和&&的区别?||和||的差别?

  • &:是按位与运算符,用于处理二进制位。
  • &&:是逻辑与运算符,只有当两个操作数都为true时,结果才为true。
  • ||:是逻辑或运算符,只要有一个操作数为true,结果就为true。
  • &&=:是与赋值运算符,用于同时赋值和进行逻辑与操作。

例如:

int a = 10;
int b = 20;
if (a & b) { // 10 & 20 = 0
System.out.println("a & b = 0");
}
if (a && b) { // 10 && 20 = false
System.out.println("a && b = false");
}
if (a || b) { // 10 || 20 = true
System.out.println("a || b = true");
}
if (a &= b) { // a = 10, b = 20; a &= b => a = 10
System.out.println("a &= b => a = 10");
}

三、static与final, finally, finalize的区别?

  • static:用于声明与类关联的静态成员,如静态变量和方法。
  • final:用于声明不能被修改的类、方法或变量,常用于创建不可变对象。
  • finally:用于在异常处理后执行的代码块,通常用于资源释放或异常处理。
  • finalize:由垃圾回收器在对象被回收时调用,用于对象的最终化处理。

四、不同编码的字符串转换

在Java中,可以使用String类的编码方法来进行编码转换。例如,将GB2312编码的字符串转换为ISO-8859-1编码的字符串:

String gb2312Str = "测试";
String iso8859Str = new String(gb2312Str.getBytes(StandardCharsets.GB_2312), StandardCharsets.ISO_8859_1);

五、Error和Exception的区别

  • Error:表示严重的错误,通常导致程序崩溃,例如OutOfMemoryError。
  • Exception:表示异常情况,通常由程序本身或环境问题引起,例如NullPointerException。

六、面向对象的基本元素和五大原则

  • 三个基本元素

    • 实例:每个对象都是一个具体的实例,具有状态和行为。
    • 类:定义了对象的类型,包括属性和方法。
    • 方法:定义了对象的行为。
  • 五大基本原则

  • 抽象性:允许我们只关注对象的行为。
  • 封装性:代码和数据被封装在一起。
  • 继承性:允许我们基于已有的类创建新类。
  • 多态性:同一个方法可以在不同对象中有不同的行为。
  • 类型安全性:通过严格的类型检查,确保程序的安全性和正确性。

七、类、抽象类、接口之间的关系

  • :具体的对象类型,具有具体的属性和方法。
  • 抽象类:定义了一个类的结构,但没有具体的实现。
  • 接口:定义了类或接口的行为和约束。

Java支持多接口继承,但不支持多继承。

八、访问控制修饰符的区别

  • private:只能在类内部访问。
  • protected:可以在类及其子类中访问。
  • public:可以在任何地方访问。
  • default:在本类中使用,不能被继承。

九、值传递和引用传递

  • 值传递:传递对象的拷贝,方法接收的是拷贝。
  • 引用传递:传递对象的引用,方法可以修改原对象的数据。

十、重载和重写的区别

  • 重载:在同一个类中,方法名相同,但参数类型不同。
  • 重写:在子类中,方法名和参数类型与超类中的方法完全相同。

重载的方法不能根据返回类型进行区分。

上一篇:【java面试经(架构师&设计师)-第5课】JAVA基础之多线程(一)
下一篇:【java面试经(架构师&设计师)-第3课】java虚拟机和内存优化

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月02日 19时48分45秒