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

Java每日一练,技术成长不间断

目录

  • 题目
    • 1.下列关于继承的哪项叙述是正确的?
    • 2.Java的跨平台特性是指它的源代码可以在多个平台运行。()
    • 3.以下 _____ 不是 Object 类的方法
    • 4.以下代码:
    • 5.下面哪个流类不属于面向字符的流()
      • 总结

题目

选自牛客网

1.下列关于继承的哪项叙述是正确的?

A.在java中类允许多继承
B.在java中一个类只能实现一个接口
C.在java中一个类不能同时继承一个类和实现一个接口
D.java的单一继承使代码更可靠

正确答案:D

正确答案是D。在Java中,类的单一继承机制确实有助于提高代码的可靠性和可维护性。单一继承意味着一个类只能直接继承一个父类,这种设计简化了类之间的继承关系,避免了多继承可能带来的复杂性和二义性问题。例如,当一个类从多个父类继承相同的方法时,如果没有明确的规则来决定优先级,可能会导致运行时错误或不可预测的行为。

Java的设计者选择单一继承作为语言的基础特性,主要是为了简化语言的语义,减少潜在的编程错误,并使类层次结构更加清晰。虽然Java不支持类的多继承,但它通过接口的机制允许类实现多个接口,以此来达到某种程度的多继承功能,即一个类可以实现多个接口,从而继承多个抽象行为。这种方式既保持了代码的简洁性,又提供了足够的灵活性来满足复杂的设计需求。

因此,选项D“Java的单一继承使代码更可靠”是正确的描述。

对于A来说,这种多重继承是通过接口实现的,而不是类。也就是说,Java允许一个类实现多个接口,这可以被视为一种“横向”的多重继承,因为一个类可以从多个接口继承行为,但这些接口之间没有直接的继承关系。

而当谈到“多继承”时,通常指的是一个类直接继承多个父类的情况,这在Java中是不被支持的。Java设计者为了避免多继承带来的复杂性和潜在问题(如钻石问题,即两个父类有共同的父类导致方法选择的二义性),选择了单一继承的模型。在单一继承模型中,每个非抽象类只能继承一个直接父类,这有助于保持代码的清晰性和可维护性。

然而,Java通过接口的机制提供了一种变通的解决方案,允许类实现多个接口,从而获得多个抽象方法的定义。接口可以继承其他接口,形成层次结构,这在一定程度上模拟了多重继承的效果,但没有直接的类到类的多继承所带来的问题。

因此,Java确实支持通过接口实现的“多重继承”,但不支持类的“多继承”。这样的设计权衡了灵活性和代码的简洁性,是Java语言设计哲学的一部分。

2.Java的跨平台特性是指它的源代码可以在多个平台运行。()

A.正确
B.错误

正确答案:B
Java的跨平台特性并不直接指源代码可以在多个平台直接运行,而是指编译后的字节码(.class文件)可以在安装了Java虚拟机(JVM)的任何平台上运行。Java源代码首先被编译成平台无关的字节码,而不是特定平台的机器代码。字节码是一种中间语言,由JVM解释执行,而JVM则为不同的操作系统和硬件平台提供了相应的实现。这样,只要目标平台上安装了兼容的JVM,Java程序就可以在该平台上运行,而无需重新编译。

Java的跨平台特性是通过“一次编写,到处运行”(Write Once, Run Anywhere,
简称WORA)的原则实现的,这使得开发者能够在不同的操作系统和硬件架构上部署和运行相同的Java程序,而无需针对每个平台进行修改或重新编译。因此,Java的跨平台特性实际上是指编译后的字节码可以在多个平台上运行,而非源代码。

综上所述,Java的跨平台特性是基于JVM的,它允许编译后的Java程序在多种平台上运行,但源代码本身并不直接在不同平台运行,而是需要先被编译成字节码。

3.以下 _____ 不是 Object 类的方法

A.clone()
B.finalize()
C.toString()
D.hasNext()

正确答案是D,hasNext()

在Java中,Object类是所有类的基类,它提供了一些基本的方法,如clone()用于对象的浅拷贝,finalize()用于垃圾回收前的资源清理(尽管不推荐使用,且在很多现代JVM实现中已被弃用),以及toString()用于返回对象的字符串表示。这些方法都是Object类的成员方法。

然而,hasNext()方法并不是Object类的一部分,而是Iterator接口中的方法。Iterator接口用于遍历集合中的元素,hasNext()方法用于检查迭代器是否还有更多的元素可以迭代。因此,hasNext()方法与Object类无关,它属于集合框架的一部分,通常在实现Iterable接口的类或使用迭代器模式的类中找到。

因此,选项D,hasNext(),不是Object类的方法。

4.以下代码:

public class Test {
private static int j = 0;

private static Boolean methodB(int k) {j += k;return true;
}public static void methodA(int i) {boolean b;b = i < 10 | methodB(4);b = i < 10 || methodB(8);}public static void main(String args[]) {methodA(0);System.out.println(j);
}

}
结果是什么?
A.The program prints”0”
B.The program prints”4”
C.The program prints”8”
D.The program prints”12”
E.The code does not complete.

正确答案:B这段代码的主要逻辑在于methodA方法中的两个布尔表达式,以及methodB方法对静态变量j的修改。我们来逐步分析:

  1. methodB方法接收一个整数参数k,将其加到静态变量j上,并返回true。每次调用methodB都会增加j的值。

  2. methodA方法中的第一个布尔表达式b = i < 10 | methodB(4);使用了按位或|操作符,但是Java中布尔运算通常使用逻辑运算符&&||。这里按位或|实际上会将布尔值转换为整数,然后进行位运算。不过,由于methodB总是返回true,在布尔上下文中会被解释为非零值,因此这个表达式总是为真,methodB(4)会被调用,使得j的值增加4。

  3. 第二个布尔表达式b = i < 10 || methodB(8);使用了逻辑或||操作符,这意味着如果i < 10为真(在i为0时确实为真),methodB(8)不会被调用,因为左侧表达式已经确定了整个表达式的真值。因此,这里methodB(8)不会被执行。

  4. 最终,在main方法中调用methodA(0)methodB(4)会被调用一次,使得j的值从0变为4。

  5. 打印语句System.out.println(j);将输出此时j的值,也就是4。

因此,正确答案是B,程序将打印"4"。

5.下面哪个流类不属于面向字符的流()

A.BufferedWriter
B.FileInputStream
C.ObjectInputStream
D.InputStreamReader

正确答案是B和C,FileInputStreamObjectInputStream

面向字符的流(即字符流)在Java中主要用于处理文本数据,它们操作的是字符,而不是字节。字符流类通常继承自ReaderWriter。在提供的选项中:

  • BufferedWriter是面向字符的流,它继承自Writer类,用于提高写入字符数据的效率。

  • FileInputStream不是面向字符的流,而是面向字节的流,它继承自InputStream类,用于读取文件中的原始字节数据。

  • ObjectInputStream也不是面向字符的流,它是面向对象的流,用于反序列化对象,即从流中读取对象。它继承自InputStream类,处理的是字节数据,但其目的是读取和重建Java对象。

  • InputStreamReader是面向字符的流,它继承自Reader类,用于将字节流转换为字符流,通常用于读取使用特定字符集编码的文本数据。

因此,FileInputStreamObjectInputStream不属于面向字符的流,而属于面向字节的流或面向对象的流。选项B和C是正确的。

总结

通过持续的实践来巩固知识和提升技术水平。加油!!!请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第十章 计算机网络——应用层
  • 递归求数组和
  • vscode+cmake+msvc+vcpkg的入门使用
  • C++设计模式笔记(内附可运行代码示例)
  • Github 2024-07-25开源项目日报 Top10
  • ubuntu24.04 LTS安装BackupPC备份软件
  • docker compose 安装 kafka
  • ArduPilot开源代码之ROS2Humble+CartographerSLAM+SITL+Gazebo
  • reshape函数及MATLAB应用
  • sql查询优化小知识-01,非等值条件查询影响
  • Vue3基础语法
  • C#-了解ORM框架SqlSugar并快速使用(附工具)
  • c# 对接第三方接口实现签名
  • 记一次因敏感信息泄露而导致的越权+存储型XSS
  • 谷粒商城实战笔记-75-商品服务-API-品牌管理-品牌分类关联与级联更新
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • emacs初体验
  • HTTP那些事
  • If…else
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript-Array类型
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • javascript面向对象之创建对象
  • Python进阶细节
  • sessionStorage和localStorage
  • spring boot下thymeleaf全局静态变量配置
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 与 ConTeXt MkIV 官方文档的接驳
  • ionic异常记录
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #if等命令的学习
  • #nginx配置案例
  • #Z2294. 打印树的直径
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C语言)fgets与fputs函数详解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (十三)MipMap
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)VirtualBox安装增强功能
  • (转)用.Net的File控件上传文件的解决方案
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • **PHP二维数组遍历时同时赋值
  • .net FrameWork简介,数组,枚举
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net经典笔试题
  • .NET框架
  • .NET框架类在ASP.NET中的使用(2) ——QA