今日Java练习:选择题挑战

题目

选自牛客网

1.假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4,2,5,0,3,0]。 执行下面的方法numQuest(),数组num会变成?

private List<Integer> nums;
 
//precondition: nums.size() > 0
//nums contains Integer objects
public void numQuest() {
    int k = 0;
    Integer zero = new Integer(0);
    while (k < nums.size()) {
        if (nums.get(k).equals(zero))
            nums.remove(k);
        k++;
    }
}

A.[3, 5, 2, 4, 0, 0, 0, 0]
B.[0, 0, 0, 0, 4, 2, 5, 3]
C.[0, 0, 4, 2, 5, 0, 3, 0]
D.[0, 4, 2, 5, 3]

正确答案:D

zero==0,如果get(k)==0,执行remove(k);
  size==8 ; k==0 , 因此第一次remove(0) ,
  删除索引为0的元素也就是第一个元素0,然后k++, size()--; 
此时集合元素为 :[0,4,2,5,0,3,0] 

 size==7; k==1,因此get(1)==4 !=0 , 不执行remove(); 
  k++,因没有删除元素,size()不变, 
此时集合元素:[0,4,2,5,0,3,0] 

          size==7;k==2,k++;


          size==7;k==3,k++;


          size==7;k==4,get(4)==0,remove(4) ; 
           k++,  size()--; 

此时集合元素为: [0,4,2,5,3,0]


          size==6;k==5,get(5)==0,remove(5);k++, size()--;

此时集合元素为: [0,4,2,5,3]


          size==5; k==6 ;退出循环;最终输出此时集合元素为    [0,4,2,5,3] ;

一般更改删除集合元素,使用iterator()迭代器,不推荐使用这种;

2.以下代码的输出结果是?

public class B
{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

A.静态块 构造块 构造块 构造块
B.构造块 静态块 构造块 构造块
C.构造块 构造块 静态块 构造块
D.构造块 构造块 构造块 静态块

正确答案:C
选 A被打脸。
在这里插入图片描述

  1. 加载类 B:当 JVM 加载类 B 时,首先会执行类的静态部分。
  2. 静态域:静态域包括静态变量、静态方法和静态块。当类首次被加载时,这些静态域将按照它们在源代码中出现的顺序执行,并且只执行一次。
  3. 实例初始化:每次创建新实例时,会执行构造块(实例初始化块)和构造方法。构造块总是先于构造方法执行。

我们可以确定以下执行顺序:

  1. 创建 t1 实例:首先初始化 t1 时,实例初始化块 {} 被执行,输出 “构造块”。
  2. 创建 t2 实例:接着初始化 t2 时,实例初始化块 {} 再次被执行,输出 “构造块”。
  3. 静态初始化块:在所有静态变量初始化之后,静态初始化块 static {} 被执行,输出 “静态块”。
  4. 执行 main 方法:最后,在 main 方法中创建 t 实例时,实例初始化块 {} 第三次被执行,输出 “构造块”。

总结起来,输出顺序应该是 “构造块”、“构造块”、“静态块” 和 “构造块”。

因此,正确的输出顺序是:

  • 构造块
  • 构造块
  • 静态块
  • 构造块

3.以下说法中正确的有?

A.StringBuilder是 线程不安全的
B.Java类可以同时用 abstract和final声明
C.HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
D.volatile关键字不保证对变量操作的原子性

正确答案:AD

A. StringBuilder是线程不安全的

正确StringBuilder 是线程不安全的。它的方法不是同步的,这意味着在多线程环境中直接使用 StringBuilder 可能会导致数据不一致的问题。

B. Java类可以同时用 abstract 和 final 声明

错误。Java 中的类不能同时被声明为 abstractfinalabstract 表示类是抽象的,不能被实例化,并且可能包含抽象方法;而 final表示类不能被继承。这两个修饰符是相互排斥的,因为一个抽象类的目的通常是被继承,而 final 类则不允许被继承。

C. HashMap中,使用 get(key)==null 可以判断这个HashMap是否包含这个key

错误。在 HashMap 中,get(key) 方法返回与指定键关联的值,如果键不存在,则返回 null。但是,如果键对应的值正好是 null,那么 get(key) 也会返回 null
因此,仅凭get(key)==null 无法区分是键不存在还是键存在但其值为 null
正确的做法是使用 containsKey(key)方法来判断一个键是否存在。

D. volatile 关键字不保证对变量操作的原子性

正确volatile 关键字确保了变量的可见性和有序性,也就是说,当一个线程修改了一个被声明为 volatile 的变量后,其他线程能够立即看到这个修改。但是,volatile 关键字不保证复合操作的原子性。
例如,对 volatile 变量的递增或递减操作不是原子性的,多个线程同时执行这样的操作可能导致不正确的结果。

综上所述,正确的选项是 AD


4.下面属于JSP内置对象的是?

A.out对象
B.response对象
C.application对象
D.page对象

正确答案:ABCD JSP(JavaServer
Pages)提供了多个内置对象,这些对象可以帮助开发者更容易地编写动态网页。下面是对这些选项的解释:

A. out 对象

正确out 对象是一个 JspWriter 类型的对象,用于向客户端输出数据。你可以使用它来生成 HTML 标签、文本或其他类型的内容。

B. response 对象

正确response 对象是一个 HttpServletResponse 类型的对象,它允许开发者控制 HTTP 响应。你可以使用它来设置响应头、状态码或者重定向页面等。

C. application 对象

正确application 对象是一个 ServletContext 类型的对象,它代表了当前 Web 应用的上下文。你可以使用它来存储全局变量或获取应用范围内的配置信息。

D. page 对象

正确page 对象是一个 JspPage 类型的对象,它代表了当前 JSP 页面本身。你可以使用它来访问页面的属性或执行页面上的操作。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布说在见

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

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

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

打赏作者

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

抵扣说明:

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

余额充值