当前位置: 首页 > news >正文

牛客疑难题(5

1、!!!!!

2、Java类与对象方法中虚方法

关于Java里的虚方法、抽象方法描述不正确的是?

A 虚方法可以被子类继承并重写方法

B 抽象方法不可以带实现

C 抽象方法非抽象子类必须实现

D 抽象方法可以被子类实现成虚方法

正确答案:D

关于Java中的虚方法与抽象方法,描述不正确的是:

D. 抽象方法可以被子类实现成虚方法
解析

  1. Java中虚方法的特性

    • Java默认所有非final、非static的非静态方法均为虚方法(即支持动态绑定),子类可通过@Override重写。
    • 虚方法在父类中可以有实现,子类可覆盖或扩展。
  2. Java中抽象方法的特性

    • 抽象方法无方法体,必须由子类实现(若子类非抽象类)。
    • 抽象方法只能存在于抽象类中,且子类必须实现所有抽象方法。
  3. 选项D的错误性

    • 抽象方法本身无实现,子类在实现时需提供完整方法体,而非将其声明为“虚方法”。
    • Java中不存在“将抽象方法实现为虚方法”的概念,因为虚方法是默认行为(非final方法均可被重写),而抽象方法强制要求子类实现。

其他选项的正确性

  • A正确:虚方法可被子类继承并重写(Java默认支持动态绑定)。
  • B正确:抽象方法无方法体,仅定义签名。
  • C正确:非抽象子类必须实现父类的抽象方法,否则自身需声明为抽象类。

结论D为错误描述

3 在Java中,所有文件在底层都是以字节形式存储的,因此无论是文本文件还是二进制文件,都可以当作二进制文件来处理。

这也是为什么Java提供了统一的字节流类(如FileInputStream和FileOutputStream)来处理所有类型的文件。

4 在Java中,静态方法不能直接访问非静态成员,这会导致编译错误。

5 super关键字

在Java中是一个非常重要的关键字,它具有多个重要作用,选项D是完全正确的。让我们逐个分析super的三个主要功能:

1. 访问父类被隐藏的非私有成员变量(选项A)
当子类中定义了与父类同名的成员变量时,子类的变量会隐藏父类的变量。这时如果要访问父类中被隐藏的变量,就需要使用super关键字。例如:
super.variableName 可以访问父类中的变量。

2. 调用父类中被重写的方法(选项B)
当子类重写了父类的方法时,如果需要在子类中调用父类被重写的方法,就需要使用super关键字。例如:
super.methodName() 可以调用父类中被重写的方法。

3. 调用父类的构造函数(选项C)
在子类的构造函数中,可以使用super()来调用父类的构造函数。这常用于初始化从父类继承的属性。如果不显式调用,编译器会自动插入super()调用父类的无参构造函数。

6 重写规则

本题的核心考点是Java中方法重写(Override)的规则:
1. 重写方法必须保持相同的方法名和参数列表
2. 返回类型必须相同或是父类返回类型的子类型
3. 访问修饰符的限制不能比父类更严格
4. 不能抛出比父类方法更多的异常

7 对象IO与序列化


8 JVM 内存配置参数:

对于JVM内存配置参数:

-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3

,其最小内存值和Survivor区总大小分别是()

A

5120m,1024m

B

5120m,2048m

C

10240m,1024m

D

10240m,2048m

正确答案:D

你的答案:B

官方解析:

这道题目考察了JVM内存配置参数的理解。让我们逐个分析这些参数:

-Xmx10240m:最大堆内存
-Xms10240m:初始堆内存(最小堆内存)
-Xmn5120m:新生代大小
-XXSurvivorRatio=3:Eden区与Survivor区的比例为3:1:1

首先,最小内存值就是-Xms参数指定的值,即10240m。

关于Survivor区总大小的计算:
1. 新生代总大小为5120m(-Xmn参数指定)
2. 新生代分为Eden区和两个Survivor区
3. 根据SurvivorRatio=3,意味着Eden:S0:S1=3:1:1
4. 所以新生代5120m要分成5份(3+1+1=5)
5. 每份大小为5120/5=1024m
6. 两个Survivor区总大小=1024m×2=2048m

因此,最小内存值为10240m,Survivor区总大小为2048m,对应D选项。

分析其他选项:
A错误:把新生代大小5120m错误地当作最小内存值,且Survivor计算错误
B错误:最小内存值使用了错误的数值
C错误:虽然最小内存值正确,但Survivor区总大小计算错误

知识点:2015、Java、Java工程师、JavaSE

9  static方法不能直接访问非static的属性。

静态方法属于类级别,而非静态属性属于实例级别,在没有实例化对象的情况下,静态方法无法访问实例属性。
abstract和final是互斥的修饰符,不能同时修饰一个类。因为abstract类是用来被继承的,而final类禁止被继承,两者矛盾。
abstract类中不建议有private的成员。因为abstract类的主要目的是被继承和扩展,而private成员无法被子类访问,这与abstract类的设计初衷不符。
abstract方法必须在abstract类或接口中声明。因为abstract方法没有方法体,需要子类来实现,所以只能出现在abstract类或接口中。

10 Java API 与mian方法()

11 maven基于项目 ant是基于java的构建工具 maven强

12 关于final关键字的信息:

13、检查型异常和运行时异常:

4.

下面关于 Java 中异常处理的说法错误的是()

A

可以使用 try-catch-finally 块来捕获和处理异常

B

可以使用 throws 关键字来声明方法可能抛出的异常

C

运行期异常不需要进行捕获或者声明

D

编译期异常需要在代码中显式地进行异常处理

正确答案:C

你的答案:B

官方解析:

在Java异常处理机制中,运行时异常(RuntimeException)同样需要进行适当的处理,C选项的说法是错误的。虽然运行时异常在语法上不强制要求必须处理,但为了程序的健壮性和可靠性,也应当对其进行合理的捕获和处理。

分析其他选项:
A正确:try-catch-finally是Java中最基本的异常处理结构,try块中包含可能抛出异常的代码,catch块用于捕获和处理特定类型的异常,finally块中的代码无论是否发生异常都会执行。

B正确:throws关键字用于在方法声明中指明该方法可能抛出的异常类型,这是Java异常处理机制的一个重要组成部分。

D正确:编译期异常(checked exception)必须在代码中通过try-catch显式捕获或者通过throws声明,否则代码将无法通过编译。这是Java编译器的强制要求。

总的来说,不论是运行时异常还是编译期异常,都建议在代码中进行适当的异常处理,这样可以提高程序的稳定性和用户体验。

13 final在定义编译前需要被初始化:

5.

1

2

3

4

5

6

7

class Foo {

    final int i;

    int j;

    public void doSomething() {

        System.out.println(++j + i);

    }

}

的输出是?

A

0

B

1

C

2

D

不能执行,因为编译有错

正确答案:D

你的答案:B

官方解析:

这道题目考察了Java中final变量的初始化规则和类成员变量的默认值规则。代码中的编译错误在于final变量i没有被初始化。

在Java中,final变量(成员变量)必须在以下位置之一进行初始化:
1. 声明时直接初始化
2. 在构造方法中初始化
3. 在初始化块中初始化


示例代码中的final变量i既没有在声明时初始化,也没有在构造方法中初始化,这违反了final变量的初始化规则,因此编译器会报错。

分析其他选项:
A、B、C都是不正确的,因为代码根本无法通过编译。这些选项假设了代码可以执行,但实际上由于final变量i未初始化的编译错误,程序根本无法运行到执行阶段。
另外需要注意的是:
- 非final的成员变量j会被自动初始化为0
- ++j操作是可以的,因为j不是final变量
- 但由于i的编译错误,整个方法都无法正常编译

所以D选项"不能执行,因为编译有错"是正确答案。

知识点:Java

13 疑难杂症:

http://www.lryc.cn/news/618001.html

相关文章:

  • 基于Springboot+UniApp+Ai实现模拟面试小工具九:移动端框架搭建
  • 【GPT入门】第45课 无梯子,linux/win下载huggingface模型方法
  • 应用程序已被Java安全阻止解决方法
  • 支持小语种的在线客服系统,自动翻译双方语言,适合对接跨境海外客户
  • CSS预处理器之Sass全面解析与实战指南
  • C#图形库SciChart与ScottPlot及LiveCharts2对比
  • 数据类型 string
  • 【lucene】livedocs描述
  • AR 智能眼镜:从入门到未来
  • MySQL 基本语法
  • 【listlist模拟】
  • Buildroot(二)
  • Python 类元编程(定制描述符的类装饰器)
  • 文旅元宇宙:科技重塑数字消费新文明
  • 【vue(一))路由】
  • 爬虫与数据分析相结合案例总结
  • Vue2篇——第二章 Vue从指令修饰符到侦听器的全面解析(重点)
  • 亚马逊广告进阶指南:如何快速打开新品的流量
  • Python笔记之`getattr`和`hasattr`用法详解
  • Docker中ES安装分词器
  • 【11-计算机视觉介绍】
  • 【代码随想录day 17】 力扣 654.最大二叉树
  • LeetCode151~188题解
  • Apache RocketMQ:消息可靠性、顺序性与幂等处理的全面实践
  • Docker 详解(保姆级安装+配置+使用教程)
  • MySQL高可用改造之数据库开发规范(大事务与数据一致性篇)
  • C++方向知识汇总(三)
  • Git 常用命令总结
  • 泰国文字识别技术:从精准识别字符向深度理解语义的方向不断进化
  • 日本VPS内存溢出了如何优化