# Java 基础面试300题 (51-80)

news2024/7/6 18:00:01

Java 基础面试300题 (51-80)

051.Java中有那几种循环结构?

循环结构也被称为迭代语句,用于重复执行代码块。Java具有以下几种循环结构:

while循环: while语句检查条件,只要条件为真,就会重复执行代码块。它的语法如下:

while (condition){
//body of the loop
}

do while循环:只要条件为真,do while循环也会重复执行代码块。与while不同,它在循环末尾检查条件,因此循环体至少执行一次。它的语法如下:

do{
//body here
} while(condition);

for 循环: for循环用来在一组范围内的值上进行遍历。它如果条件为真,它会一直迭代,如果条件为假,则退出循环。 语法如下:

for(initialization;condition;iteration){
//body of the loop
}

for each循环: for each用于循环一个数组或对象集合。在循环的每次迭代中,它从数组或集合中获取下一个元素,并为该元素执行循环内的代码。如下示例:

for(datatype var: collection) {
//body of the loop
}

052.用示例解释if-else语句的语法。

以下是if-else语句的示例:

int iValue = 10;
if(iValue > 1000) {
System.out.println(“iValue is > 1000);
}
else {
System.out.println(“iValue is < 1000);
}

If语句后面需要一个条件。如果条件求值为真,则执行if语句后面的代码。如果条件求值为false,则执行else关键字后面的代码。在上述代码中,变量iValue的值为10,因此if语句中的条件求值为false,因此执行else中的代码块, 从而输出以下结果:

iValue is < 1000 

053.以下哪行代码将编译,哪行会导致错误?

int iValue=5;
while (iValue) {} //Line 1
while (false) {} //Line 2
while (iValue = 5) {} //Line 3
while (iValue == 5) {} //Line 4

第1行将导致错误,因为整数值无法传递给while循环。它需要一个布尔值。

第2行没有语法错误,编译通过,因为在while循环中使用了布尔值false

第3行会导致编译错误,因为表达式iValue=5不是布尔值,它实际上是一个赋值语句

第4行没有语法错误,编译通过,因为表达式iValue==5 为布尔值。

054. 下面代码中,如果boolAfalse ,而boolBtrue ,输出会是什么?

public void foo( boolean boolA, boolean boolB) /* Line 1 */
{
if(boolA ) {/* Line 3 */
System.out.println(X); /* Line 5 */
}
else if(boolA && boolB) {/* Line 7 */
System.out.println(X && Y); /* Line 9 */
}
else { /* Line 11 */
if (!boolB ){ /* Line 13 */
System.out.println( “notY”); /* Line 15 */
}
else{ /* Line 17 */
System.out.println(In here” ); /* Line 19 */
}
}
}

上述代码输出是:In here 。解释如下:

由于boolAfalse,因此第5行将永远不会执行, 同时第7行也不会执行, 控制将进入第11行的else 代码块 。由于boolBtrue ,第13行的if语句不会被执行, 而执行第13行的 else 语句块。因而输出 In here

055.以下程序的输出是什么?

public class SwitchDemo
{
final static short caseVal = 2;
public static void main(String [] abc)
{
for (int iterNo=0; iterNo < 3; iterNo ++) {
switch (iterNo) {
case caseVal:  System.out.print(“a “);
case caseVal–1:  System.out.print(“b “);
case caseVal–2:  System.out.print(“c “);
}
}
}
}

由于caseVal 是常量,因此在编译时对其进行计算。在第一次迭代时, iterNo = 0,第3个case语句为true ,因此打印c,在第二次迭代时,iterNo = 1 ,因此第二个case 语句为真,因此它打印b,因为第二个case语句后没有 break 语句,继续执行第三个case 语句,再次打印c,在第三次迭代期间,iterNo = 2,因此第一个casetrue ,因此打印a, 由于其后没有 break语句,将再次执行后面的两个case语句,分别打印出bc ,最终输出结果是:

Output:c b c a b c

056. 编译并执行下面代码,输出是什么?

int iValue1 = 100;
int iValue2 = 200;
boolean isTrue() {
return true;
}
if(((iValue1 > iValue2) && (iValue2 < 50))
|| isTrue()) { //Line 1
System.out.println(This is True);
}
else {
System.out.println(This is False);
}

第1行的if语句使用了OR运算符。 当其任何一个操作数为true时,OR运算符返回true。 由于 isTrue()方法返回 trueif 语句将返回 true。 因此,无论AND(&&)操作的结果如何,if语句中的表达式都会返回true,从而产生下面输出:

This is True

057. breakcontinue 语句有什么作用?

break 关键字可以在循环中使用。 当遇到break语句时,循环会立即终止,控制权会转移到循环之外。

continue 关键字也可以在循环中使用,用来停止执行循环中当前迭代的下一个语句,并将控制权转移到循环的开始。

058. 编译并执行下面代码,输出是什么?

for(int iValue=0; iValue<5; iValue++) {
System.out.println(iValue); //line 1
continue; //line 2
System.out.println(iValue + 1);
}

代码编译并在执行时显示以下输出:

0
1
2
3
4

执行第1行的System.out语句之后,开始执行第2行的continue语句, 它会跳过循环主体的其余部分,将控制权转移到循环的开始,因而会忽略其后的System.out语句。

059.编译并执行下面代码,输出是什么?

for(int iValue=0; iValue<5; iValue++) {
System.out.println(iValue);
break;
System.out.println(iValue + 1);
}

代码编译并在执行时显示以下输出:

0

它只输出了0。这是因为break语句停止执行循环中的下一个语句,并退出循环,控制权转移到循环之外。

060.编译并执行下面代码,输出是什么?

for (;;) {
System.out.println(Will this get printed?);
}

上述代码虽然编译通过,但它却执行了一个无限循环,因为没有循环控制变量,也没有要检查的条件。因此,此代码将一直打印输出Will this get printed?

061. 编译并执行下面代码, 输出是什么?

int iValue = 50;
for (;iValue < 100;) {
System.out.println(iValue);
}

在上述代码中,for 循环语句没有初始化语句和迭代语句,它虽然指定了一个终止条件, 但因为变量iValue 从未增加, 因此,终止条件形同虚设,实际上成了一个无限循环。 代码会无限地打印值 50

062.举一些 for-each 循环的例子。

以下是for-Each循环的一些示例:

示例 1:

Integer [] integerArray = {10, 100, 1000};
for(Integer integer: integerArray) {
// do something here
}

示例2:

int [] iValue = {10, 100, 1000};
for(int iValue1: iValue) {
// do something here
}

示例 3:

Electronics [] electronics = {new Camera(), new Laptop()};
for(Electronics e: electronics) {
// do something here
}

示例 4:

List<Integer> numbers = Arrays.asList(4,10,12);
for(int num: numbers) {
// do something here
}

063.下面代码的输出是什么?

for(int iValue = 0; iValue < 10; iValue++) {
}
System.out.println(iValue); //Line 1

上述代码将无法编译。这是因为变量iValue的范围仅在for 循环内,而不是在for 循环之外, 由此导致第1行出现编译错误。

064. 编译并执行下面代码,输出是什么?

int iValue = 10;
switch(iValue) {
case 5: System.out.println(5);
case 8: System.out.println(5);
default: System.out.println(This is Default);
case 9: { System.out.println(9); break; }
case 11: System.out.println(11);
}

上述代码没有语法错误,编译通过。虽然没有case 10 ,但它会匹配 default,并执行其内的代码块,因而会输出This is Default。由于上述default代码块最后没有break语句,其后的case语句也会被执行,输出9,又由于case 9 中有break语句 ,因而在输出 9之后会立即中断swith语句,控制转移到swith语句外。 最终显示以下输出:

This is Default
9 

Java 面试问题集- 类和方法

065. 编译和执行下面代码片段,输出是什么?

static void main(String argument[]) {
System.out.println(This gets printed”);
}

上述代码编译得很好。但在执行时,会出现以下错误:

Error: Main method not found in class

这是因为主方法没有公共访问说明符,在类之外无法访问。因此,JVM无法访问主方法,从而发生错误。

066.实例变量可以声明为静态吗?

实例变量不能声明为静态。如果实例变量被声明为静态,那么该变量将成为类变量。

067. 编译和执行下面代码时会发生什么?

class Laptop {
Laptop(String laptopName) {
System.out.println(Laptop Name is ....);
}
public static void main(String argument[]) {
Laptop l = new Laptop();
}
}

答案:

代码将无法编译,并会出现以下编译错误:

The constructor Laptop() is undefined.

这是因为代码中没有定义默认的构造函数。由于有一个带参数的构造函数,因此Java不能自动创建默认的无参数构造函数。要使上述代码正常工作,需要添加以下显式构造函数:

Laptop() {
}

068.如果没有明确指定构造函数,幕后会发生什么?

如果未明确指定构造函数,编译器会自动生成默认的无参数构造函数。每当创建新对象时,都会使用此默认构造函数。

069. 编译执行下面代码时会发生什么?

class Electronics {
Electronics() {
}
public void displayPrice() {
Electronics();
}
}

编译上述代码时会出现显示错误:

The method Electronics() is undefined for the type Electronics. 

这是因为像上述方式调用构造函数是非法的。

070.构造函数有哪些访问修饰符?

以下是构造函数的可能访问修饰符:

  • private: 表示构造函数只能从其类中访问

  • public: 表示构造函数可以从类外部任何其它包中的任何类中访问

  • protected: 表示构造函数可以从同样包中的任何其它类中访问

071.下面代码片段的输出是什么?

public class MyClass {
public void callMe(int a) {
System.out.println(Call me with int argument”);
}
public void callMe(long a) {
System.out.println(Call me with long argument”);
}
public static void main(String args[]) {
MyClass myClassObj = new MyClass();
int i = 6;
myClassObj.callMe(i);
}
}

由于方法callMe()以整数值调用,因此接受整数参数的方法被调用。如果我们更改 ilong的数据类型,则接受long类型参数的方法将被调用。因此代码的输出如下:

Call me with int argument

072. 如何定义构造函数?举例说明。

构造函数是一种特殊方法,名称与类名相同,但没有返回类型。创建新对象时,必须调用某个构造函数。构造函数中的代码逻辑在创建类对象后立即执行。所以构造函数经常用于设置对象的初始状态, 例如为实例变量设置初始值。如下面代码所示:

public class Electronics {
int price;
Electronics(int price) {
this.price = price;
} //constructor
public static void main(String argument[]) {
Electronics e = new Electronics(); //Line 1
}
}

在上述代码中,一旦执行第1行,JVM就会调用构造函数,执行其中的逻辑,从而初始化price 字段。

073. void关键字有什么作用?

void关键字用来说明方法没有返回值。 下面代码说明如何使用 void关键字来说明方法没有返回值:

public void doSomething(){
}

074. 构造函数和普通方法之间有什么区别?

构造函数和普通方法之间有下面几个区别:

  • 构造函数的名称必须与类名称相同,普通方法可以具有任何名称。

  • 构造函数没有返回类型,但不必使用void关键字说明,而普通方法具有返回类型。如果方法不返回任何值,则需要使用void关键字说明。

  • 创建类对象时,会自动调用构造函数,普通方法需要显式调用。

  • 如果一个类没有声明构造函数,Java会自动创建一个默认的构造函数。如果一个类没有方法,Java不会自动添加方法。

075. 用代码示例解释this 关键字。

this关键字用于指代当前对象。它可用于引用与当前对象对应的字段或方法。如下代码示例:

public class Book {
private String name;
private String author;
public Book(String name, String author) {
this.name = name;
this.author = author;
}
public void doSomething(Book book) {
}
public void doSomethingElse(Book book) {
this.doSomething(book);
}
}

上述代码创建一个名为Book的类,该类定义了一个构造函数,具有nameauthor两个输入参数 (书名和作者), 并使用 this关键字初始化当前对象的书名和作者。 从代码中可以看到, 使用this 关键字有助于区分实例字段和传入的参数变量,如果它们的名称相同的话。

this关键词也可以与方法一起使用。如上代码所示,doSomethingElse 方法通过使用 this 关键字调用类中的doSomething方法。

076. 类和对象之间有什么区别?

类和对象之间有下面几个区别:

  • 类是一个模板,定义了一个新的数据类型, 对象是该数据类型的具体值。

  • Java不会为类分配任何内存, 创建对象时,需要为对象分配必要的内存。

  • 类是一个逻辑实体,对象则是具体的物理存在。

  • 类使用 class 关键字声明(定义),对象则使用 new 关键字创建。

  • 类没有状态,对象有状态。

077.用代码示例解释new 关键字。

new关键字通过调用类的构造函数来创建对象,并为对象分配内存。如下代码所示:

Person person1 = new Person();

其中,Person是类的名称,person1Person类型的对象,new 关键字后跟Person类的构造函数,然后为person1对象分配内存。new 关键字只适用对象类型,不 适用基础数据类型,如intdouble等。

078.下面代码片段的输出是什么?

public class MyClass2 {
private int field1 = 0;
private static int field2 = 0;
public static void main(String[] args) {
MyClass2 object1 = new MyClass2();
object1.field1++; //Line 1
object1.field2++; //Line 2
MyClass2 object2 = new MyClass2();
object2.field1++; //Line 3
object2.field2++; //Line 4
System.out.println(object2.field1); //Line 5
System.out.println(object2.field2); //Line 6
}
}

上述代码中,类MyClass2有2个字段,field1field2field1是一个实例字段,而field2是一个静态字段。对于实例字段,类中的每个对象都有自己副本, 因此,对象object1和对象object2 都会有自己的field1副本,第1行和第3行增加该字段,并在第5行打印对象object2field1的值,也就是1。 对于静态字段,只有一个静态字段的副本对应于类的所有对象。因此,只有一个field2的副本对应于对象object1和对象object2。因此,第2行和第4行将增加相同的副本,并在第6行打印值2。

最终,上述代码将打印以下输出:

1
2

079. return关键字的作用是什么?

return 关键字用于在方法结束前,返回一些计算结果的值。返回的值必须与方法的声明返回类型匹配。如下代码示例 :

public int add(int num1, int num2){
int sum = num1+num2;
return sum;
}

add方法返回int 类型, 即两个操作数之和。

即使方法不返回任何内容,也可以选择性地指定return 关键字,而不带任何值。如下代码示例:

public void printSum(int a, int b) {
int sum = a+b;
System.out.println(sum);
return;
}

在上述情况下,方法必须声明为void 返回类型,表示此方法不返回任何内容。

080.什么是内部类?有哪几种不同类型的内部类?

内部类是在另一个类的主体内定义的任何类。内部类有4种类型,如下所示:

  • 嵌套类:类在另一个类的主体中定义。它可以访问外部类的所有成员。

  • 静态嵌套类:类在另一个类的主体中定义, 但它无法访问外部类的非静态成员。

  • 方法局部内部类:在另一个类的方法中定义的类称为方法局部内部类。这样的内部类只能访问外部类的常量。

  • 匿名内部类:一个没有名称且在定义时只能实例化一次的类被称为匿名内部类。它没有构造函数,因为它没有名称。它也不能是静态的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1717753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 如何配置 PNPM 的 CI 环境

最近出于兴趣在写一个前端框架 echox&#xff0c;然后在 Github 上给它配置了最简单的 CI 环境&#xff0c;这里简单记录一下。 特殊目录 首先需要在项目根目录里面创建 Github 仓库中的一个特殊目录&#xff1a;.github/workflows&#xff0c;用于存放 Github Actions 的工作…

vm-bhyve:bhyve虚拟机的管理系统@FreeBSD

先说情况&#xff0c;当前创建虚拟机后网络没有调通....不明白是最近自己点背&#xff0c;还是确实有难度... 缘起&#xff1a; 前段时间学习bhyve虚拟机&#xff0c;发现bvm这个虚拟机管理系统&#xff0c;但是实践下来发现网络方面好像有问题&#xff0c;至少我花了两天时间…

自动化捡洞/打点必备神器

工具介绍 毒液流量转发器Venom-Transponder&#xff1a;自动化捡洞/打点/跳板必备神器&#xff0c;支持联动URL爬虫、各种被动扫描器&#xff1b;该工具支持在mac/windows/linux等系统上使用。 该流量转发器诞生背景&#xff1a; 鉴于平时挖洞打点时用到被动扫描器&#xff0…

物联网——TIM定时器、PWM驱动呼吸灯、舵机和直流电机

定时器概念&#xff08;常用于输出PWM波形&#xff0c;驱动电机&#xff09; 时间脉冲数时钟周期&#xff1b; 这里的脉冲数6553665536&#xff0c;支持定时器级联&#xff0c;从而延长定时 定时器类型 基本定时器原理图&#xff08;UI:更新中断&#xff0c; U:更新事件&#…

C语言 | Leetcode C语言题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; int* getRow(int rowIndex, int* returnSize) {*returnSize rowIndex 1;int* row malloc(sizeof(int) * (*returnSize));row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row…

如何查看本地sql server数据库的ip地址

程序连线SQL数据库&#xff0c;需要SQL Server实例的名称或网络地址。 1.查询语句 DECLARE ipAddress VARCHAR(100) SELECT ipAddress local_net_address FROM sys.dm_exec_connections WHERE SESSION_ID SPID SELECT ipAddress As [IP Address]SELECT CONNECTIONPROPERTY(…

windows中安装zookeeper

https://zhuanlan.zhihu.com/p/692451839 Index of /apache/zookeeper/zookeeper-3.9.2 Zookeeper的应用场景 1、配置管理 2、服务注册中心 3、主从协调 4、分布式锁。&#xff08;客户端在一个节点下创建有序节点&#xff0c;如果分配的节点号最小&#xff0c;则获取锁&am…

MySQL事务与并发控制案例

1. MySQL在事务与并发控制情况下加锁案例实现 第一步&#xff1a;开启一个事务并发锁 第二步&#xff1a;对加X锁&#xff08;排他锁&#xff09;的数据进行操作 可以看到锁被阻塞了&#xff1b; 2. 锁超时或死锁怎么办&#xff1f; Deadlock found when trying to get lock…

Redis之持久化、集群

1. Redis持久化 Redis为什么需要持久化?因为Redis的数据我们都知道是存放在内存中的&#xff0c;那么每次关闭或者机器断电&#xff0c;我们的数据旧丢失了。 因此&#xff0c;Redis如果想要被别人使用&#xff0c;这个问题就需要解决&#xff0c;怎么解决呢?就是说我们的数…

关于OpenFlow协议的运行机制和实践分析(SDN)

目录 OpenFlow运行机制 1 OpenFlow信道建立 1.1 OpenFlow消息类型 1.2 信道建立过程解析 2 OpenFlow消息处理 2.1 OpenFlow流表下发与初始流表 2.2 OpenFlow报文上送控制器 2.3 控制器回应OpenFlow报文 3 OpenFlow交换机转发 3.1 单播报文转发流程 OpenFlow的实践分析…

C++的第一道门坎:类与对象(三)

目录 一.再谈构造函数 1.1构造函数体赋值 1.2初始化列表 1.3explicit关键字 二.static成员 2.1概念 ​编辑 2.2特性 三.友元 3.1友元函数 3.2友元类 4.内部类 一.再谈构造函数 1.1构造函数体赋值 class Date { public:Date(int year,int month,int day){_year ye…

使用KEPServer连接欧姆龙PLC获取对应标签数据(标签值类型改为字符串型)

1.创建通道&#xff08;通道&#xff09;&#xff0c;&#xff08;选择对应的驱动&#xff0c;跟当前型号PLC型号对应&#xff09;。 2.创建设备&#xff0c;&#xff08;填入IP地址以及欧姆龙的默认端口号&#xff1a;44818&#xff09; 3.创建对应的标签。这里关键讲诉下字…

【VSCode实战】转换大小写快捷键

今天在VSCode Insiders上编码&#xff0c;突然想将某常量转换为大写。按照virtual studio的习惯&#xff0c;我Ctrl Shift U没有效果&#xff0c;Ctrl U也没效果。网上搜了搜&#xff0c;原来VSCode Insiders没有这个默认功能。 而VSCode Insiders这么强大怎么可能没有大小…

Keras深度学习框架实战(1):图像分类识别

1、绪论 1.1 图像分类的定义 图像分类是计算机视觉领域中的一项基本任务&#xff0c;其定义是将输入图像分配给预定义类别中的一个或多个。具体来说&#xff0c;图像分类系统接受一个图像作为输入&#xff0c;并输出一个或多个类别标签&#xff0c;这些标签描述了图像中的内容…

pytorch 指定GPU的几种方法

在使用PyTorch时,你可以通过多种方式指定和使用GPU。以下是一些常见的方法: 1. 使用torch.device torch.device是PyTorch中用于指定设备(CPU或GPU)的对象。你可以通过将张量移动到指定设备来使用GPU。 import torch# 检查是否有可用的GPU device = torch.device("…

光子芯片:突破算力瓶颈的新希望

引言 在现代计算机科学中&#xff0c;计算能力的提升是推动技术进步的核心动力。然而&#xff0c;随着摩尔定律的逐渐失效&#xff0c;传统电子芯片的算力提升面临瓶颈。光子芯片作为一种新兴技术&#xff0c;因其高频率、低损耗和高信噪比的优点&#xff0c;正成为突破算力瓶…

抖音太可怕了,我卸载了

这两天刷短视频&#xff0c;上瘾了&#xff0c;太可怕了。 自己最近一直在研究短视频制作&#xff0c;所以下载了抖音&#xff0c;说实话&#xff0c;我之前手机上并没有抖音&#xff0c;一直在用B站。 用了两天抖音&#xff0c;我发现&#xff0c;这玩意比刷B站还容易上瘾啊…

打工人福音⚡:公牛充电交互协议,建议收藏!

分享《一套免费开源充电桩物联网系统&#xff0c;是可以立马拿去商用的&#xff01;》 协议原文件下载地址&#xff1a; 链接: https://pan.baidu.com/s/1kW15Nfe9cjPDFLGPYJ-zUg?pwdagq2 提取码: agq2 1 总则 1.1 协议概述 本协议适用于公司所有充电产品包括交直流充电桩、…

SDK开发

为什么需要Starter&#xff1f; 理想情况:开发者只需关心调用哪些接口&#xff0c;传递哪些参数就跟调用自己写的代码一样简单。 开发starter的好处&#xff1a;开发者引入之后&#xff0c;可以直接在application.yml中写配置&#xff0c;自动创建客户端。 starter开发流程 …

bhyve:FreeBSD下的原生虚拟机管理器

hbyve简介 自 FreeBSD 10.0-RELEASE 起&#xff0c;BSD 许可的 bhyve 虚拟机管理器已成为底层系统不可或缺的一部分。bhyve 强大而灵活&#xff0c;支持多种客户机操作系统&#xff0c;涵盖 FreeBSD、OpenBSD 以及多个 Linux 发行版。在默认配置下&#xff0c;bhyve 提供对串行…