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

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.mzph.cn/diannao/21605.shtml

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

相关文章

Python | 武理刷题2

1.文件打开方式 只读模式r 追加写模式a 覆盖写模式w 2. matplotlib绘制 散点图:scatter() 饼图 pie() 直方图&#xff1a;bar() 编程题&#xff1a; 3. 有五个数字&#xff1a;1、2、3、4、5&#xff0c;输出由这五个数字组成的所有互不相同且无重复数字的三位数 #有五个…

计算机网络学习记录 网络层 Day4(上)

计算机网络学习记录 网络层 Day4 &#xff08;上&#xff09; 你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner gitee https://gitee.com/Qiuner 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f60…

122. 买卖股票的最佳时机 II(中等)

122. 买卖股票的最佳时机 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;122. 买卖股票的最佳时机 II 2.详细题解 实现最大的利润&#xff0c;即只要有盈利就收入囊中&#xff0c;由于交易没有具体限制次数&#xff0c;因此可以依…

再论Web应用在医学研究中构建数据收集问卷(stremlit_survey包体验)

再论Web应用在医学研究中构建数据收集问卷&#xff08;Streamlit_survey包体验&#xff09; 概述 医学队列研究是临床研究的重要形式&#xff0c;这种研究通过收集临床诊疗过程中产生的数据而阐述疾病相关的因素。在临床数据收集过程中&#xff0c;Web APP体现出了一定的优势…

计算机毕业设计 | SpringBoot图书管理系统(附源码)

1&#xff0c; 概述 1.1 课题背景 开发一个学生成绩管理系统&#xff0c;采用计算机对学生成绩进行处理&#xff0c;进一步提高了办学效益和现代化水平。为广大教师和学生提高工作效率&#xff0c;实现学生成绩信息管理工作流程的系统化、规范化和自动化。现在我国中学的学生…

YOLOv8_obb训练流程-原理解析[旋转目标检测理论篇]

在旋转目标检测网络中,换了个顺序,先把训练流程捋一遍,然后再取捋一下测试的流程。由下图的YOLOv8l_obb网络结构图可以看到相对于目标检测网络,旋转目标检测网络只是在Head层不相同,在每个尺度特征层中增加了Angle分支(浅蓝色),通过两个卷积组和一个Conv卷积得到得到通…

jupyter之plt 画图弹出窗口展示图片以及静态图片切换方法

1. jupyter出图的三种方式 在python的Jupyter Notebook中&#xff0c;使用matplotlib绘制动态图形时&#xff0c;可能出现只显示一张静态图像。 这是因为在notebook中使用plt绘图共有三种模式&#xff1a; %matplotlib inline&#xff1a;这是默认的模式&#xff0c;输出的图片…

基于单片机的步进电机控制系统的研究

摘要: 步进电机控制作为一种电机控制系统的重要模式,属于现代数字化控制的重要手段,其应用已经相当广泛。步进电机属于感应电机类,利用电子电路将直流电分为分时供电、多相时序供电控制电流,利用这种电流为电机供电,驱使电机工作。步进电机不能够在常规模式下使用,必须通过双环…

C语言Prim算法和Prim-Alternat找最小生成树

文章目录 1、用prim算法求最小生成树C语言Prim算法实现 2、用Prim-Alternate算法求最小生成树3、C语言Prim-Alternate算法实现 1、用prim算法求最小生成树 绿色线会标记选过的边 从v1当作起始点开始&#xff0c;可选择: (v1,v2)权值为6 &#xff08;v1,v3&#xff09;权值为3 &…

C# as运算符

一、C# as运算符 as运算符用于执行引用类型的显式类型转换。请阅读C#数据类型。 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Test {class Program{static void Main(string[] args){// C# as运算符-www.baike369.comob…

经济学SSCI期刊,中科院1区,领域内顶刊,影响力高

一、期刊名称 World Development 二、期刊简介概况 期刊类型&#xff1a;SSCI 学科领域&#xff1a;经济学 影响因子&#xff1a;6.9 中科院分区&#xff1a;1区 三、期刊征稿范围 《世界发展》是一本多学科的发展研究月刊。它力求探讨如何改善生活水平和一般人类状况&am…

【CN】项目介绍

云原生项目官网 毕业项目 Argo&#xff1a;持续集成和交付 英 [ˈɑ:ɡəu] 美 [ˈɑrˌɡo] Kubernetes 原生工具&#xff0c;用于运行工作流程、管理集群以及正确执行 GitOps。 Argo 于 2020 年 3 月 26 日被 CNCF 接受为孵化成熟度级别&#xff0c;然后于 2022 年 12 月…

Python编程入门教学:从基础到实践的全方位指导

Python编程入门教学&#xff1a;从基础到实践的全方位指导 Python&#xff0c;作为一种简洁、易读且功能强大的编程语言&#xff0c;正日益受到广大编程爱好者的青睐。无论你是编程小白还是有一定基础的开发者&#xff0c;本文都将为你提供一份从基础到实践的全方位Python编程…

AIGC绘画基础——Midjourney关键词大全+万能公式

距发布MJ初级注册入门教程已有时日&#xff0c;很多粉丝表示很有用&#xff0c;但关键词有很多人不知如何组合使用&#xff0c;那今天再给大家更新一期&#xff0c;主要是教大家如何用关键词、把控关键词描述&#xff0c;除此之外在文末更新了一大堆关键词给大家使用~ 一、Midj…

上传下载接口

【1】上传接口 POST form-data请求&#xff1a; URL&#xff1a;http://nginxIP:nginxPort/isa-eoms-service-taskflow-special/attachmentService/uploadFile 入参&#xff1a; uploadFile&#xff1a; 文件 fileType&#xff1a; &#xff08;枚举&#xff1a;document, ima…

合并两个有序链表和合并 K 个升序链表

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 […

NFTScan | 05.27~06.02 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.05.27~ 2024.06.02​ NFT Hot News 01/ Mint Blockchain 披露最新路线图&#xff0c;释放 NFT 生态重磅发展计划 5 月 28 日&#xff0c;Mint Blockchain 开发者团队 MintCore 更新…

map的顺序和逆序-------c++

map默认是升序 即最小的在前面降序&#xff08;最大的在前面&#xff09;&#xff1a;std::map<int, std::string, greater<int>> mapgreater;升序&#xff08;最小的在前面&#xff09;&#xff1a; std::map<int, std::string, less> mapless; // 升序 #i…

Arduino 串口接收数据

1、上位机发送十六进制 AA 01 DE 下位机回复AC&#xff0c;上位机发送十六进制 AA 02 DE 下位机回复AB。如下图所所示。 2、Arduino 代码如下。 #define ReceiveLen 100 // 接收数据数组长度 byte ReceiveData[ReceiveLen]; // 接收数据数组void loop() {// 串口接收数…

jadx-gui-1.5 反编译工具使用教程 反混淆 Java android 查看签名

JADX&#xff1a;JADX是一个强大的反编译工具&#xff0c;它支持命令行和图形界面操作。除了基本的反编译功能外&#xff0c;JADX还提供了反混淆功能&#xff0c;有助于提高反编译后代码的可读性。 在Android开发和安全分析领域&#xff0c;反编译工具扮演着至关重要的角色。这…