当前位置: 首页 > 文档资料 > 学习 Java 编程 >

JAVA 面试问题(JAVA Interview Questions)

优质
小牛编辑
136浏览
2023-12-01

亲爱的读者,这些Java Interview Questions专门设计用于让您熟悉在Java Programming Language主题面试中可能遇到的问题的本质。 根据我的经验,优秀的面试官在你的面试中几乎没有计划提出任何特定的问题,通常问题从这个主题的一些基本概念开始,后来他们继续基于进一步的讨论和你回答的问题 -

Java是一种高级编程语言,最初由Sun Microsystems开发并于1995年发布.Java可在各种平台上运行,例如Windows,Mac OS和各种版本的UNIX。

Java可以在各种平台上运行,例如Windows,Mac OS以及各种版本的UNIX/Linux,如HP-Unix,Sun Solaris,Redhat Linux,Ubuntu,CentOS等。

一些功能包括面向对象,独立平台,强大,解释,多线程

它的编译器生成一种体系结构中立的目标文件格式,这使得编译的代码可以在许多处理器上执行,并且存在Java运行时系统。

Java使用Just-In-Time编译器来实现高性能。 Just-In-Time编译器是一个转换Java字节码的程序,它是一个包含必须被解释为可以直接发送到处理器的指令的指令的程序。

它旨在适应不断变化的环境。 Java程序可以携带大量的运行时信息,可用于在运行时验证和解析对对象的访问。

编译Java时,不会将其编译为特定于平台的计算机,而是编译为与平台无关的字节代码。 此字节代码通过Web分发,并由虚拟机(JVM)在其运行的任何平台上进行解释。

Netbeans,Eclipse等

一些Java关键字是import,super,finally等。

Object是一个运行时实体,它的状态存储在字段中,行为通过方法显示。 方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制。

类是一个蓝色打印,从中创建单个对象。 类可以包含描述对象行为的字段和方法。

一个类由局部变量,实例变量和类变量组成。

在方法,构造函数或块中定义的变量称为局部变量。 变量将在方法中声明和初始化,并且在方法完成时将被销毁。

实例变量是类中的变量,但在任何方法之外。 加载类时会实例化这些变量。

这些是使用static关键字在任何方法之外的类中声明的变量。

单例类控件对象创建,将数量限制为一,但允许在情况发生变化时灵活地创建更多对象。

创建新对象时将调用构造函数。 每个类都有一个构造函数。 如果我们没有为类显式编写构造函数,那么java编译器会为该类构建一个默认构造函数。

首先声明一个Object,然后实例化,然后初始化它。

byte数据类型的缺省值为0。

与C/C ++相比,float和double数据类型的默认值不同。 对于浮动它的0.0f和双倍它是0.0d

此数据类型用于节省大型数组中的空间,主要是代替整数,因为一个字节比int小四倍。

类变量(也称为静态变量)在类中使用static关键字声明,但在方法,构造函数或块之外。

Java提供了访问修饰符来设置类,变量,方法和构造函数的访问级别。 如果未指定可访问性修饰符,则成员具有包或默认可访问性。

在超类中声明受保护的变量,方法和构造函数只能由其他包中的子类或受保护成员类的包中的任何类访问。

Java提供了这些修饰符,用于提供Access Modifiers以外的功能,synchronized用于指示一次只能访问一个方法的方法。

后缀运算符即()[]。 是最高优先级。

switch语句中使用的变量只能是字符串,枚举,字节,短,int或char。

此方法用于获取某个String的原始数据类型。

String类是不可变的,因此一旦创建,就无法更改String对象。 由于String是不可变的,因此可以安全地在许多线程之间共享,这对于多线程编程来说非常重要。

String类被认为是不可变的,因此一旦创建,就无法更改String对象。 如果有必要对字符串进行大量修改,则应使用StringBuffer。

尽可能使用StringBuilder,因为它比StringBuffer更快。 但是,如果需要线程安全,则使用StringBuffer对象。

java.util.regex包用于此目的。

java.util.regex由三个类组成 - Pattern类,Matcher类和PatternSyntaxException类。

可以定义一个方法,该方法将在垃圾收集器最终销毁对象之前调用。 此方法称为finalize(),它可用于确保对象完全终止。

例外是在执行程序期间出现的问题。 沿着线程的方法调用堆栈定位的处理程序捕获异常。

这是一个例外,通常是用户错误或程序员无法预见的问题。 例如,如果要打开文件,但找不到该文件,则会发生异常。 在编译时不能简单地忽略这些异常。

这是程序员可能已经避免的异常。 与已检查的异常相反,在编译时忽略运行时异常。

Exception类有两个主要的子类:IOException类和RuntimeException类。

如果方法不处理已检查的异常,则该方法必须使用throwskeyword声明它。 throws关键字出现在方法签名的末尾。

可以通过使用throw关键字抛出异常,无论是新实例化的异常还是刚刚捕获的异常。

finally关键字用于创建try块后面的代码块。 无论是否发生异常,始终执行最终的代码块。

在创建自己的例外时 -

  • 所有例外必须是Throwable的孩子。

  • 如果要编写由Handle或Declare Rule自动强制执行的已检查异常,则需要扩展Exception类。

  • 您想编写运行时异常,需要扩展RuntimeException类。

这是一个对象获取另一个对象的属性的过程。 通过使用继承,可以按层次顺序管理信息。

如果该方法覆盖其超类的方法之一,则可以通过使用关键字super来调用重写方法。 它也可以用于指代隐藏字段。

多态性是一种物体采取多种形式的能力。 当父类引用用于引用子类对象时,OOP中最常见的多态性使用发生。

它指的是在OOP中创建类抽象的能力。 它有助于降低复杂性并提高系统的可维护性。

这些类无法实例化,无论是部分实现还是根本没有实现。 该类包含一个或多个抽象方法,这些方法只是没有主体的方法声明。

如果希望类包含特定方法,但希望该方法的实际实现由子类确定,则可以将父类中的方法声明为abstract。

它是将类中的字段设为私有并通过公共方法提供对字段的访问的技术。 如果某个字段被声明为私有,则该类之外的任何人都无法访问该字段,从而将该字段隐藏在该类中。 因此,封装也称为数据隐藏。

封装的主要好处是能够修改我们实现的代码而不会破坏使用我们代码的其他人的代码。 通过这种封装,我们的代码具有可维护性,灵活性和可扩展性。

接口是抽象方法的集合。 类实现接口,从而继承接口的抽象方法。

它包括 -

  • 接口无法实例化

  • 接口不包含任何构造函数。

  • 接口中的所有方法都是抽象的。

可以将包定义为提供访问保护和名称空间管理的相关类型(类,接口,枚举和注释)的分组。

程序包在Java中按顺序使用,以防止命名冲突,控制访问,使类,接口,枚举和注释等的搜索/定位和使用更容易。

多线程程序包含两个或多个可以并发运行的部分。 这样的程序的每个部分称为线程,每个线程定义一个单独的执行路径。

可以通过以下方式创建线程:实现Runnable接口,扩展Thread类。

applet是一个在Web浏览器中运行的Java程序。 applet可以是一个功能齐全的Java应用程序,因为它可以使用整个Java API。

applet扩展了java.applet.Applet类。

它使用垃圾收集来释放内存。 通过清除任何程序不再引用的对象。

创建后,不能更改不可变对象。

它与变量或方法一起使用,用于调用同一类的构造函数。

它是元素的集合,不能包含重复元素。 Set接口仅包含从Collection继承的方法,并添加禁止重复元素的限制。

当我们想要按排序顺序排列元素时,它是一个Set。

它用于使用collections.sort()和java.utils对集合和对象数组进行排序。 可以对实现Comparable接口的类的对象进行排序。

这包括:

  • 抛出用于触发异常,其中抛出用于声明异常。

  • 如果没有抛出,则无法处理Checked异常,因为可以使用throws传播已检查的异常。

public static void main(String args [])

以下单独说明 -

  • public - 它是访问说明符。

  • static - 它允许调用main()而不实例化类的特定实例。

  • void - 它确认编译器main()没有返回任何值。

  • main() - 在Java程序的开头调用此方法。

  • String args [] - args参数是String类的实例数组

Java Runtime Environment是Java虚拟机的一个实现,它执行Java程序。 它提供了执行Java应用程序的最低要求;

JAR文件是Java Archive文件,它将许多文件聚合为一个文件。 它在库中保存Java类。 JAR文件基于ZIP文件格式构建,并具有.jar文件扩展名。

这是Web Archive File,用于存储XML,Java类和JavaServer页面。 用于分发JavaServer Pages,Java Servlets,Java类,XML文件,静态Web页面等的集合。

它改善了基于字节码的计算机程序的运行时性能。

基于对象的编程语言遵循OOP的所有功能,但继承除外。 JavaScript是基于对象的编程语言的示例。

只有在类中没有构造函数时,java编译器才会创建默认构造函数。

不,这是不可能的。

它用于初始化静态数据成员,在类加载时在main方法之前执行。

在另一个类中保持另一个类的引用称为组合。

如果一个类具有相同名称但不同参数的多个函数,则称为方法重载。

如果子类提供已由其父类提供的方法的特定实现,则称为“方法重写”。

方法重载增加了程序的可读性。 方法重写提供了其超类参数已经提供的方法的具体实现,在重载的情况下必须是不同的,在覆盖的情况下参数必须相同。

创建最终类,因此无法覆盖该类实现的方法。 它不能被继承。

调用null对象的实例方法,访问或修改null对象的字段等时抛出NullPointerException。

线程可以通过调用其sleep()方法,通过阻塞IO,尝试获取对象的锁定失败,或者通过调用对象的wait()方法来进入等待状态。 它还可以通过调用其(不推荐的)suspend()方法进入等待状态。

操作系统的任务调度程序将执行时间分配给多个任务。 通过在执行任务之间快速切换,可以创建任务按顺序执行的印象。

在线程启动后,通过Thread类的start()方法,JVM在最初执行线程时调用线程的run()方法。

是的,它确实。 FileNoFoundException继承自IOException。 必须首先捕获异常的子类。

当任务调用其yield()方法时,它将返回就绪状态。 当任务调用其sleep()方法时,它将返回等待状态。

Vector类提供了实现可增长的对象数组的功能。 如果您事先不知道数组的大小,或者您只需要一个可以在程序的生命周期内更改大小的向量,则向量证明非常有用。

Unicode需要16位,ASCII需要7位。 虽然ASCII字符集仅使用7位,但通常表示为8位。 UTF-8表示使用8,16和18位模式的字符。 UTF-16使用16位和更大的位模式。

这些类允许将原始类型作为对象进行访问。 示例:整数,字符,双精度,布尔值等

Frame类扩展Window以定义可以具有菜单栏的主应用程序窗口。

javax.Swing包。 除了JApplet,JDialog,JFrame和JWindow之外,Swing中的所有组件都是轻量级组件。

paint()方法支持通过Graphics对象进行绘制。 repaint()方法用于使AWT绘制线程调用paint()。

它用于创建提供对本地文件系统的文件和目录的访问的对象。

Reader/Writer类层次结构是面向字符的,InputStream/OutputStream类层次结构是面向字节的。

Class类用于获取有关对象设计的信息,java.lang.Class类实例表示正在运行的Java应用程序中的类,接口。

静态变量作为一个整体与类相关联,而不是与类的特定实例相关联。 非静态变量对每个对象实例都采用唯一值。

序列化是将对象的状态写入字节流的过程。 反序列化是恢复这些对象的过程。

它是程序分析的一部分,描述了程序可能遇到的情况以及程序在该情况下应该表现出的行为。

子类继承所有公共和受保护的方法以及实现。 它还继承了所有默认修饰符方法及其实现。

如果有一个名为b1的按钮实例,您可以通过调用b1.setMnemonic('F')添加菜单快捷方式,这样用户就可以使用Alt + F单击该按钮。

是的,只需向applet添加main()方法即可。

AWT组件重量轻,而Swing组件重量轻。 重量级组件取决于本地窗口工具包。 例如,java.awt.Button是一个重量级组件,当它在Unix平台的Java平台上运行时,它映射到一个真正的Motif按钮。

构造函数必须与类具有相同的名称,并且不能返回值。 它们只被调用一次,而常规方法可以多次调用。

是的,因为继承继承了超类和接口中的所有内容,所以在某些情况下,当动态覆盖或动态重载时,它可能会使子类过于集群并且有时容易出错。

在不同数组之间复制元素时,如果源或目标参数不是数组或它们的类型不兼容,则抛出ArrayStoreException。

是的,使用this()语法。

代码睡眠(2000); 将线程放在一边两秒钟。 代码等待(2000),导致等待最多两秒钟。 如果线程收到notify()或notifyAll()调用,它可能会提前停止等待。 方法wait()在Object类中定义,方法sleep()在Thread类中定义。

当整数除以零或将数字的余数除以零时,抛出ArithmeticException。 它永远不会抛出浮点运算。

瞬态变量是在序列化期间可能未序列化的变量,并且在反序列化期间由其默认值初始化,

同步是控制多个线程对共享资源的访问的能力。 java中的synchronized关键字提供锁定,确保共享资源的互斥访问并防止数据竞争。

Collections API是一组类和接口,支持对对象集合的操作。

垃圾收集并不能保证程序不会耗尽内存。 程序可能比垃圾收集更快地耗尽内存资源。 程序也可以创建不受垃圾回收的对象。

Panel是直接的超类。 面板提供了一个空间,应用程序可以在其中附加任何其他组件,包括其他面板。

=运算符是右关联的。

break语句导致终止它应用的语句(switch,for,do或while)。 continue语句用于结束当前循环迭代并将控制返回到循环语句。

私有变量只能在声明它的类中访问。

System类的目的是提供对系统资源的访问。

八种基本类型是byte,char,short,int,long,float,double和boolean。

当AWT绘制线程重新绘制窗口时,它会将剪切区域设置为需要重新绘制的窗口区域。

组件类是直接的超类。

Java运行时系统生成RuntimeException和Error异常。

垃圾收集器在检测到对象无法访问时调用对象的finalize()方法。

死线程无法重新启动。

Integer /和%可能导致抛出ArithmeticException。

布尔类型的默认值为false。

类加载器是一个负责加载类的对象。 ClassLoader类是一个抽象类。

抽象类可以具有实现默认行为的实例方法。 接口只能声明常量和实例方法,但不能实现默认行为,并且所有方法都是隐式抽象的。 接口具有所有公共成员,没有实现。

程序在运行时抛出“NoSuchMethodError”错误。

空,除非明确定义。

不,顶级课程不能私密或受到保护。 它可以有“公共”或没有修饰符。

我们可以将它们作为方法期望对象的方法参数传递。 它还提供实用方法。

错误是在运行时发生的不可恢复的情况。 比如OutOfMemory错误。 例外是因输入错误等而发生的情况。例如,如果指定的文件不存在,则抛出FileNotFoundException。

每个try块都必须后面跟一个catch块。 它后面应该是一个catch块或者一个finally块。

在创建并启动线程后,线程处于就绪状态作为初始状态。

Locale类用于将程序输出定制为特定地理,政治或文化区域的约定。

同步方法是用于控制对对象的访问的方法。 只有在线程获取了synchronized语句中引用的对象或类的锁后,才能执行synchronized语句。

运行时多态或动态方法分派是在运行时而不是在编译时解析对重写方法的调用的过程。 在此过程中,通过超类的引用变量调用重写方法。

绑定是指将过程调用链接到要响应调用而执行的代码。 动态绑定意味着直到在运行时调用时才知道与给定过程调用关联的代码。

不,构造函数不能被继承。

ArrayList可以动态增长,并提供比数组更强大的插入和搜索机制。

链表中的删除很快,因为它只涉及在删除节点之前更新节点中的下一个指针,并在删除节点之后更新节点中的先前指针。

如果您需要经常添加和删除列表中间的元素并仅按顺序访问列表元素,则应使用LinkedList。 如果您需要支持随机访问,而不从末尾以外的任何位置插入或删除元素,则应使用ArrayList。

它是Map接口的values()方法返回的集合,它包含在地图中作为值存在的所有对象。

点运算符(。)用于访问类对象的实例变量和方法。它还用于从包访问类和子包。

如果您不希望其他类实例化对象并阻止子类化,则使用私有构造函数

类型转换意味着将一种类型的变量视为另一种类型。

线程是程序中的执行。 线程的生命周期包括 -

  • Newborn state
  • Runnable state
  • Running state
  • Blocked state
  • Dead state

向右移位时,>>运算符带有符号位。 >>>零填充位已被移出。

setBounds()方法用于此目的。

短类型的范围是 - (2 ^ 15)到2 ^ 15 - 1。

MenuItem类

不,Java不允许默认参数。

八进制数在java中由前导零表示,例如:06

十六进制数字由java中的前导0x或0X表示,例如 - 0XF

是的,一个例子可以break one;

在package语句之后的程序文件的开头允许使用import语句。

它用于暂停或暂时停止线程的执行。

它用于确定线程是否仍在运行。

它是一个公共静态方法,用于获取对当前线程的引用。

主线程自动创建,并在程序启动时立即开始执行。 它是所有其他子线程源自的线程。

生命周期涉及以下步骤 -

  • Initialization

  • Starting

  • Stopping

  • Destroying

  • Painting

它初始化applet,是第一个被调用的方法。

getImage(URL对象,文件名)用于此目的。

它用于指定applet类的名称。

它是一个简单的绘图表面,用于绘制图像或执行其他图形操作。

它指的是编写跨多个设备(计算机)执行的程序,其中设备都使用网络相互连接。

套接字使用TCP提供两台计算机之间的通信机制。 客户端程序在通信的末尾创建一个套接字,并尝试将该套接字连接到服务器。

插座灵活且充足。 可以容易地实现用于一般通信的高效的基于套接字的编程。 它会导致低网络流量。

基于套接字的通信仅允许在应用程序之间发送原始数据包。 客户端和服务器端都必须提供使数据以任何方式有用的机制。

服务器应用程序使用java.net.ServerSocket类来获取端口并侦听客户端请求

java.net.Socket类表示客户端和服务器用于相互通信的套接字。

泛型提供编译时类型安全性,允许程序员在编译时捕获无效类型。 Java通用方法和泛型类使程序员能够使用单个方法声明指定一组相关方法,或者使用单个类声明指定一组相关类型。

CLASSPATH和PATH是两个变量。

不,不需要导入此包。 默认情况下,它由JVM内部加载。

如果在类中声明了一个类并指定了static修饰符,则编译器会像处理任何其他顶级类一样处理该类。 嵌套的顶级类是一个Inner类。

Externalizable是一个包含两个方法readExternal和writeExternal的接口。 这些方法使您可以控制序列化机制。

在这种情况下,不会执行finally块,因为当你说System.exit(0)时; 控件立即退出程序,因此最终永远不会执行。

守护程序线程是一个低优先级线程,它在后台间歇运行,为java运行时系统执行垃圾收集操作。

setDaemon方法用于创建守护程序线程。

所有任务都必须实现run()方法

GregorianCalendar支持传统的西方日历

SimpleTimeZone类提供对公历的支持。

The size is the number of elements actually stored in the vector, while capacity is the maximum number of elements it can store at a given instance of time.

Yes a Vector can contain heterogenous objects. Because a Vector stores everything in terms of Object.

An enumeration is an interface containing methods for accessing the underlying data structure from which the enumeration is obtained. It allows sequential access to all the elements stored in the collection.

Path and Classpath are operating system level environment variales. Path is defines where the system can find the executables(.exe) files and classpath is used to specify the location of .class files.

No, it's not possible to accessed outside it's package.

A static method should not refer to instance variables without creating an instance and cannot use "this" operator to refer the instance.

Yes an Interface can inherit another Interface, for that matter an Interface can extend more than one Interface.

多态性

An object's lock is a mechanism that is used by multiple threads to obtain synchronized access to the object. A thread may execute a synchronized method of an object only after it has acquired the object's lock.

It is the casting from a general to a more specific type, ie casting down the hierarchy.

Order of precedence determines the order in which operators are evaluated in expressions. Associatity determines whether an expression is evaluated left-to-right or right-to-left.

A protected method may only be accessed by classes or interfaces of the same package or by subclasses of the class in which it is declared.

When a class is defined within a scope of another class, then it becomes inner class. If the access modifier of the inner class is static, then it becomes nested class.

Overridden methods must have the same name, argument list, and return type. The overriding method may not limit the access of the method it overrides.

A child object constructor always first needs to construct its parent. In Java it is done via an implicit call to the no-args constructor as the first statement.

Yes, a double value can be cast to a byte.

When an exception is thrown within the body of a try statement, the catch clauses of the try statement are examined in the order in which they appear. The first catch clause that is capable of handling the exception is executed. The remaining catch clauses are ignored.

If the array is an array of primitive types, then all the elements of the array will be initialized to the default value corresponding to that primitive type.

接下来是什么 (What is Next?)

此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。