牛客网Java刷题---第三期

每日五题(第三期)

更新时间:周一到周五每天下午17:30

1、下面的程序将来打印什么?()

public class TestIncr {
    public static void main(String args[]) {
        int i = 0;
        i = i++ + i;
        System.out.println("I =" +i);
    }
}

A、I = 1

B、I = 2

C、I = 3

D、编译出错

分析:

int i = 0;
System.out.println(i++ +i);

int i1 = 0;
System.out.println(i1++ +0);

int j = 1;
System.out.println(j++ +j);

int j1 = 1;
System.out.println(j1++ +0);

这里先给大家举个栗子,结果是:

1
1
0
3
1

为什么会这样呢?

首先这种编译是不会报错的,也就是可以排除D

可能很多人会认为i++ +i 是先算i+i,然后i+1。

但是实际情况不是这样的,那么实际情况是怎样的呢?

实际上i++时,这个i就已经产生了变化

也就是 i=_i+1(i++步骤),然后i+i而不是_i+i,这里的_i就是以前的i值。

这样就很好理解了,我们看到原题

int i = 0;
i = i++ + i;

先计算的是i++,也就是i = _i + 1

但是此时的前面那个i等于_i,也就是原来的值,但是后面那个i变成了_i+1=i

所以本题答案为A

2、下列选项中是正确的方法声明的是?()

A、protected abstract void f1();

B、public final void f1() {}

C、static final void fq(){}

D、private void f1() {}

分析:

A:抽象方法只可以被public和protected修饰

B:final可以修饰类、方法、变量,分别表示该类不可以被继承、该方法不能被重写、该变量是个常量

C:static final 可以一起来修饰方法,表示该方法是静态的不可重写的方法

D:private 修饰方法表示该方法只有本类才可以访问

本题答案:ABCD

3、下面程序输出结果为():

public class Demo{
public static void main (String [] args) {
  String lx = “LeXin”;
  String nb = lx;
  lx = “Fenqile”;
  System.out.println(nb);
}
}

A、程序异常,编译不通过

B、程序编写正常,可正常运行

C、程序输出值为“LeXin”

D、程序输出值为“Fenqile”

分析:

所以本题答案:BC

4、下面有关 JAVA 异常类的描述,说法正确的有()

A、异常的继承结构:基类为 Throwable,Error 和 Exception 。实现 Throwable, RuntimeException 和 IOException 等继承 Exception

B、非 RuntimeException 一般是外部错误(不考虑Error的情况下),其可以在当前类被 try{}catch 语句块所捕获

C、Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉

D、RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须 被 try{}catch 语句块所捕获

都是Throwable的子类:

1.Exception(异常) :是程序本身可以处理的异常。

2.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。

3.检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

4.非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。

5、关于equals和hashCode描述正确的是()

A、两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)

B、两个obj,如果hashCode()相等,equals()不一定相等

C、两个不同的obj, hashCode()可能相等

D、其他都不对

分析:

“==”:作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象,如果是基本数据类型,则比较的是值是否相等。

“equal”:作用是判断两个对象是否相等,但一般有两种使用情况
1.类没有覆盖equals()方法,则相当于通过“==”比较
2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,相等则返回true,如String

地址比较是通过计算对象的哈希值来比较的,hashcode属于Object的本地方法,对象相等(地址相等),hashcode相等,对象不相等,hashcode()可能相等,哈希冲突

本题答案:ABC