强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
JDK | JRE | JVM |
---|---|---|
Java开发工具包。 | Java运行时环境。 | Java虚拟机。 |
它是编译,记录和打包Java程序所必需的工具。 | JRE是指可以在其中执行Java字节码的运行时环境。 | 它是一台抽象机。该规范提供了可以在其中执行Java字节码的运行时环境。 |
它包含JRE +开发工具。 | 它是实际存在的JVM的实现。 | JVM遵循三种表示法:规范,实现和 运行时实例。 |
Java中的main()是任何Java程序的入口点。它总是写为public static void main(String [] args)。
Java之所以被称为平台无关的,是因为Java的字节码可以在任何系统上运行,而不管其底层操作系统什么。
Java不是100%面向对象的,因为它使用了不是对象的八种原始数据类型,例如布尔值,字节,字符,整数,浮点数,双精度型,长型,短型。
包装器类将Java原语转换为引用类型(对象)。每个原始数据类型都有一个专用于它的类。这些称为包装器类,因为它们将原始数据类型“包装”到该类的对象中。请参考下图,该图显示了不同的原始类型,包装器类和构造函数参数。
在Java中,构造函数是指用于初始化对象的代码块。它必须与该类具有相同的名称。而且,它没有返回类型,并且在创建对象时会自动调用它。
有两种类型的构造函数:
Singleton类是在一个给定的时间在一个JVM中只能创建一个实例的类。可以通过将构造函数设为私有来使类成为单例。
数组列表 | 向量 |
---|---|
阵列列表未同步。 | 向量已同步。 |
数组列表不同步,因此速度很快。 | 向量很慢,因为它是线程安全的。 |
如果将元素插入“数组列表”,则它将其数组大小增加50%。 | 向量默认为其数组大小加倍。 |
数组列表未定义增量大小。 | 向量定义增量大小。 |
数组列表只能使用Iterator遍历数组列表。 | 向量可以使用Enumeration和Iterator进行遍历。 |
Equals()方法在Java的Object类中定义,用于检查由业务逻辑定义的两个对象的相等性。
Java中的“ ==”或相等运算符是Java编程语言提供的二进制运算符,用于比较基元和对象。public boolean equals(Object o)是Object类提供的方法。默认实现使用==运算符比较两个对象。例如:方法可以像String类一样被覆盖。equals()方法用于比较两个对象的值。
堆和堆栈内存之间的主要区别是:
特征 | 叠放 | 堆 |
---|---|---|
记忆 | 堆栈存储器仅由一个执行线程使用。 | 堆内存由应用程序的所有部分使用。 |
访问 | 堆栈内存不能被其他线程访问。 | 堆中存储的对象可全局访问。 |
内存管理 | 遵循LIFO方式释放内存。 | 内存管理基于与每个对象关联的生成。 |
生命周期 | 存在,直到线程执行结束。 | 堆内存从应用程序执行的开始一直到结束。 |
用法 | 堆栈内存仅包含堆空间中对象的局部原语和引用变量。 | 每当创建对象时,它总是存储在堆空间中。 |
Java中的程序包是捆绑在一起的相关类和接口的集合。通过使用软件包,开发人员可以轻松地将代码模块化并优化其重用。而且,包中的代码可以由其他类导入并重新使用。下面我列出了它的一些优点:
Java不使用指针,因为它们不安全并且会增加程序的复杂性。由于Java以其简单的代码而闻名,因此添加指针的概念将是矛盾的。此外,由于JVM负责隐式内存分配,因此,为了避免用户直接访问内存,在Java中不建议使用指针。
JIT代表Java中的即时编译器。它是一个程序,有助于将Java字节码转换为直接发送到处理器的指令。默认情况下,JIT编译器在Java中启用,并且在调用Java方法时被激活。然后,JIT编译器将被调用方法的字节码编译为本地机器代码,“及时”编译以执行。编译完该方法后,JVM会直接调用该方法的已编译代码,而不是对其进行解释。这就是为什么它经常在运行时负责Java应用程序的性能优化的原因。
在Java中,访问修饰符是特殊的关键字,用于限制对另一个类中的类,构造函数,数据成员和方法的访问。Java支持四种类型的访问修饰符:
修饰符 | 默认 | 私人的 | 受保护的 | 公开的 |
---|---|---|---|---|
同班 | 是 | 是 | 是 | 是 |
相同的包子类 | 是 | 没有 | 是 | 是 |
相同包装的非子类 | 是 | 没有 | 是 | 是 |
不同的包子类 | 没有 | 没有 | 是 | 是 |
不同的包非子类 | 没有 | 没有 | 没有 | 是 |
Java中的类是包含所有数据的蓝图。一个类包含用于描述对象行为的字段(变量)和方法。让我们看一看一个类的语法。
class Abc {
member variables // class body methods
}
对象是具有状态和行为的现实世界实体。一个对象具有三个特征:
使用'new'关键字创建对象。例如:
ClassName obj = new ClassName();
面向对象的编程或通常称为OOP的编程模型或方法是围绕对象而不是逻辑和函数来组织程序。换句话说,OOP主要集中在需要操作的对象上,而不是逻辑上。这种方法对于大型和复杂代码的程序是理想的,并且需要主动更新或维护。
面向对象编程或OOP是一种与以下概念相关的编程样式:
在Java中, 局部变量通常在方法,构造函数或块内使用 ,并且仅具有局部作用域。因此,该变量只能在块的范围内使用。拥有局部变量的最大好处是该类中的其他方法甚至都不知道该变量。
if(x > 100){
String test = "Edureka";
}
而Java中的 实例变量是绑定到其对象本身的变量。这些变量在类内声明,但在方法外声明 。该类的每个对象都将在使用它时创建它自己的变量副本。因此,对该变量所做的任何更改都不会反映在该类的任何其他实例中,而只会绑定到该特定实例。
class Test{
public String EmpName;
public int empAge;
}
方法 | 构造函数 |
---|---|
1.用于表示对象的行为 | 1.用于初始化对象的状态 |
2.必须具有返回类型 | 2.没有任何退货类型 |
3.需要显式调用 | 3.隐式调用 |
4.编译器未提供默认方法 | 4.如果该类没有默认构造函数,则由编译器提供 |
5.方法名称可以与类名称相同或不相同 | 5.构造函数名称必须始终与类名称相同 |
final是Java中的一个特殊关键字,用作非访问修饰符。最终变量可以在不同的上下文中使用,例如:
当final关键字与变量一起使用时,其值一旦分配就无法更改。如果没有值分配给最终变量,则仅使用类构造函数可以将值分配给它。
当方法声明为final时,继承类不能覆盖该方法。
在Java中将一个类声明为final时,任何子类类都不能对其进行扩展,但可以扩展其他类。
打破 | 继续 |
---|---|
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);
}
无限循环是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.
}
}
在Java中,super()和this()都是用于调用构造函数的特殊关键字。
this() | super() |
---|---|
1. this()代表一个类的当前实例 | 1. super()表示父/基类的当前实例 |
2.用于调用同一类的默认构造函数 | 2.用于调用父/基类的默认构造函数 |
3.用于访问当前类的方法 | 3.用于访问基类的方法 |
4.用于指向当前的类实例 | 4.用于指向超类实例 |
5.必须是块的第一行 | 5.必须是块的第一行 |
Java字符串池是指存储在堆内存中的字符串的集合。在这种情况下,无论何时创建新对象,字符串池都会首先检查该对象是否已存在于池中。如果存在,则将相同的引用返回到变量,否则将在字符串池中创建新对象,并将返回相应的引用。
静态方法 | 非静态方法 |
---|---|
1. 方法名称之前必须使用static关键字 | 1.无需在方法名称前使用s tatic关键字 |
2.使用类(className.methodName)进行调用 | 2.可以像任何常规方法一样调用 |
3.他们不能访问任何非静态实例变量或方法 | 3.它可以访问任何静态方法和任何静态变量,而无需创建类的实例 |
在Java中,构造函数链接是相对于当前对象从另一个构造函数调用一个构造函数的过程。构造器链接只有通过继承才能实现,在传统中,子类构造器负责首先调用超类的构造器。构造函数链中可以有任意多个类。构造器链接可以通过两种方式实现:
Q28。String,StringBuilder和StringBuffer之间的区别。
因子 | 串 | StringBuilder | 字符串缓冲区 |
---|---|---|---|
储藏区域 | 常量字符串池 | 堆面积 | 堆面积 |
变异性 | 一成不变的 | 可变的 | 可变的 |
线程安全 | 是 | 没有 | 是 |
性能 | 快速 | 更高效 | 效率较低 |
该 Java类加载器是JVM(Java虚拟机)是负责加载类文件的一个子集。每当执行Java程序时,类加载器就会首先加载它。Java提供了三个内置的类加载器:
在Java中,字符串对象本质上是不可变的,这仅意味着一旦创建了String对象,就无法修改其状态。每当您尝试更新该对象的值而不是更新该特定对象的值时,Java都会创建一个新的字符串对象。Java String对象是不可变的,因为通常将String对象缓存在String池中。由于字符串文字通常在多个客户端之间共享,因此来自一个客户端的操作可能会影响其余客户端。它增强了应用程序的安全性,缓存,同步和性能。
数组 | 数组列表 |
---|---|
不能包含其他数据类型的值 | 可以包含不同数据类型的值。 |
尺寸必须在申报时定义 | 大小可以动态更改 |
需要指定索引才能添加数据 | 无需指定索引 |
数组未参数化类型 | 数组列表是类型 |
数组可以包含原始数据类型以及对象 | 数组列表只能包含对象,不允许使用原始数据类型 |
在Java中,Map是Util程序包的接口,它将唯一键映射到值。Map接口不是主要Collection接口的子集,因此,其行为与其他Collection类型几乎没有什么不同。以下是Map界面的一些特征:
在Java中,集合是一个框架,用作存储和操作一组对象的体系结构。使用集合可以执行各种任务,例如搜索,排序,插入,操作,删除等。Java集合框架包括以下内容:
下图显示了Java集合的完整层次结构。
如果您面临这些Java面试问题的任何挑战,请在下面的部分中评论您的问题。
本文由 Java架构师必看 作者:system_mush 发表,其版权均为 Java架构师必看 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有