这里写目录标题
一级目录
二级目录
三级目录
题目
选自牛客网
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
关键字来标记这个变量。这样,在序列化过程中,这些变量就不会被保存,而在反序列化之后,这些变量的值将会被设置为默认值(如0
、false
或null
)。因此,正确答案是 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 中的
HashMap
和TreeMap
都不是线程安全的,因此不适合在多线程环境中直接使用而不采取额外的同步措施。
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中,子类并不会因为某些特定情况而被初始化。这里列出了一些不会触发子类初始化的情况:
调用父类的静态方法或静态字段:
- 当你调用一个类的静态方法或访问其静态字段时,只有该类会被加载和初始化,而其子类不会被初始化。这是因为静态方法和静态字段属于类级别,与对象实例无关。
调用父类的
final
方法或字段:
- 如果父类的方法或字段被声明为
final
,那么子类不能覆盖或改变这些方法或字段。因此,即使你在子类中调用了这些final
方法或字段,也不会触发子类的初始化,因为这些方法或字段是在父类中定义的。通过数组来引用:
- 创建一个类的数组不会导致该类的初始化,除非你明确地创建了数组中的一个元素。这意味着仅仅声明一个子类的数组不会导致子类的初始化,而只会导致数组类型的父类被初始化。
示例代码可以帮助理解这些情况:
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
标签:一练,Java,变量,Parent,Map,代码,引用,类型,06 From: https://blog.csdn.net/m0_67187271/article/details/141090437值类型(Value Types)和引用类型(Reference Types)是Java中两种基本的数据类型分类。下面是针对每个选项的分析:
A.
值类型的变量赋值只是进行数据复制,创建一个同值的新对象,而引用类型变量赋值,仅仅是把对象的引用的指针赋值给变量,使它们共用一个内存地址。
- 正确。对于值类型(如基本数据类型、枚举、结构体等),当你将一个值类型变量赋值给另一个变量时,实际上是复制了一份该值类型的副本。而对于引用类型(如类、接口等),赋值操作只是将指向同一对象的引用复制给了另一个变量。
B.
值类型数据是在栈上分配内存空间,它的变量直接包含变量的实例,使用效率相对较高。而引用类型数据是分配在堆上,引用类型的变量通常包含一个指向实例的指针,变量通过指针来引用实例。
- 正确。值类型确实是在栈上分配内存空间的,而引用类型的实例是在堆上分配内存空间的,引用类型的变量则是在栈上存放的,其中包含指向堆上实际对象的引用。
C. 引用类型一般都具有继承性,但是值类型一般都是封装的,因此值类型不能作为其他任何类型的基类。
- 正确。引用类型(如类)可以被继承,而值类型(如基本数据类型)是不可继承的。在Java中,值类型通常是封装的,并且不能作为其他类型的基类。
D. 值类型变量的作用域主要是在栈上分配内存空间内,而引用类型变量作用域主要在分配的堆上。
- 部分正确。这个描述有些模糊。值类型变量的作用域确实主要是在栈上,但这里的“作用域”可能是指存储位置,而非变量的作用域范围。引用类型变量本身存储在栈上,但它们指向的对象存在于堆上。