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

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

1、public interface IService {String NAME=“default”;}

默认类型等价表示是哪一项:

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

public String NAME=“default”;

public static String NAME=“default”;

public static final String NAME=“default”;

private String NAME=“default”;


题解:

接口中的变量默认是public static final 的,方法默认是public abstract 的


2、关于以下程序代码的说明正确的


class HasStatic{
    private static int x = 100;
    public static void main(String args[ ]){
        HasStatic hs1 = new HasStatic();
        hs1.x++;
        HasStatic hs2 = new HasStatic();
        hs2.x++;
        hs1=new HasStatic();
        hs1.x++;
        HasStatic.x--;
        System.out.println( "x=" +x);
    }
}

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

5行不能通过编译,因为引用了私有静态变量

10行不能通过编译,因为x是私有静态变量

程序通过编译,输出结果为:x=103

程序通过编译,输出结果为:x=102


题解:

答案选D

因为x的 修饰符为 static 所以x为类变量,即对于所有的实例来说,他们访问的x为同一个x,类变量存储在方法区,不属于每个实例的私有,

刚开始x=100

调用hs1.x++ x为101;

调用hs2.x++ x为102;

调用hs1.x++ x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)

调用HasStatic.x-- x为102

所以结果为D


3、以下 _____ 不是 Object 类的方法

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

clone()

finalize()

toString()

hasNext()


题解:

object类的方法:

1.clone方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2.getClass方法

final方法,获得运行时类型。

3.toString方法

该方法用得比较多,一般子类都有覆盖。

4.finalize方法

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5.equals方法

该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

6.hashCode方法方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

7.wait方法

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8.notify方法

该方法唤醒在该对象上等待的某个线程。

9.notifyAll方法

该方法唤醒在该对象上等待的所有线程。


4、try块后必须有catch块。()

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

正确

错误


题解:

try块后面不一定需要跟着catch块,可以只跟着finally块

try 和 catch 不需要一定共存,try是尝试对其中代码捕获异常,catch是捕获异常并且可以处理异常。。你可以 try 来搜寻异常,不去捕获。也就是不去catch 这是可以的。。至于提示加finally,finally的意思是,其中的代码一定会执行,也就是说,如果try 其中的代码产生了异常,如果有catch 则会直接跳转到catch部分,如果没有catch 会跳转到‘}’后面的代码,这样,以上方法就没有一个确定的返回值,所以要加finally 作为方法出异常以后的返回的结果。


5、已知有下列Test类的说明,在该类的main方法内,则下列哪个语句是正确的?()

public class Test

{

private float f = 1.0f;

int m = 12;

static int n = 1;

public static void main (String args[])

{

Test t = new Test();

}

}

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

t.f;

this.n;

Test.m

Test.f


**题解:

A.虽然变量修饰符为private,但main函数在此类中所以仍然可以直接用对象名来调用

B.static类变量,不能用对象名调用,只能用类名调用

C.非类变量不能用类名调用,只能先实例化再调用

D.同C **


6、String s = new String(“xyz”);创建了几个StringObject?

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

两个或一个都有可能

两个

一个

三个


题解:

这种题以前的日常练习题中出现过

如果常量池中存在“xyz”就只会创建一个对象,如果没有就会创建两个


7、下面有关JVM内存,说法错误的是?

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

程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的

原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的


题解:

方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。 在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

2.png


8、问这个程序的输出结果。


package Wangyi;
class Base
{
    public void method()
    {
        System.out.println("Base");
    } 
}
class Son extends Base
{
    public void method()
    {
        System.out.println("Son");
    }
    public void methodB()
    {
        System.out.println("SonB");
    }
}
public class Test01
{
    public static void main(String[] args)
    {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}

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

Base SonB

Son SonB

Base Son SonB

编译不通过


题解:

Base base=new Son(); 是多态的表示形式。父类对象调用了子类创建了Son对象。

base调用的method()方法就是调用了子类重写的method()方法。

而此时base还是属于Base对象,base调用methodB()时Base对象里没有这个方法,所以编译不通过。

要想调用的话需要先通过SON son=(SON)base;强制转换,然后用son.methodB()调用就可以了。


9、java关于异常处理机制的叙述哪些正确

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

catch部分捕捉到异常情况时,才会执行finally部分

当try区段的程序发生异常时,才会执行catch区段的程序

在try区段不论程序是否发生异常及捕获到异常,都会执行finally部分

以上都是


题解:

1.try和catch语句

●将要处理的代码放入try块中,然后创建相应的catch块的列表。如果生成都异常与catch中提到的相匹配,那么catch条件中的块语句就被执行。try块后可能有许多catch块,每个都处理不同的异常。每个catch中的参数都是Exception的子类。

2.finally语句

●finally语句定义一个总是执行的代码,而不考虑异常是否被捕获。

3.throw引起一个异常

‍●‍‍调用申明抛出异常

●‍throw语句强制抛出异常


10、下面哪些赋值语句是正确的()

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

long test=012

float f=-412

int other =(int)true

double d=0x12345678

byte b=128


题解:

选ABD

A和B中long和float,正常定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常。AB正确

boolean类型不能和任何类型进行转换,会报出类型异常错误。所以C错。

D选项可以这样定义,D正确。

E选项中,byte的取值范围是-128—127。报出异常: cannot convert from int to byte.所以E选项错误。


答案汇总:

1、正确答案: C

2、正确答案: D

3、正确答案: D

4、正确答案: B

5、正确答案: A

6、正确答案: A

7、正确答案: C

8、正确答案: D

9、正确答案: B C

10、正确答案: A B D


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

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