来源:Hackernoon 以下是 Java 面试中经常出现的一些问题和答案。
1.什么是Java开发工具包(JDK)?
JDK 是一个软件开发工具包,其中包括开发 Java 应用程序所需的工具和库。2. Java运行时环境(JRE)的作用是什么?
JRE是指Java字节码运行的运行时环境。JRE 维护运行时的文件和库。3. Java虚拟机(JVM)的作用是什么?
JVM 是一个抽象机器,它提供了 Java 字节码可以执行的运行时环境。4. Java 是平台无关的。为什么?
在任何其他编程语言中,源代码被编译为可执行代码,并且该代码可能无法在所有平台上运行。通过使用 JVM,我们可以使任何平台都可以理解字节码,并且该字节码是独立于平台的。尽管每个平台的 JVM 都不同,但 Java 是平台无关的,因为它不依赖于任何类型的平台。5. Java不是100%面向对象的。为什么?
因为Java使用boolean、byte、char、int、float、double、long、short等八种基本数据类型,它们不是对象。6. Java中的构造函数是什么?
构造函数是用于初始化对象的代码块。句法:class DemoClass
{
// constructor name is same as class name
DemoClass()
{
....
}
}
// calls DemoClass() constructor
DemoClass obj = new DemoClass();
例子:
public class ConstructorDemo
{
int a; // class attribute
// create constructor for class ConstructorDemo
ConstructorDemo()
{
a = 26; // initial value for class attribute 'a'
}
public static void main(String[] args)
{
// creating object for ConstructorDemo class
// here we're calling constructor ConstructorDemo()
ConstructorDemo obj = new ConstructorDemo();
System.out.println(obj.a);
}
}
结果:
26
7. 单例类有什么作用?
单例类一次只能有一个对象(类实例)。创建对象并尝试实例化单例类后,新变量也指向创建的第一个对象。8. Java中的包装类是什么?
包装类允许将原始数据类型转换为对象,反之亦然。例子:int a = 7; // using primitive datatype
Integer a = new Integer(7); // using wrapper class
9. Java中的==运算符和相等方法有什么区别?
一般来说,==是一个运算符,equals()是一个方法。我们使用==运算符来引用堆上的比较对象。Java中没有运算符重载的概念。尽管如此,==运算符还是用来检查两个对象的地址是否相同。也就是说,==运算符检查两个对象是否指向同一内存位置。==运算符还用于比较对象类型和基本类型(例如布尔值)。而String类的equals()方法则比较两个对象的内容。10. Java中OOP的概念是什么?
- 抽象被定义为隐藏内部实现并仅显示必要的信息。
- 继承是将父类(超类)的所有属性和行为转换为子类(子类)的过程。
- 封装是将数据或变量和方法绑定在一起的过程。
- 多态性字面上的意思是多种形式。多态性是方法执行不同任务的能力。这可以通过使用方法来实现。
11. 为什么Java中main()方法总是静态的?
因为不需要调用对象的静态方法。如果main()是一个非静态方法,Java 虚拟机必须首先创建其对象,然后调用main()方法,这将导致分配额外的内存。12.为什么Java中的字符串是不可变的?
Java中的字符串是不可变的,因为String对象被缓存在字符串常量池中。13. Java中的数组和ArrayList是什么?
数组是包含固定数量的相似类型元素的对象。-
ArrayList是集合结构的一部分。
-
ArrayList实现了列表接口。
-
ArrayList是一个可扩展的数组,它会随着元素的添加而动态增长,并随着元素的删除而收缩。
-
对于频繁的检索操作,Java ArrayList是最好的选择。因为ArrayList的元素存储在连续的内存位置中。
-
ArrayList不能包含原始数据类型,例如 int、double、char 和 long。
-
ArrayList可以包含String和包装类对象(Double、Integer)。
-
ArrayList允许您复制元素。
-
ArrayList保留插入顺序。
-
ArrayList因其功能性和灵活性而被广泛使用。它旨在存储异构对象集合。
-
ArrayList可以有任意数量的空值。
14、Java中HashSet和HashMap有什么区别?
在哈希集中:-
我们可以将对象存储在HashSet中。例如,HashSet:{“Hello”,“World”}。
-
不保留插入顺序。它是基于哈希码的。
-
有一个add()方法。
-
实现Set接口。
-
不允许重复元素。
-
允许单个空值。
-
在HashMap中我们可以存储键和值对。例如,{1 -> “Hello”, 2 -> “World”}。
-
不支持插入顺序。它基于哈希函数。
-
有一个put()方法。
-
实现地图接口。
-
允许重复值。不允许重复的键。
-
允许单个空键和任意数量的空值。
16.Java中this和super有什么区别?
Java中的this关键字:-
这是一个关键字,它是引用当前对象的引用变量。
-
可用于隐式调用当前类方法。
-
this()关键字,用于调用当前类的构造函数。
-
这可用于在调用方法时作为参数传递。
-
super关键字是一个引用变量,用于引用父类的直接对象。
-
super可用于直接调用父类的方法、父类的构造函数以及访问基类的方法。
17. Java中的break和continue语句是什么?
如果循环中出现break语句,循环将结束,控制权将传递到同一循环中的下一条语句。例子:public class Example
{
public static void main(String[] args)
{
for(int a = 1; a <= 10; a++)
{
if(a == 3)
{
// breaking loop
break;
}
System.out.println(a);
}
}
}
结果:
12
continue 语句根据特定条件移动到循环的下一次迭代。例子:
public class Example
{
public static void main(String[] args)
{
for(int a = 1; a <= 10; a++)
{
if(a % 2 != 0)
{
continue;
}
System.out.println(a + " ");
}
}
}
结果:
2 4 6 8 10
18. Java中的访问修饰符是什么?
访问修饰符定义变量、构造函数、类或方法的限制或范围。Java中有四种类型的访问修饰符:- 私有访问修饰符。
- 受保护的访问修饰符。
- 共享修改器。
- 默认访问修饰符。
19. Java中for循环和foreach循环有什么区别?
for循环:- 没有可执行序列。在for循环中,我们可以根据需要更改计数器。
- 一开始就出现在 JDK 1 中。
- 无需实现该接口。
- 可以访问索引。因此,可以替换数组中的元素。
- 计数器可以增加和减少。
- 依次执行。计数器加一。
- 首次出现在 JDK 5 中。
- 要使用 for-each 循环迭代容器,容器必须实现 Iterable 接口。
- 由于无法访问数组索引,因此无法替换该索引处的元素。
- 只能按递增顺序迭代,不能递减。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DifferenceBetween
{
public static void main(String[] args)
{
List<String> players = new ArrayList<>(Arrays.asList("Virat", "Rohit", "Dhoni"));
// iterate over List using for loop
System.out.println("using for loop: ");
for(int a = 0; a < players.size(); a++)
{
System.out.println(players.get(a));
}
// iterate over List using enhanced for loop
System.out.println("using for each loop: ");
for(String str : players)
{
System.out.println(str);
}
}
}
for 和 foreach 循环的结果:
维拉特·罗希特·多尼。
GO TO FULL VERSION