必备的Java程序员面试宝典_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 必备的Java程序员面试宝典

必备的Java程序员面试宝典

更新时间:2022-03-30 10:06:01 来源:极悦 浏览1257次

1.解释 Java 中的 public static void main(String args[])。

Java 中的 main() 是任何 Java 程序的入口点。它总是写成public static void main(String[] args)。

public:public 是一个访问修饰符,用于指定谁可以访问这个方法。Public 意味着任何类都可以访问此方法。

static:它是 java 中的一个关键字,用于标识它是基于类的。main() 在 Java 中是静态的,因此可以在不创建类实例的情况下访问它。如果 main 不是静态的,那么编译器将抛出一个错误,因为在生成任何对象之前,JVM 调用了main (),并且只能通过类直接调用静态方法。

void:它是方法的返回类型。void 定义不会返回任何值的方法。

main:它是 JVM 搜索的方法的名称,作为仅具有特定签名的应用程序的起点。它是主要执行发生的方法。

String args[] : 传递给main方法的参数。

2.为什么Java是平台无关的?

Java 被称为平台无关,因为它的字节码可以在任何系统上运行,而不管其底层操作系统如何。

3.为什么 Java 不是 100% 面向对象的?

Java 不是 100% 面向对象的,因为它使用了八种原始数据类型,例如 boolean、byte、char、int、float、double、long、short,它们不是对象。

4.Java 中的包装类是什么?

包装类将 Java 原语转换为引用类型(对象)。每个原始数据类型都有一个专用于它的类。这些被称为包装类,因为它们将原始数据类型“包装”到该类的对象中。请参阅下图,它显示了不同的原始类型、包装类和构造函数参数。

5.Java 中的 equals() 和 == 有什么区别?

Equals() 方法定义在 Java 的 Object 类中,用于检查业务逻辑定义的两个对象的相等性。

Java中的“==”或相等运算符是Java编程语言提供的二元运算符,用于比较原语和对象。public boolean equals(Object o)是 Object 类提供的方法。默认实现使用 == 运算符来比较两个对象。例如:方法可以像 String 类一样被覆盖。equals() 方法用于比较两个对象的值。

6.Java中反射的重要性是什么?

Reflection 是一个运行时 API,用于检查和更改方法、类和接口的行为。Java 反射是一个非常有用的强大工具。Java 反射允许您在运行时分析类、接口、字段和方法,而无需知道它们在编译时被调用什么。反射也可用于创建新对象、调用方法和获取/设置字段值。可以通过创建具有完全限定名称的可扩展性对象的实例来使用外部的、用户定义的类。调试器还可以使用反射来检查类的私有成员。

7.如何不允许在 Java 中对类的属性进行序列化?

NonSerialized 属性可用于防止成员变量被序列化。

如果可能,您还应该使可能包含安全敏感数据的对象不可序列化。如果必须序列化对象,则将 NonSerialized 属性应用于存储敏感数据的某些字段。如果您不从序列化中排除这些字段,则它们存储的数据将对任何具有序列化权限的程序可见。

8.解释 Java 中的术语“双大括号初始化”?

双大括号初始化是一个 Java 术语,指的是两个独立进程的组合。这里使用了两个大括号。第一个大括号创建一个匿名内部类。第二个大括号是一个初始化块。当这两者一起使用时,它被称为双括号初始化。内部类具有对封闭外部类的引用,通常使用“this”指针。它用于在单个语句中进行创建和初始化。它通常用于初始化集合。它减少了代码并使其更具可读性。

9.为什么说String类的length()方法返回的结果不准确?

String 类的 length() 方法不会返回准确的结果,因为

它只是考虑了 String 中的字符数。换言之,BMP(Basic Multilingual Plane)之外的码点,即U+10000或以上的码点将被忽略。

其原因是历史性的。Java 最初的目标之一是将所有文本视为 Unicode。然而,Unicode 当时并没有在 BMP 之外定义代码点。在 Unicode 指定此类代码点时修改 char 为时已晚。

10.为什么Java中不使用指针?

Java 不使用指针,因为它们不安全并增加了程序的复杂性。由于 Java 以其代码简单而著称,因此添加指针的概念将是矛盾的。此外,由于JVM负责隐式内存分配,因此为了避免用户直接访问内存,Java中不鼓励使用指针。

11.Java中的JIT编译器是什么?

JIT 代表 Java 中的即时编译器。它是一个帮助将 Java 字节码转换为直接发送到处理器的指令的程序。默认情况下,JIT 编译器在 Java 中启用,并在调用 Java 方法时激活。然后,JIT 编译器将被调用方法的字节码编译为本机机器码,“及时”编译以执行。编译方法后,JVM 直接调用该方法的编译代码,而不是解释它。这就是为什么它经常负责 Java 应用程序在运行时的性能优化。

12.解释 Java 中的术语“双大括号初始化”?

双大括号初始化是一个 Java 术语,指的是两个独立进程的组合。这里使用了两个大括号。第一个大括号创建一个匿名内部类。第二个大括号是一个初始化块。当这两者一起使用时,它被称为双括号初始化。内部类具有对封闭外部类的引用,通常使用“this”指针。它用于在单个语句中进行创建和初始化。它通常用于初始化集合。它减少了代码并使其更具可读性。

13.Java中的构造函数链是什么?

在 Java 中,构造函数链接是相对于当前对象从另一个构造函数调用的过程。只有通过子类构造函数首先负责调用超类的构造函数的遗留系统才能实现构造函数链接。构造函数链中可以有任意数量的类。构造函数链可以通过两种方式实现:

在同一个类中使用 this()

从使用 super() 的基类

14.为什么 Java 字符串本质上是不可变的?

在 Java 中,字符串对象本质上是不可变的,这意味着一旦创建了字符串对象,它的状态就不能被修改。每当您尝试更新该对象的值而不是更新该特定对象的值时,Java 都会创建一个新的字符串对象。Java String 对象是不可变的,因为 String 对象通常缓存在 String 池中。由于字符串文字通常在多个客户端之间共享,因此来自一个客户端的操作可能会影响其余客户端。它增强了应用程序的安全性、缓存、同步和性能。

15.什么是运行时多态性或动态方法分派?

在 Java 中,运行时多态性或动态方法分派是在运行时而不是在编译时解决对覆盖方法的调用的过程。在这个过程中,通过超类的引用变量调用被覆盖的方法。让我们看一下下面的示例以更好地理解它。

class Car {
void run()
{
System.out.println(“car is running”); 
}
}
class Audi extends Car {
void run()
{
System.out.prinltn(“Audi is running safely with 100km”);
}
public static void main(String args[])
{
Car b= new Audi();    //upcasting
b.run();
}
}

16.Java中的封装是什么?

封装是一种将数据(变量)和代码(方法)作为一个单元绑定在一起的机制。在这里,数据对外界是隐藏的,只能通过当前的类方法访问。这有助于保护数据免受任何不必要的修改。我们可以通过以下方式在 Java 中实现封装:

将类的变量声明为私有的。

提供公共的 setter 和 getter 方法来修改和查看变量的值。

17.Java中的组合是什么?

组合再次是聚合的一种特殊形式,我们可以将其称为“死亡”关系。它是一种强大的聚合类型。子对象没有生命周期,如果父对象删除,所有子对象也将被删除。让我们再举一个 House 和 room 之间关系的例子。房子可以包含多个房间,房间没有独立的生命,任何房间不能属于两个不同的房子,如果我们删除房子房间会自动删除。

18.Java中的对象克隆是什么?

Java 中的对象克隆是创建对象的精确副本的过程。它基本上意味着能够创建与原始对象具有相似状态的对象。为了实现这一点,Java 提供了一个方法clone () 来利用这个功能。此方法创建当前对象的类的新实例,然后使用与相应字段完全相同的内容初始化其所有字段。要对象 clone(),必须实现标记接口java.lang.Cloneable以避免任何运行时异常。您必须注意的一件事是 Object clone() 是一种受保护的方法,因此您需要覆盖它。

19.什么是 Java 中的复制构造函数?

复制构造函数是一个成员函数,用于使用同一类的另一个对象初始化一个对象。尽管在 Java 中不需要复制构造函数,因为所有对象都是通过引用传递的。此外,Java 甚至不支持自动按值传递。

20.cookie 在 Servlet 中是如何工作的?

Cookie 是服务器发送给客户端的文本数据,并保存在客户端本地计算机上。

Servlet API 通过实现 Serializable 和 Cloneable 接口的 javax.servlet.http.Cookie 类提供 cookie 支持。

提供了 HttpServletRequest getCookies() 方法来从请求中获取 Cookies 数组,由于没有向请求添加 Cookie 的意义,因此没有设置或向请求添加 cookie 的方法。

类似地,提供了 HttpServletResponse addCookie(Cookie c) 方法来在响应头中附加 cookie,cookie 没有 getter 方法。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>