题目
选自牛客网
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被打脸。
- 加载类 B:当 JVM 加载类 B 时,首先会执行类的静态部分。
- 静态域:静态域包括静态变量、静态方法和静态块。当类首次被加载时,这些静态域将按照它们在源代码中出现的顺序执行,并且只执行一次。
- 实例初始化:每次创建新实例时,会执行构造块(实例初始化块)和构造方法。构造块总是先于构造方法执行。
我们可以确定以下执行顺序:
- 创建
t1
实例:首先初始化t1
时,实例初始化块{}
被执行,输出 “构造块”。 - 创建
t2
实例:接着初始化t2
时,实例初始化块{}
再次被执行,输出 “构造块”。 - 静态初始化块:在所有静态变量初始化之后,静态初始化块
static {}
被执行,输出 “静态块”。 - 执行
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 中的类不能同时被声明为
abstract
和final
。abstract
表示类是抽象的,不能被实例化,并且可能包含抽象方法;而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
变量的递增或递减操作不是原子性的,多个线程同时执行这样的操作可能导致不正确的结果。综上所述,正确的选项是 A 和 D。
4.下面属于JSP内置对象的是?
A.out对象
B.response对象
C.application对象
D.page对象
标签:初始化,Java,get,静态,练习,选择题,构造,对象,size From: https://blog.csdn.net/m0_67187271/article/details/141060067正确答案:ABCD JSP(JavaServer
Pages)提供了多个内置对象,这些对象可以帮助开发者更容易地编写动态网页。下面是对这些选项的解释:A. out 对象
正确。
out
对象是一个JspWriter
类型的对象,用于向客户端输出数据。你可以使用它来生成 HTML 标签、文本或其他类型的内容。B. response 对象
正确。
response
对象是一个HttpServletResponse
类型的对象,它允许开发者控制 HTTP 响应。你可以使用它来设置响应头、状态码或者重定向页面等。C. application 对象
正确。
application
对象是一个ServletContext
类型的对象,它代表了当前 Web 应用的上下文。你可以使用它来存储全局变量或获取应用范围内的配置信息。D. page 对象
正确。
page
对象是一个JspPage
类型的对象,它代表了当前 JSP 页面本身。你可以使用它来访问页面的属性或执行页面上的操作。