首页 > 编程语言 >Java每日一练06

Java每日一练06

时间:2024-08-10 16:28:13浏览次数:12  
标签:一练 Java 变量 Parent Map 代码 引用 类型 06

这里写目录标题

一级目录

二级目录

三级目录

题目

选自牛客网

1.一般情况下,以下哪个选项不是关系数据模型与对象模型之间匹配关系?

A.表对应类
B.记录对应对象
C.表的字段对应类的属性
D.表之间的参考关系对应类之间的依赖关系

正确答案:D

  • 一个表(Table)可以对应到一个类(Class),这是对象关系映射(ORM)中最常见的映射之一。(选项A正确)
  • 表中的记录(Record 或 Row)对应于类的实例或对象(Object),每个记录映射为一个对象。(选项B正确)
  • 表的字段(Field 或 Column)对应于类的属性(Property 或 Attribute),即对象的状态。(选项C正确)

关于选项D,虽然表之间的参考关系(例如外键约束)确实表示了一种关联,但在面向对象的术语中,这种关系更常被描述为关联(Association)、聚合(Aggregation)或者组合(Composition),而不是简单的依赖(Dependency)。依赖关系在UML中有着特定的含义,它指的是一个对象使用另一个对象的功能或服务,但并不拥有它们。因此,将外键关系直接等同于依赖关系并不是一个恰当的映射方式。


2.transient 变量和下面哪一项有关?

A.Cloneable
B.Serializable
C.Runnable
D.Comparable

正确答案:B
transient 关键字与 Serializable 接口相关联。这是因为 transient 关键字用于标记 Java 对象中的那些不应该被序列化(即不应该被写入到持久化存储中)的变量。

当一个类实现了 Serializable接口时,意味着这个类的对象可以被序列化成字节流,并可以从该字节流中恢复。如果某个成员变量不需要持久化,或者其值应该在反序列化后重新计算,则可以使用transient 关键字来标记这个变量。这样,在序列化过程中,这些变量就不会被保存,而在反序列化之后,这些变量的值将会被设置为默认值(如 0falsenull)。

因此,正确答案是 B. Serializable。其他选项与 transient 关键字无关:

  • A. Cloneable:这是一个接口,用于指示一个类支持浅复制,transient 关键字与之没有直接关系。
  • C. Runnable:这是一个接口,用于定义线程可以执行的任务,与 transient 无关。
  • D. Comparable:这是一个接口,用于定义对象的自然排序,同样与 transient 无关。

3.线程安全的map在JDK 1.5及其更高版本环境 有哪几种方法可以实现?

A.Map map = new HashMap()
B.Map map = new TreeMap()
C.Map map = new ConcurrentHashMap();
D.Map map = Collections.synchronizedMap(new HashMap());

正确答案:CD

线程安全的 Map 在 JDK 1.5 及其更高版本中可以通过多种方式实现。以下是您提供的选项中的正确答案:

C. Map map = new ConcurrentHashMap();

ConcurrentHashMap 是从 JDK 1.5 开始引入的一个线程安全的 Map实现。它通过分段锁技术实现了高效的并发访问,允许多个读取操作和写入操作同时进行而不会相互阻塞。

D. Map map = Collections.synchronizedMap(new HashMap());

Collections.synchronizedMap() 方法可以将任何 Map 装饰为线程安全的 Map。这通常涉及到对底层Map 的所有修改操作加锁以确保同步。这种方法比ConcurrentHashMap
更加简单粗暴,可能会导致更多的锁竞争,尤其是在高并发场景下。

选项 A 和 B 中的 HashMapTreeMap
都不是线程安全的,因此不适合在多线程环境中直接使用而不采取额外的同步措施。

4.使用mvc模式设计的web应用程序具有以下优点,除了?

A.可维护行强
B.可扩展性强
C.代码重复少
D.大大减少代码量

正确答案:D

MVC(Model-View-Controller)模式是一种常用的设计模式,尤其适用于Web应用程序开发。它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller),这样的分离有助于提高应用程序的可维护性和可扩展性,并减少代码重复。

选项A、B和C都是MVC模式的优点:

  • A. 可维护性强:由于MVC模式将业务逻辑、数据展示和用户交互分离,使得代码更加清晰且易于维护。
  • B. 可扩展性强:当需要添加新功能或更改现有功能时,MVC模式下的模块化结构使得扩展变得更容易。
  • C. 代码重复少:通过将不同的职责分配给不同的组件,可以减少代码重复,并提高代码重用率。

然而,选项D “大大减少代码量”
并不一定是MVC模式的直接优势。虽然MVC模式可以帮助组织代码并提高代码的复用性,但它不一定能显著减少总体代码量。实际上,在某些情况下,为了保持MVC模式的清晰度和分离性,可能会增加一些辅助代码(比如控制器逻辑),从而导致代码总量有所增加。

因此,正确答案是 D. 大大减少代码量。


5.运行代码,输出的结果是()

public class P {
    public static int abc = 123;
    static{
        System.out.println("P is init");
    }
}
public class S extends P {
    static{
        System.out.println("S is init");
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(S.abc);
    }
}

A.P is init
123

B.S is init
P is init
123

C.P is init
S is init
123

D.S is init
123
正确答案:A

在Java中,子类并不会因为某些特定情况而被初始化。这里列出了一些不会触发子类初始化的情况:

  1. 调用父类的静态方法或静态字段:

    • 当你调用一个类的静态方法或访问其静态字段时,只有该类会被加载和初始化,而其子类不会被初始化。这是因为静态方法和静态字段属于类级别,与对象实例无关。
  2. 调用父类的final方法或字段:

    • 如果父类的方法或字段被声明为final,那么子类不能覆盖或改变这些方法或字段。因此,即使你在子类中调用了这些final方法或字段,也不会触发子类的初始化,因为这些方法或字段是在父类中定义的。
  3. 通过数组来引用:

    • 创建一个类的数组不会导致该类的初始化,除非你明确地创建了数组中的一个元素。这意味着仅仅声明一个子类的数组不会导致子类的初始化,而只会导致数组类型的父类被初始化。

示例代码可以帮助理解这些情况:

class Parent {
    static {
        System.out.println("Parent is initialized.");
    }

    static int staticField = 10;

    final int finalField = 20;

    public static void staticMethod() {
        System.out.println("Parent's static method called.");
    }

    public final int finalMethod() {
        return 30;
    }
}

class Child extends Parent {
    static {
        System.out.println("Child is initialized.");
    }
}

public class Test {
    public static void main(String[] args) {
        // 调用父类的静态方法
        Parent.staticMethod();

        // 访问父类的静态字段
        System.out.println(Parent.staticField);

        // 访问父类的final字段
        Parent parent = new Parent();
        System.out.println(parent.finalField);

        // 访问父类的final方法
        System.out.println(parent.finalMethod());

        // 通过数组来引用
        Parent[] parents = new Parent[10]; // 这里只初始化Parent类
    }
}

在这个例子中,只有 Parent 类会被初始化,而 Child 类不会被初始化,因为所有的操作都直接涉及 Parent 类。如果你想要初始化 Child 类,你需要显式地创建一个 Child 类的实例,例如 new Child();

6.下面有关值类型和引用类型描述正确的是()?

A.值类型的变量赋值只是进行数据复制,创建一个同值的新对象,而引用类型变量赋值,仅仅是把对象的引用的指针赋值给变量,使它们共用一个内存地址。

B.值类型数据是在栈上分配内存空间,它的变量直接包含变量的实例,使用效率相对较高。而引用类型数据是分配在堆上,引用类型的变量通常包含一个指向实例的指针,变量通过指针来引用实例。

C.引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。

D.值类型变量的作用域主要是在栈上分配内存空间内,而引用类型变量作用域主要在分配的堆上。

正确答案:ABC

值类型(Value Types)和引用类型(Reference Types)是Java中两种基本的数据类型分类。下面是针对每个选项的分析:

A.
值类型的变量赋值只是进行数据复制,创建一个同值的新对象,而引用类型变量赋值,仅仅是把对象的引用的指针赋值给变量,使它们共用一个内存地址。

  • 正确。对于值类型(如基本数据类型、枚举、结构体等),当你将一个值类型变量赋值给另一个变量时,实际上是复制了一份该值类型的副本。而对于引用类型(如类、接口等),赋值操作只是将指向同一对象的引用复制给了另一个变量。

B.
值类型数据是在栈上分配内存空间,它的变量直接包含变量的实例,使用效率相对较高。而引用类型数据是分配在堆上,引用类型的变量通常包含一个指向实例的指针,变量通过指针来引用实例。

  • 正确。值类型确实是在栈上分配内存空间的,而引用类型的实例是在堆上分配内存空间的,引用类型的变量则是在栈上存放的,其中包含指向堆上实际对象的引用。

C. 引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。

  • 正确。引用类型(如类)可以被继承,而值类型(如基本数据类型)是不可继承的。在Java中,值类型通常是封装的,并且不能作为其他类型的基类。

D. 值类型变量的作用域主要是在栈上分配内存空间内,而引用类型变量作用域主要在分配的堆上。

  • 部分正确。这个描述有些模糊。值类型变量的作用域确实主要是在栈上,但这里的“作用域”可能是指存储位置,而非变量的作用域范围。引用类型变量本身存储在栈上,但它们指向的对象存在于堆上。

标签:一练,Java,变量,Parent,Map,代码,引用,类型,06
From: https://blog.csdn.net/m0_67187271/article/details/141090437

相关文章

  • Java中字符串的常量池
    计算机存储中存在一个堆区域,堆区域中存在一个常量池,当申请了字符串变量后,会将值放入常量池中,下次申请新的变量时,会优先从常量池中查找,如果常量池中已经存在,则变量会直接指向常量池中的值,从而节省空间(jdk1.8之后的字符串常量池存在于堆中) Stringx1="aaa";//在常量池......
  • java实现解析pdf格式发票
    为了减少用户工作量及误操作的可能性,需要实现用户上传PDF格式的发票,系统通过解析PDF文件获取发票内容,并直接将其写入表单。以下文章记录了功能实现的代码。发票样式发票内容解析引用Maven使用pdfbox<dependency><groupId>org.apache.pdfbox</groupId><artif......
  • Java知识点1
    Java知识点什么是字节码?采用字节码的好处是什么?在Java中,JVM可以理解的代码就叫做字节码(即扩展名为.class的文件),它只面向虚拟机。Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。字节码并不针对一种特定......
  • java导出pdf
    文章目录概要maven包进入工具类使用示例注意事项概要java利用itextpdf导出pdfmaven包进入 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.3</version> </dependency> ......
  • Java--实例化
    目录五种方法构造器定义特点作用构造方法种this的使用五种方法无论哪一种方式必须经过的一步---调用构造方法。无论怎样构造函数作为初始化类的意义怎样都不会改变。new语句创建对象,最常用创建对象的方法工厂方法返回对象,如:Stringstr=String.valueOf();反射,调用java......
  • Java SpringBoot实现PDF转图片
    不是单页图片,是多页PDF转成一张图片的逻辑。我这里的场景是PDF转成图片之后返回给前端,前端再在图片上实现签字,并且可拖拽的逻辑,就是签订合同的场景。但是这里只写后端多页PDF转图片的逻辑。先说逻辑,后面直接上代码,大致分为以下几步:读取PDF文件(我的代码里是将在线的URL转成Inp......
  • springboot 博客交流平台-计算机毕业设计源码56406
    摘要博客交流平台作为一种重要的网络平台,为用户提供了展示自我、分享经验和与他人互动的空间。在国内外,研究者们关注博客交流平台的各个方面,并取得了显著的进展。研究内容主要包括用户体验和界面设计、社交化和互动性、多媒体内容支持、移动设备适配和跨平台体验、数据分析......
  • Java常用类
    目录String类日期时间类数学类包装类Runtime类1.获取运行时环境信息2.Runtime类的实例化和使用3.执行系统命令System类1.标准输入输出和错误输出2.系统属性3.时间和日期4.数组操作5.其他重要方法String类字符串常量池常见方法charAt(intindex):返回字符串指定位置的字......
  • Java--String类查找方法
    目录1.indexOf(Stringstr)2.indexOf(Stringstr,intfromIndex)3.lastIndexOf(Stringstr)4.lastIndexOf(Stringstr,intfromIndex)5.contains(CharSequences)6.startsWith(Stringprefix)7.endsWith(Stringsuffix)booleanequalsStringtrim在Java中,String类提供了......
  • 工厂模式与策略模式的区别及其在Java中的应用
    工厂模式与策略模式的区别及其在Java中的应用1.引言在软件开发中,设计模式被广泛应用于解决各种常见问题,提高代码的可维护性、可扩展性和可读性。工厂模式(FactoryPattern)和策略模式(StrategyPattern)是两种非常重要的设计模式,它们解决了不同的设计问题,并且在许多情况下可......