首页 > 编程语言 >今日Java练习:选择题挑战

今日Java练习:选择题挑战

时间:2024-08-09 17:57:12浏览次数:19  
标签:初始化 Java get 静态 练习 选择题 构造 对象 size

题目

选自牛客网

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 页面本身。你可以使用它来访问页面的属性或执行页面上的操作。

标签:初始化,Java,get,静态,练习,选择题,构造,对象,size
From: https://blog.csdn.net/m0_67187271/article/details/141060067

相关文章

  • Java中的8种基本数据类型及其存储方式
    文章目录基本数据类型存储方式整型数据浮点型数据char类型数据布尔类型数据其他数据类型的转换自动转换强制转换基本数据类型Java属于C类语言,有8种数据类型数据类型byteshortintlongfloatdoublecharboolean数据大小8bit16bit32bit64bit32bit64bit8bit/24bit/32bit......
  • 面向忙碌的-Java-开发者的-Python-教程-全-
    面向忙碌的Java开发者的Python教程(全)原文:PythonfortheBusyJavaDeveloper协议:CCBY-NC-SA4.0一、语言让我们从了解Python与Java的不同之处开始我们的Python之旅。在下一章深入研究Python的语法之前,我将帮助你设置Python。Python是什么?Python是一种“......
  • java中子类如何通过super调用父类的构造方法
    在Java中,子类可以通过使用super关键字来调用父类的构造方法。这通常在子类的构造方法中进行,以便在创建子类对象时初始化父类的成员。你有一个父类Animal,并且它有一个构造方法:classAnimal{Stringname;//父类的构造方法Animal(Stringname){......
  • 十大java开发框架总结,微服务开发必备!
     提起java开发框架,大部分工程师可能主要使用的是ssh三件套,在当前微服务作为开发主流的时代,我们有必要也了解下其他java开发框架。1.SpringBoot SpringBoot是当前Java开发框架的首选,几乎是行业标准了。由轻量级Java开发框架spring进化而来。一直被模仿,从未被超越。2. Quar......
  • java创建线程的几种方式,以及它们之间的区别(面试常用)
    线程创建的几种方法继承Thread类。如果继承了Thread类,直接new一个对象就可以创建一个线程实现Runnable接口。如果实现了Runnable接口,则还需要用Thread的构造方法,才能创建一个线程//使用Thread类创建线程并启动线程publicclassThreadTestextendsThread{@Overrid......
  • JAVA报错:Caused by: java.lang.NoSuchFieldError: REFLECTION
     Causedby:java.lang.NoSuchFieldError:REFLECTIONatcom.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:93)atcom.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:473)atcom......
  • edge浏览器加载java插件的方法
    在MicrosoftEdge浏览器中直接加载Java插件并不是一个直接支持的功能,因为Edge是基于Chromium内核的浏览器,主要支持Web技术如HTML、CSS和JavaScript。Java插件(通常指的是Java小程序,使用Java编程语言编写的应用程序)主要用于在早期的InternetExplorer浏览器中运行,但在现代浏览器中已......
  • 从Java类加载器源码浅析到线上热部署实现
    1Java代码的执行过程写了这么多代码,有没有想过我们的代码是怎么执行的?或者说定义了那么多类,我们的class是怎么加载到内存的?Java语言属于一种高级语言,而cpu能执行的只有机器码,所以Java代码的运行离不开jvm虚拟机的编译,下面用一张图说明在HotSpot虚拟机中Java代码加载到cpu执行的......
  • Java小白入门到实战应用教程-Scanner类及IO流讲解
    Java小白入门到实战应用教程-Scanner类及IO流讲解Scanner类我们前面写的很多例子都是程序独自执行的,但是我们做编程写代码的目的是要实现能人和代码去交互的。现在我们就来了解一个知识点,去实现最简单的人和程序的交互。在java中通过Scanner类来获取用户在控制台的输入......
  • java读取JSON文件并解析
    importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.codehaus.jettison.json.JSONObject;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.List;importjava.util.Map;......