JavaSE-易错题集-001

2024-09-06 22:20
文章标签 java se 错题 001

本文主要是介绍JavaSE-易错题集-001,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. AccessViolationException异常触发后,下列程序的输出结果为(      )

1

2

3

4

5

6

7

8

9

10

11

12

13

static void Main(string[] args)  

{  

    try  

    {  

        throw new AccessViolationException();  

        Console.WriteLine("error1");  

    }  

    catch (Exception e)  

    {  

        Console.WriteLine("error2");  

    }  

    Console.WriteLine("error3");  

  • A error2error3
  • B error3
  • C error2
  • D error1

正确答案:A

题解:

(1. 若catch(){} 块中 有throw 语句,则 try{} catch{} finally{} 块之外的代码不执行;否则,执行。

(2. try{} 中有异常,则try{}中异常下面代码不执行。

(3.  finally{} 中显示的代码必执行。


2. 非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.

  • A 正确
  • B 错误

正确答案:B

题解:

实际上这道题考察的是两同两小一大 原则:

方法名相同,参数类型相同

子类返回类型小于等于父类方法的返回类型

子类抛出异常小于等于父类方法抛出异常

子类访问权限大于等于父类方法访问权限


3. 以下代码执行后输出结果为( )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public class Test

{

    public static Test t1 = new Test();

    {

         System.out.println("blockA");

    }

    static

    {

        System.out.println("blockB");

    }

    public static void main(String[] args)

    {

        Test t2 = new Test();

    }

 }

  • A blockAblockBblockA
  • B blockAblockAblockB
  • C blockBblockBblockA
  • D blockBblockAblockB

正确答案:A

题解:

首先区别<clinit>是类初始化,<init>是实例初始化

类装载准备阶段->类初始化clinit阶段

类装载准备阶段:变量赋系统要求的初始值(0或者null等),final变量会在此时赋用户定义的初始值

类初始化<clinit>过程:

Step1 编译器收集t1的赋值动作,static语句块,main方法语句块

Step2 执行收集好的语句块:

Step2.1 执行t1 = new Test,发现clinit过程已经调用,于是可以开始触发init过程,执行成员变量的初始化(此处没有),以及非静态代码块,输出blockA,最后调用构造函数(此处没有)

Step2.2 按照顺序,执行static语句块,输出blockB

Step2.3 按照顺序,执行main方法语句块,执行t2 = new Test,触发init方法,执行非静态代码块,输出blockA


4. 下面哪几个函数 public void example(){....} 的重载函数?()

  • public void example(int m){...}
  • public int example(){..}
  • public void example2(){..}
  • public int example(int m,float f){...}

参考答案

AD ,函数方法名必须相同,看参数列表即可,无关返回值。

 题解:

java重载的时候以参数个数和类型作为区分,方法名相同,返回类型可以相同也可以不同,但不以返回类型作为区分,所以b也是错的,因为b的参数列表和原来一样。


5. jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )

  • 抽象类没有构造函数
  • 接口没有构造函数
  • 抽象类不允许多继承
  • 接口中的方法可以有方法体

正确答案:B C

 题解:

A 抽象类是一个类,所以有构造器

B 接口不是一个类,所以没有构造函数

C 抽象类是一个类,类不允许继承多个类,但是可以实现多个接口,而接口可以继承多个接口,接口不能实现接口。

D jdk1.8 之前,接口中的方法都是抽象方法,用public abstract 修饰,jdk1.8新特性:可以有默认方法(用default 修饰,不能省略)和静态方法(static修饰),jdk1.9:接口中的默认方法还可以用private修饰


6. 下面哪些写法能在 java8 中编译执行()

  • dir.listFiles((File f)->f.getName().endsWith(“.Java”));
  • dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
  • dir.listFiles((_.getName().endsWith(“.Java”)));
  • dir.listFiles( f->f.getName().endsWith(“.Java”));

正确答案:A D

题解:

Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:

(1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。

(2) 箭头(→)。必须通过英文中画线和大于符号组成。

(3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。

由此可见,应该是A和D正确。


7. 在JDK1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些?

  • 抽象类中可以有普通成员变量,接口中没有普通成员变量。
  • 抽象类和接口中都可以包含静态成员常量。
  • 一个类可以实现多个接口,但只能继承一个抽象类
  • 抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。

正确答案:A B C D

 题解:(jdk1.7中)

接口(interface) 可以说是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的对象变量类型默认为public static final。另外,接口和抽象类在方法上有区别:

1. 抽象类可以有构造方法,接口中不能有构造方法。

2. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

3. 抽象类中可以有普通成员变量,接口中没有普通成员变量

4. 抽象类中抽象方法的访问类型可以是public,protected和默认类型

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final 类型,并且默认为 public static final 类型

7. 一个类可以实现多个接口,但只能继承一个抽象类。二者在应用方面也有一定的区别:接口更对的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的复用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码。

这篇关于JavaSE-易错题集-001的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143283

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat