日常Java练习题(每天进步一点点系列)

简介: 日常Java练习题(每天进步一点点系列)

承蒙各位厚爱,希望各位每天都能进步一点点!


1、HashSet子类依靠()方法区分重复元素。

正确答案: C 你的答案: C(正确)

toString(),equals()

clone(),equals()

hashCode(),equals()

getClass(),clone()


题解:

HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。


2、下列哪个类的声明是正确的?

正确答案: D 你的答案: D(正确)

abstract final class HI{}

abstract private move(){}

protected private number;

public abstract class Car{}


题解:

A选项,final是最终类,不能被继承;abstrct类是抽象类,只能被继承,两者冲突。

B选项,private修饰符定义的属性及方法不能被子类实现,而抽象类的子类必须实现所有的抽象方法。两者冲突。

C选项,修饰符重复,而且没有定义数据类型。

D选项,正确。


3、下列关于包(package)的描述,正确的是()

正确答案: D 你的答案: D (正确)

包(package)是Java中描述操作系统对多个源代码文件组织的一种方式。

import语句将所对应的Java源文件拷贝到此处执行。

包(package)是Eclipse组织Java项目特有的一种方式。

定义在同一个包(package)内的类可以不经过import而直接相互使用。


题解:

A、为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。Java中的包一般均包含相关的类,java是跨平台的,所以java中的包和操作系统没有任何关系,java的包是用来组织文件的一种虚拟文件系统。A错

B、import语句并没有将对应的java源文件拷贝到此处仅仅是引入,告诉编译器有使用外部文件,编译的时候要去读取这个外部文件。B错

C、Java提供的包机制与IDE没有关系。C错

D、定义在同一个包(package)内的类可以不经过import而直接相互使用。


4、以下代码执行后输出结果为( )


public class Test
{
    public static Test t1 = new Test();
    {
         System.out.println("blockA");
    }
    static
    {
        System.out.println("blockB");
    }
    public static void main(String[] args)
    {
        Test t2 = new Test();
    }
 }

正确答案: A 你的答案: A(正确)

blockAblockBblockA

blockAblockAblockB

blockBblockBblockA

blockBblockAblockB


题解:

静态块:用static申明,JVM加载类时执行,仅执行一次

构造块:类中直接用{}定义,每一次创建对象时执行

执行顺序优先级:静态块>main()>构造块>构造方法

静态块按照申明顺序执行,先执行Test t1 = new Test();

所以先输出blockA,然后执行静态块,输出blockB,最后执行main

方法中的Test t2 = new Test();输出blockA。


5、Given the following code:


public class Test {
    private static int j = 0;
    private static Boolean methodB(int k) {
        j += k;
        return true;
    }
    public static void methodA(int i) {
        boolean b;
        b = i < 10 | methodB(4);
        b = i < 10 || methodB(8);
    }
    public static void main(String args[]) {
        methodA(0);
        System.out.println(j);
    }
}

正确答案: B 你的答案: B (正确)

The program prints”0”

The program prints”4”

The program prints”8”

The program prints”12”

The code does not complete.


题解:

选 B

在main函数中先调用methodA(0)

在methodA中,第二行

b = i < 10 | methodB(4); //中间为与计算符,执行完methodB(4)后,j = 4

methodA中,第三行

b = i < 10 || methodB(8);//中间为或计算符,因为i < 10 已成立,不需要后续计算

所以最后结果输出为4


6、下列叙述中,错误的是( )

正确答案: B 你的答案: B (正确)

File类能够存储文件属性

File类能够读写文件

File类能够建立文件

File类能够获取文件目录信息


题解:

File类能操作文件本身,但不能对文件内容进行修改

能够读写文件的是数据流(OutputStream和InputStream)


7、在Java中,对于不再使用的内存资源,如调用完成的方法,“垃圾回收器”会自动将其释放。( )

正确答案: B 你的答案: B (正确)

正确

错误


题解:

方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放。

JVM 内存可简单分为三个区:

1、堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)

2、栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)

3、方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)

Java 的垃圾回收器(GC)主要针对堆区


8、在Java中,关于HashMap类的描述,以下正确的是 ()

正确答案: A C D 你的答案: A C D(正确)

HashMap使用键/值得形式保存数据

HashMap 能够保证其中元素的顺序

HashMap允许将null用作键

HashMap允许将null用作值


题解:

HashMap 不按插入顺序排序,按照哈希值排序。所以无序。

但是不增删改键的情况下,输出是按照一定顺序不变的。

hashMap 允许空键值,hashTable 则不允许。


9、以下各类中哪几个是线程安全的?( )

正确答案: B C D 你的答案: B C D (正确)

ArrayList

Vector

Hashtable

Stack


题解:

线程同步:喂,SHE

喂(Vector)

S(Stack)

H(hashtable)

E(enumeration)


10、关于Java中的ClassLoader下面的哪些描述是错误的:( )

正确答案: B D F 你的答案: B D F (正确)

A:默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System

B:一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的

C:类装载器需要保证类装载过程的线程安全

D:ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null

E:ClassLoader的父子结构中,默认装载采用了父优先

F:所有ClassLoader装载的类都来自CLASSPATH环境指定的路径


题解:

A.Java系统提供3种类加载器:启动类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 应用程序类加载器(Application ClassLoader). A正确

B.《深入理解Java虚拟机》P228:对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通俗一些:比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类必定不相等。接口类是一种特殊类,因此对于同一接口不同的类装载器装载所获得的类是不相同的。B错误

C.类只需加载一次就行,因此要保证类加载过程线程安全,防止类加载多次。C正确

D. Java程序的类加载器采用双亲委派模型,实现双亲委派的代码集中在java.lang.ClassLoader的loadClass()方法中,此方法实现的大致逻辑是:先检查是否已经被加载,若没有加载则调用父类加载器的loadClass()方法,若父类加载器为空则默认使用启动类加载器作为父类加载器。如果父类加载失败,抛出ClassNotFoundException异常。D错误

E.双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去加载。E正确

F.应用程序类加载器(Application ClassLoader)负责加载用户类路径(ClassPath)上所指定的类库,不是所有的ClassLoader都加载此路径。F错误


答案汇总:

1、正确答案: C

2、正确答案: D

3、正确答案: D

4、正确答案: A

5、正确答案: B

6、正确答案: B

7、正确答案: B

8、正确答案: A C D

9、正确答案: B C D

10、正确答案: B D F


以上部分题解来自牛客评论区,感谢评论区大佬的解释。


相关文章
|
5月前
|
存储 Java
创建一个乘法练习题生成器 using Java
创建一个乘法练习题生成器 using Java
|
6月前
|
人工智能 Java
Java练习题-输出二维数组对角线元素和
Java练习题-输出二维数组对角线元素和
|
6月前
|
存储 Java 索引
Java练习题-获取数组元素最大值
Java练习题-获取数组元素最大值
Java练习题-获取数组元素最大值
|
6月前
|
Java
<Java SE> 数组详解大全(附带练习题).一维数组、二维数组、数组拷贝、数组遍历...
<Java SE> 数组详解大全(附带练习题).一维数组、二维数组、数组拷贝、数组遍历
44 0
|
6月前
|
Java 索引
Java练习题-用冒泡排序法实现数组排序
Java练习题-用冒泡排序法实现数组排序
|
6月前
|
Java
Java练习题-键盘录入字符串实现大小写转换
Java练习题-键盘录入字符串实现大小写转换
|
6月前
|
Java
Java练习题-输出斐波那契(Fibonacci)数列
Java练习题-输出斐波那契(Fibonacci)数列
|
6月前
|
存储 Java
Java程序设计练习题8异常处理
Java程序设计练习题8异常处理
161 0
|
6月前
|
算法 Java 程序员
Java数组全套深入探究——进阶知识阶段4、一维数组练习题
Java数组全套深入探究——进阶知识阶段4、一维数组练习题
57 0
Java数组全套深入探究——进阶知识阶段4、一维数组练习题
|
6月前
|
Java
java字符串练习题8、同构字符串
java字符串练习题8、同构字符串
52 0
java字符串练习题8、同构字符串