java,每日练习04

题目

选自牛客网

1.下面有关JDK中的包和他们的基本功能,描述错误的是?

A.java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
B.java.io:  包含提供多种输出输入功能的类
C.java.lang: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET
D.java.util:  包含一些实用性的类

正确答案:C

  • A. java.awt:这个选项是正确的。java.awt 包确实包含了用于构建和管理应用程序图形用户界面的基本类和接口。
  • B. java.io:这个选项也是正确的。java.io 包提供了文件和数据的各种输入/输出操作所需的类和接口。
  • C. java.lang:这个选项是错误的。java.lang 包并不是包含网络相关的类,而是包含了构成 Java 语言核心 API 的类,比如 Object, String, Integer, System 等。网络相关的类实际上位于 java.net 包中,例如 URL, Socket, 和 ServerSocket
  • D. java.util:这个选项是正确的。java.util 包包含了大量实用工具类,如集合框架类(例如 List, Set, Map),以及 Date, Calendar, Random 等其他常用类。

2.下面的Java赋值语句哪些是有错误的 ()

A.int i =1000;
B.float f = 45.0;
C.char s = ‘\u0639’;
D.Object o = ‘f’;
E.String s = “hello,world\0”;
F.Double d = 100;

正确答案:BF
F. Double 是java定义的类,double是java定义的数据类型 B. float f = 45.0;
错误。这是因为默认情况下,小数字面量被视为 double 类型。为了赋值给 float 类型的变量,需要使用 f 或 F 后缀,例如
float f = 45.0f; 或者使用强制类型转换 float f = (float)45.0;。

3.以下哪几种方式可用来实现线程间通知和唤醒:( )

A.Object.wait/notify/notifyAll
B.ReentrantLock.wait/notify/notifyAll
C.Condition.await/signal/signalAll
D.Thread.wait/notify/notifyAll

正确答案:AC
在Java中,线程间的同步和通信可以通过不同的机制来实现。下面是对每个选项的分析:

  • A. Object.wait/notify/notifyAll

    • 正确。wait(), notify(), 和 notifyAll() 方法是 Object 类的方法,可以用于实现线程间的同步和通信。这些方法通常在一个对象的监视器锁(monitor lock)上使用,该锁由
      synchronized 关键字获取。
  • B. ReentrantLock.wait/notify/notifyAll

    • 错误。ReentrantLock 类本身并没有 wait(), notify(), 或 notifyAll() 方法。ReentrantLock 是一个可重入的互斥锁,它不支持这些特定的同步方法。
  • C. Condition.await/signal/signalAll

    • 正确。Condition 接口提供了比 Objectwait(), notify(), 和 notifyAll() 更高级别的同步功能。await(), signal(), 和 signalAll() 分别对应于
      wait(), notify(), 和 notifyAll()Condition 对象通常与
      ReentrantLock 结合使用,因为 ReentrantLock 提供了 newCondition() 方法来创建
      Condition 实例。
  • D. Thread.wait/notify/notifyAll

    • 错误。Thread 类并没有 wait(), notify(), 或 notifyAll() 方法。这些方法属于 Object 类,而不是 Thread 类。

4.执行以下程序后的输出结果是()

public class Test {
    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("A"); 
        StringBuffer b = new StringBuffer("B"); 
        operator(a, b); 
        System.out.println(a + "," + b); 
    } 
    public static void operator(StringBuffer x, StringBuffer y) { 
        x.append(y); y = x; 
    }
}

A.A,A
B.A,B
C.B,B
D.AB,B

正确答案:D

首先,我们有 StringBuffer 类型的两个变量 ab,分别初始化为 “A” 和 “B”。

接下来,在 main 方法中调用了 operator 方法,传递了 ab 作为参数。

operator 方法内部:

  1. x.append(y); 这一行将 y 的内容附加到 x 的末尾。由于 x 初始值为 “A”,y 的初始值为 “B”,所以执行完这一行后 x 的值变为 “AB”。
  2. y = x; 这一行将 x 的引用赋给了 y。这意味着现在 y 指向了 x 所指向的同一个 StringBuffer 对象。

但是需要注意的是,StringBuffer 是一个值类型(对象),而非原始类型。当我们将 y 设置为 x
的引用时,这并不会改变在 main 方法中 b 变量所引用的对象。

回到 main 方法,当我们打印 ab 的值时:

  • a 在调用 operator 方法后被修改为 “AB”,因此 a 的值为 “AB”。
  • b 的值仍然是 “B”,因为在 operator 方法中改变 y 的引用并不会影响到 main 方法中的 b 变量。

因此,最终输出结果为 "AB,B"


5.下列说法正确的是

A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法可直接调用
C.在类方法中只能调用本类的类方法
D.在类方法中绝对不能调用实例方法

正确答案:B

  • A. 在类方法中可用 this 来调用本类的类方法

    • 错误。this 关键字通常用于引用当前对象的实例,而在类方法(静态方法)中无法访问非静态成员(包括 this)。因此,不能使用 this 来调用类方法(静态方法)。
  • B. 在类方法中调用本类的类方法可以直接调用

    • 正确。在类方法(静态方法)中可以直接调用本类的其他类方法(静态方法),无需使用任何特殊的语法。
  • C. 在类方法中只能调用本类的类方法

    • 错误。类方法不仅可以调用本类的其他类方法,还可以调用其他类的类方法,甚至可以调用静态变量等。
  • D. 在类方法中绝对不能调用实例方法

    • 错误。虽然类方法不能直接访问非静态成员(包括实例方法),但在某些情况下,可以通过创建类的实例并使用该实例来调用实例方法。但这不是直接调用,而是通过创建实例间接调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布说在见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值