【1】进大厂必须掌握的面试题-Java面试-基础
Java面试基本问题
Q1。解释JDK,JRE和JVM?
JDK | JRE | JVM |
---|---|---|
Java开发工具包。 | Java运行时环境。 | Java虚拟机。 |
它是编译,记录和打包Java程序所必需的工具。 | JRE是指可以在其中执行Java字节码的运行时环境。 | 它是一台抽象机。该规范提供了可以在其中执行Java字节码的运行时环境。 |
它包含JRE +开发工具。 | 它是实际存在的JVM的实现。 | JVM遵循三种表示法:规范,实现和 运行时实例。 |
Q2。在Java中解释public static void main(String args [])。
Java中的main()是任何Java程序的入口点。它总是写为public static void main(String [] args)。
- public:public是访问修饰符,用于指定谁可以访问此方法。Public表示任何类都可以访问此方法。
- static:它是java中的关键字,标识它是基于类的。main()在Java中被设为静态,因此无需创建Class的实例即可对其进行访问。如果main不是静态的,那么编译器将抛出错误,因为JVM在创建任何对象之前调用main(),并且只能通过该类直接调用静态方法。
- void:这是方法的返回类型。Void定义了不会返回任何值的方法。
- main:这是JVM搜索的方法的名称,它是仅具有特定签名的应用程序的起点。这是主要执行发生的方法。
- String args []:这是传递给main方法的参数。
Q3。为什么Java是平台独立的?
Java之所以被称为平台无关的,是因为Java的字节码可以在任何系统上运行,而不管其底层操作系统什么。
Q4。为什么Java不是100%面向对象的?
Java不是100%面向对象的,因为它使用了不是对象的八种原始数据类型,例如布尔值,字节,字符,整数,浮点数,双精度型,长型,短型。
Q5。Java中的包装器类是什么?
包装器类将Java原语转换为引用类型(对象)。每个原始数据类型都有一个专用于它的类。这些称为包装器类,因为它们将原始数据类型“包装”到该类的对象中。请参考下图,该图显示了不同的原始类型,包装器类和构造函数参数。
Q6。Java中的构造函数是什么?
在Java中,构造函数是指用于初始化对象的代码块。它必须与该类具有相同的名称。而且,它没有返回类型,并且在创建对象时会自动调用它。
有两种类型的构造函数:
- 默认构造函数:在Java中,默认构造函数是不接受任何输入的构造函数。换句话说,默认构造函数是无参数构造函数,如果用户没有定义其他构造函数,则默认情况下将创建该构造函数。其主要目的是用默认值初始化实例变量。而且,它主要用于对象创建。
- 参数化构造函数: Java中的参数化构造函数是能够使用提供的值初始化实例变量的构造函数。换句话说,采用参数的构造函数称为参数化构造函数。
Q7。Java中的单例类是什么?如何使单例类成为单例?
Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。可以通过将构造函数设为私有来使类成为单例。
Q8。Java中的数组列表和向量有什么区别?
数组列表 | 向量 |
---|---|
阵列列表未同步。 | 向量已同步。 |
数组列表不同步,因此速度很快。 | 向量很慢,因为它是线程安全的。 |
如果将元素插入“数组列表”,则它将其数组大小增加50%。 | 向量默认为其数组大小加倍。 |
数组列表未定义增量大小。 | 向量定义增量大小。 |
数组列表只能使用Iterator遍历数组列表。 | 向量可以使用Enumeration和Iterator进行遍历。 |
Q9。在Java中equals()和==有什么区别?
Equals()方法在Java的Object类中定义,用于检查由业务逻辑定义的两个对象的相等性。
Java中的“ ”或相等运算符是Java编程语言提供的二进制运算符,用于比较基元和对象。public boolean equals(Object o)是Object类提供的方法。默认实现使用运算符比较两个对象。例如:方法可以像String类一样被覆盖。equals()方法用于比较两个对象的值。
Q10。Java中的堆和堆栈内存有何区别?
堆和堆栈内存之间的主要区别是:
特征 | 叠放 | 堆 |
---|---|---|
记忆 | 堆栈存储器仅由一个执行线程使用。 | 堆内存由应用程序的所有部分使用。 |
访问 | 堆栈内存不能被其他线程访问。 | 堆中存储的对象可全局访问。 |
内存管理 | 遵循LIFO方式释放内存。 | 内存管理基于与每个对象关联的生成。 |
生命周期 | 存在,直到线程执行结束。 | 堆内存从应用程序执行的开始一直到结束。 |
用法 | 堆栈内存仅包含堆空间中对象的局部原语和引用变量。 | 每当创建对象时,它总是存储在堆空间中。 |
Q11。 什么是Java包?列出软件包的各种优点。
Java中的程序包是捆绑在一起的相关类和接口的集合。通过使用软件包,开发人员可以轻松地将代码模块化并优化其重用。而且,包中的代码可以由其他类导入并重新使用。下面我列出了它的一些优点:
-
软件包有助于避免名称冲突
-
它们提供了更容易的代码访问控制
-
包还可以包含隐藏类,这些隐藏类对外部类不可见,仅在包内使用
-
创建适当的层次结构,使查找相关类更加容易
Q12。为什么在Java中不使用指针?
Java不使用指针,因为它们不安全并且会增加程序的复杂性。由于Java以其简单的代码而闻名,因此添加指针的概念将是矛盾的。此外,由于JVM负责隐式内存分配,因此,为了避免用户直接访问内存,在Java中不建议使用指针。
Q13。 Java中的JIT编译器是什么?
JIT代表Java中的即时编译器。它是一个程序,有助于将Java字节码转换为直接发送到处理器的指令。默认情况下,JIT编译器在Java中启用,并且在调用Java方法时被激活。然后,JIT编译器将被调用方法的字节码编译为本地机器代码,“及时”编译以执行。编译完该方法后,JVM会直接调用该方法的已编译代码,而不是对其进行解释。这就是为什么它经常在运行时负责Java应用程序的性能优化的原因。
Q14。Java中的访问修饰符是什么?
在Java中,访问修饰符是特殊的关键字,用于限制对另一个类中的类,构造函数,数据成员和方法的访问。Java支持四种类型的访问修饰符:
- 默认
- 私人的
- 受保护的
- 公开的
修饰符 | 默认 | 私人的 | 受保护的 | 公开的 |
---|---|---|---|---|
同班 | 是 | 是 | 是 | 是 |
相同的包子类 | 是 | 没有 | 是 | 是 |
相同包装的非子类 | 是 | 没有 | 是 | 是 |
不同的包子类 | 没有 | 没有 | 是 | 是 |
不同的包非子类 | 没有 | 没有 | 没有 | 是 |
Q15。定义一个Java类。
Java中的类是包含所有数据的蓝图。一个类包含用于描述对象行为的字段(变量)和方法。让我们看一看一个类的语法。
class Abc {
member variables // class body methods
}
Q16。Java中的对象是什么,如何创建?
对象是具有状态和行为的现实世界实体。一个对象具有三个特征:
- State
- Behavior
- Identity
使用'new'关键字创建对象。例如:
ClassName obj = new ClassName();
Q17。什么是面向对象编程?
面向对象的编程或通常称为OOP的编程模型或方法是围绕对象而不是逻辑和函数来组织程序。换句话说,OOP主要集中在需要操作的对象上,而不是逻辑上。这种方法对于大型和复杂代码的程序是理想的,并且需要主动更新或维护。
Q18。Java中OOP的主要概念是什么?
面向对象编程或OOP是一种与以下概念相关的编程样式:
-
继承:继承是一个类在其中获取另一类的属性的过程。
-
封装: Java中的封装是一种将数据和代码打包为单个单元的机制。
-
抽象:抽象是向用户隐藏实现细节并仅向用户提供功能的方法。
-
多态性:多态性是变量,函数或对象采取多种形式的能力。
Q19。局部变量和实例变量有什么区别?
在Java中, 局部变量通常在方法,构造函数或块内使用 ,并且仅具有局部作用域。因此,该变量只能在块的范围内使用。拥有局部变量的最大好处是该类中的其他方法甚至都不知道该变量。
例
if(x > 100){
String test = "Edureka";
}
而Java中的 实例变量是绑定到其对象本身的变量。这些变量在类内声明,但在方法外声明 。该类的每个对象都将在使用它时创建它自己的变量副本。因此,对该变量所做的任何更改都不会反映在该类的任何其他实例中,而只会绑定到该特定实例。
class Test{
public String EmpName;
public int empAge;
}
Q20。区分Java中的构造函数和方法?
方法 | 构造函数 |
---|---|
1.用于表示对象的行为 | 1.用于初始化对象的状态 |
2.必须具有返回类型 | 2.没有任何退货类型 |
3.需要显式调用 | 3.隐式调用 |
4.编译器未提供默认方法 | 4.如果该类没有默认构造函数,则由编译器提供 |
5.方法名称可以与类名称相同或不相同 | 5.构造函数名称必须始终与类名称相同 |
Q21。Java中的final关键字是什么?
final是Java中的一个特殊关键字,用作非访问修饰符。最终变量可以在不同的上下文中使用,例如:
- 最终变量
当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用类构造函数可以将值分配给它。
-
最终方法
当方法声明为final时,继承类不能覆盖该方法。
-
最终类
在Java中将一个类声明为final时,任何子类类都不能对其进行扩展,但可以扩展其他类。
Q22。break和continue语句有什么区别?
打破 | 继续 |
---|---|
1.可以在switch和loop(for,while,do While)语句中使用 | 1.只能与循环语句一起使用 |
2.它会使switch或loop语句在执行时终止 | 2.它不会终止循环,但会导致循环跳至下一个迭代 |
3.终止最里面的封闭回路或立即切换 | 3.在嵌套有开关的循环内继续执行将导致执行下一个循环迭代 |
中断示例:
for (int i = 0;i < 5;i++){
if (i == 3){
break;
}
System.out.println(i);
}
示例继续:
for(int i = 0;i < 5;i++){
if(i == 2){
continue;
}
System.out.println(i);
}
Q23。什么是Java中的无限循环?举例说明。
无限循环是Java中的一个指令序列,当不满足功能退出要求时,它会无限循环。这种类型的循环可能是编程错误的结果,也可能是基于应用程序行为的故意行为。一旦应用程序退出,无限循环将自动终止。
例如:
public class InfiniteForLoopDemo{
public static void main(String[] arg) {
for(;;)
System.out.println("Welcome to Edureka!");
// To terminate this program press ctrl + c in the console.
}
}
Q24。Java中的this()和super()有什么区别?
在Java中,super()和this()都是用于调用构造函数的特殊关键字。
this() | super() |
---|---|
1. this()代表一个类的当前实例 | 1. super()表示父/基类的当前实例 |
2.用于调用同一类的默认构造函数 | 2.用于调用父/基类的默认构造函数 |
3.用于访问当前类的方法 | 3.用于访问基类的方法 |
4.用于指向当前的类实例 | 4.用于指向超类实例 |
5.必须是块的第一行 | 5.必须是块的第一行 |
Q25。什么是Java字符串池?
Java字符串池是指存储在堆内存中的字符串的集合。在这种情况下,无论何时创建新对象,字符串池都会首先检查该对象是否已存在于池中。如果存在,则将相同的引用返回到变量,否则将在字符串池中创建新对象,并将返回相应的引用。
Q26。区分Java中的静态方法和非静态方法。
静态方法 | 非静态方法 |
---|---|
1. 方法名称之前必须使用static关键字 | 1.无需在方法名称前使用s tatic关键字 |
2.使用类(className.methodName)进行调用 | 2.可以像任何常规方法一样调用 |
3.他们不能访问任何非静态实例变量或方法 | 3.它可以访问任何静态方法和任何静态变量,而无需创建类的实例 |
Q27。什么是Java中的构造函数链接?
在Java中,构造函数链接是相对于当前对象从另一个构造函数调用一个构造函数的过程。构造器链接只有通过继承才能实现,在传统中,子类构造器负责首先调用超类的构造器。构造函数链中可以有任意多个类。构造器链接可以通过两种方式实现:
- 在同一类中使用this()
- 从基类使用super()
Q28。String,StringBuilder和StringBuffer之间的区别。
因子 | 串 | StringBuilder | 字符串缓冲区 |
---|---|---|---|
储藏区域 | 常量字符串池 | 堆面积 | 堆面积 |
变异性 | 一成不变的 | 可变的 | 可变的 |
线程安全 | 是 | 没有 | 是 |
性能 | 快速 | 更高效 | 效率较低 |
Q29。Java中的类加载器是什么?
该 Java类加载器是JVM(Java虚拟机)是负责加载类文件的一个子集。每当执行Java程序时,类加载器就会首先加载它。Java提供了三个内置的类加载器:
- 引导类加载器
- 扩展ClassLoader
- 系统/应用程序类加载器
Q30。为什么Java字符串本质上是不可变的?
在Java中,字符串对象本质上是不可变的,这仅意味着一旦创建了String对象,就无法修改其状态。每当您尝试更新该对象的值而不是更新该特定对象的值时,Java都会创建一个新的字符串对象。Java String对象是不可变的,因为通常将String对象缓存在String池中。由于字符串文字通常在多个客户端之间共享,因此来自一个客户端的操作可能会影响其余客户端。它增强了应用程序的安全性,缓存,同步和性能。
Q31。数组和数组列表有什么区别?
数组 | 数组列表 |
---|---|
不能包含其他数据类型的值 | 可以包含不同数据类型的值。 |
尺寸必须在申报时定义 | 大小可以动态更改 |
需要指定索引才能添加数据 | 无需指定索引 |
数组未参数化类型 | 数组列表是类型 |
数组可以包含原始数据类型以及对象 | 数组列表只能包含对象,不允许使用原始数据类型 |
Q32。Java中的Map是什么?
在Java中,Map是Util程序包的接口,它将唯一键映射到值。Map接口不是主要Collection接口的子集,因此,其行为与其他Collection类型几乎没有什么不同。以下是Map界面的一些特征:
- 地图不包含重复的键。
- 每个键最多可以映射一个值。
Q33。Java中的集合类是什么?列出其方法和接口。
在Java中,集合是一个框架,用作存储和操作一组对象的体系结构。使用集合可以执行各种任务,例如搜索,排序,插入,操作,删除等。Java集合框架包括以下内容:
- 介面
- 班级
- 方法
下图显示了Java集合的完整层次结构。
如果您面临这些Java面试问题的任何挑战,请在下面的部分中评论您的问题。