在本文中, 我们讨论了一些最重要的Java面试问题和答案, 以使你在面试中走到最前沿。 Java是最流行和广泛使用的编程语言和平台之一。 Java是快速, 可靠和安全的。从台式机到Web应用程序, 从科学超级计算机到游戏机, 从手机到Internet, 每个角落都使用Java。如果你想脱颖而出, 这就是为什么你应该掌握这些问题的原因。
让我们先来看看一些最常见的Java面试问题,
- 我们可以在Java中重载或重写静态方法吗?
- 为什么在Java中main方法是静态的?
- 如果从main方法中删除static修饰符会怎样?
- 在以下情况下, Java中的变量范围是什么?
- Java中的" this"关键字是什么?
- 什么是抽象类? Java中的抽象类与C ++有何相似或不同?
- 每个类的超类是哪个类?
- 我们可以重载main()方法吗?
- 什么是对象克隆?
- C ++中的继承与Java有何不同?
- 为什么不能通过更改Java中的返回类型来实现方法重载?
- 我们可以覆盖Java中的私有方法吗?
- 什么是空白最终变量?
- Java中的" super"关键字是什么?
- Java中的静态变量是什么?
- Java中的HashMap和HashTable之间的差异。
- Java对象如何存储在内存中?
- Java中缺少哪些C ++功能?
文章图片
因此, 让我们开始学习Java面试问题集。
Q1。我们可以吗Java中的重载或重写静态方法?
- 覆盖:覆盖与运行时多态有关。子类(或派生类)在运行时提供超类(或基类)中方法的特定实现。
- 重载:重载与编译时(或静态)多态性有关。此功能允许不同的方法具有相同的名称, 但具有不同的签名, 尤其是输入参数的数量和输入参数的类型。
- 我们可以重载静态方法吗?答案是'是'。我们可以有两个或多个具有相同名称的静态方法, 但输入参数不同
- 我们可以覆盖Java中的静态方法吗?我们可以在子类中声明具有相同签名的静态方法, 但由于不会存在任何运行时多态性, 因此不认为它是重写的。因此答案是'没有'。静态方法不能被覆盖, 因为方法覆盖仅发生在方法的动态(即运行时)查找的上下文中。静态查找静态方法(按其名称)(即在编译时)。
该方法是静态的, 因为否则会产生歧义:应调用哪个构造函数?特别是如果你的类看起来像这样:
public class JavaClass
{
protected JavaClass(int x)
{}
public void main(String[] args)
{}
}
JVM是否应该调用新的JavaClass(int)? x应该通过什么?如果不是, JVM是否应该在不运行任何构造函数方法的情况下实例化JavaClass?因为这将使整个类处于特殊情况–有时你有一个尚未初始化的实例, 因此必须在每个可以调用的方法中进行检查。对于JVM, 在调用入口点之前必须实例化一个类, 因此存在太多的边缘情况和歧义。这就是为什么main是静态的原因。
Q3。如果从main方法中删除static修饰符会怎样?
程序编译成功。但是在运行时会引发错误" NoSuchMethodError"。
Q4。是什么变量范围在以下情况下在Java中?
- 成员变量(类级别范围):成员变量必须在类内部(在任何函数外部)声明。可以在课堂上的任何地方直接访问它们
- 局部变量(方法级别范围):在方法内部声明的变量具有方法级别范围, 并且无法在方法外部访问。
- 循环变量(块作用域):方法中在括号" {"和"}"对内声明的变量的作用域仅包含括号。
在实例方法或构造函数中, 这是对当前对象的引用-当前对象正在调用其方法或构造函数。你可以使用此实例方法或构造函数引用当前对象的任何成员。
此关键字的用法
- 用于引用当前类的实例变量。
- 调用当前类的构造函数。
- 可以在方法调用中将其作为参数传递。
- 可以在构造函数调用中将其作为参数传递。
- 用于返回当前的类实例。
- 用于调用当前的类方法(隐式)
抽象类是包含一个或多个抽象方法的类。抽象方法是已声明但不包含任何实现的方法。抽象类可能无法实例化, 并且需要子类为抽象方法提供实现。
- 像C ++一样, 在Java中, 无法创建抽象类的实例, 但是我们可以引用抽象类类型。
- 像C ++一样, 抽象类可以包含Java中的构造函数。当创建继承类的实例时, 将调用抽象类的构造函数
- 在Java中, 我们可以有一个没有任何抽象方法的抽象类。这使我们能够创建无法实例化但只能继承的类。
- 抽象类也可以具有最终方法(无法覆盖的方法)。例如, 以下程序可以编译并正常运行。
对象类别
Q8。我们可以重载main()方法吗?
Java中的主要方法不是外星方法。除了main()就像其他任何方法一样, 并且可以类似的方式重载之外, JVM总是在寻找方法签名来启动程序。
- 普通的main方法充当JVM开始执行程序的入口。
- 我们可以重载Java中的main方法。但是, 当我们运行你的程序时, 该程序不会执行重载的main方法, 我们只需要从实际的main方法中调用重载的main方法即可。
对象克隆是指创建原始对象的精确副本。如果一个类需要支持克隆, 则它必须实现java.lang.Cloneable接口, 并重写Object类中的clone()方法。 clone()方法的语法为:
protected Object clone() throws CloneNotSupportedException
如果对象的类未实现Cloneable接口, 则会抛出异常" CloneNotSupportedException"。
Q10。怎么C++中的继承不同于Java?
- 在Java中, 所有类都直接或间接地从Object类继承。因此, Java中始终只有一个类的继承树, 而Object类是该树的根。
- 在Java中, 祖父母类的成员不可直接访问。看到这个事实更多细节。
- Java中受保护成员访问说明符的含义有所不同。在Java中, 即使B不是从A继承(它们都必须在同一个包中), 也可以在同一包的其他" B"类中访问" A"类的受保护成员。
- Java用途延伸继承关键字。与C ++不同, Java不提供诸如public, protected或private之类的继承说明符。因此, 我们不能更改Java中基类成员的保护级别, 如果某些数据成员在基类中是公共的或受保护的, 则它在派生类中仍是公共的或受保护的。与C ++一样, 在派生类中不能访问基类的私有成员。
与C ++不同, 在Java中, 我们不必记住那些继承规则, 它们是基类访问说明符和继承说明符的组合。 - 在Java中, 默认情况下方法是虚拟的。在C ++中, 我们显式使用virtual关键字。看到这个事实更多细节。
- Java使用一个单独的关键字接口用于接口, 以及抽象抽象类和抽象函数的关键字。
- 与C ++不同, Java不支持多重继承。一个类不能从多个类中继承。但是, 一个类可以实现多个接口。
- 在C ++中, 会自动调用父类的默认构造函数, 但是如果要调用父类的参数化构造函数, 则必须使用初始化列表。像C ++一样, 父类的默认构造函数在Java中会自动调用, 但是如果要调用参数化的构造函数, 则必须使用super来调用父构造函数。
Q11。为什么不能通过更改Java中的返回类型来实现方法重载?
在C++和Java中, 仅在返回类型上有所不同的函数不能重载。函数的返回类型不是编译器生成的用于唯一标识每个函数的错误名称的一部分。参数编号, 参数类型和参数序列是用于为每个函数生成唯一的错误名称的参数。基于这些唯一的错误名称, 即使名称相同(重载), 编译器也可以理解要调用的函数。
Q12。我们可以覆盖Java中的私有方法吗?
不可以, 因为不能从其他任何类中看到私有方法, 所以不能覆盖它。
Q13。什么是空白最终变量?
Java中的最终变量只能分配一次值, 我们可以在声明中或以后分配值。
final int i = 10;
i = 30;
//Error because i is final.
【Java编程面试常见问题分享和解析S2】一种空白决赛Java中的变量是MongoDB声明期间未初始化的变量。以下是空白决赛的简单示例。
//A simple blank final example
final int i;
i = 30;
Q14。什么是Java中的" super"关键字?
Java中的super关键字是一个引用变量, 用于引用父类对象。关键字" super"以继承的概念出现。每当你创建子类的实例时, 都会隐式创建父类的实例, 即由超级引用变量引用。
使用Java超级关键字的各种情况:
- super用于引用直接父实例变量
- super用于调用父类方法
- super()用于调用直接父级构造函数
java中的static关键字主要用于内存管理。我们可以将Java静态关键字与变量, 方法, 块和嵌套类一起使用。 static关键字比该类的实例属于该类。
静态可以是:
- 变量(也称为类变量)
- 方法(也称为类方法)
- 块
- 嵌套类
1. HashMap不同步。它不是线程安全的, 没有适当的同步代码就无法在许多线程之间共享, 而哈希表是同步的。它是线程安全的, 可以与许多线程共享。
2. HashMap允许一个null键和多个null值, 而Hashtable不允许任何null键或值。
3.如果不需要线程同步, 通常首选HashMap而不是HashTable
Q17。 Java怎么样在内存中存储对象?
在Java中, 所有对象都在堆。这不同于C++, 在C++中, 可以在栈或堆上为对象分配内存。在C++中, 当我们使用new()分配abject时, 对象将分配给堆, 否则分配给栈(如果不是全局或静态)。
在Java中, 当我们仅声明类类型的变量时, 仅创建引用(未为该对象分配内存)。要将内存分配给对象, 我们必须使用new()。因此, 对象总是在堆上分配内存。
Q18。 Java中缺少哪些C++功能?
在看到答案之前, 请尝试自行回答–
也可以看看:
- Java面试常见问题套装1
- Java专业人员的面试问题
- Java多选题
- 练习编码问题
- Java文章
推荐阅读
- 如何在Unix或Linux中使用管道()
- 用于数据分析的Violin Plot用法详解
- ==和is运算符在Python中的区别
- jQuery post()方法用法示例介绍
- 8085程序将灰度数字转换为二进制
- 算法题(Knight巡回问题的Warnsdorff算法实现)
- 系统之家官网windows764位旗舰版系统最新推荐
- 光盘安装win7系统步骤制作详细说明
- 安装系统 重装系统windows764位旗舰版图文详细教程图解