Bootstrap

牛客网专项训练——9

题目来源:https://www.nowcoder.com/


第一题:

1.java中 String str = "hello world"下列语句错误的是?

A.str+='    a'

B.int strlen = str.length

C.str=100

D.str=str+100

选ABC

A.首先要注意的是'a'是字符,它的前面还有个空格,是字符串所以应该是"  a"才对;

B.字符串是用length()方法,值得一提的是数组中有length属性。

C.int类型不能赋值给String,类型转换错误

第二题:

2.如下代码,执行test()函数后,屏幕打印结果为()

public class Test2
{
    public void add(Byte b)
    {
        b = b++;
    }
    public void test()
    {
        Byte a = 127;
        Byte b = 127;
        add(++a);
        System.out.print(a + " ");
        add(b);
        System.out.print(b + "");
    }
}

A.127 127

B.128 127

D.129 128

D.以上都不对

选D

解析:

基本类型的值是保存在栈内存里面的,每个方法都有自己的栈内存,所以add(++a)里面的操作对test()里面的a并没有什么影响,

++a会溢出,++a的结果本来是1000 0000 又因为最高为为符号位,1表示负数,java
用补码来表示负数,所以它的值应该要-1再取反,-1:0111 1111 再取反 1000 0000 所以表示的是-128;add(b)
操作对test()里面的b值没影响,所以b = 127。

第三题:

3.对抽象类的描述正确的是( )

A.抽象类的方法都是抽象方法

B.一个类可以继承多个抽象类

C.抽象类不能有构造方法

D.抽象类不能被实例化

选D

解析:

A.包含抽象方法的类为抽象类,抽象类中也可以有普通方法,不一定全是抽象方法

B.java中类只支持单继承

C.抽象类必须有构造方法

D.实例化一般指new一个对象,所以抽象类不能实例化

第四题:

4.java运行时内存分为“线程共享”和“线程私有”两部分,以下哪些属于“线程共享”部分

A.程序计算器

B.方法区

C.java虚拟机栈

D.java堆

选BD

解析:

私有

  • 程序计数器
  • 本地方法栈
  • JVM 栈

共享

  • 方法区

第五题:

5.以下代码段执行后的输出结果为

1

2

3

4

5

6

7

public class Test {

public static void main(String args[]) {

int x = -5;

int y = -12;

System.out.println(y % x);

}

}

A.-1

B.2

C.1

D.-2

选D

解析:

当x和y的正负相同时,取余和取模结果相同;

当x和y的正负不同时,取余结果的符号和x相同,取模结果的符号和y相同

口诀:取余取头,取模取尾

第六题:

6.下面有关servlet中init,service,destroy方法描述错误的是?

A.init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法

B.service()方法处理客户机发出的所有请求

C.destroy()方法标志servlet生命周期的结束

D.servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的

选D

解析:

init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相的资源和初始 化servlet的状态,Servlet规范保证调用init方法前不会处理任何请求 

 service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用, 根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法 

destory方法:是在servlet实例被销毁时由web容器调用。Servlet规范确保在destroy方法调用之 前所有请求的处理均完成,需要覆盖destroy方法的情况:释放任何在init方法中 打开的与servlet相关的资源存储servlet的状态

servlet在多线程下其本身并不是线程安全的。

如果在类中定义成员变量,而在service中根据不同的线程对该成员变量进行更改,那么在并发的时候就会引起错误。最好是在方法中,定义局部变量,而不是类变量或者对象的成员变量。由于方法中的局部变量是在栈中,彼此各自都拥有独立的运行空间而不会互相干扰,因此才做到线程安全。

第七题:

7.Java表达式"13 & 17"的结果是什么?()

A.30

B.13

C.17

D.1

选D

解析:

&运算符:两个数都转为二进制,然后从两个数的最高位进行与运算,两个都为真(1),结果才为真(1),否则为假(0)

13:01101
17:10001
结果:00001所以答案为1

第八题:

8.覆盖(重写)与重载的关系是()。

A.覆盖(重写)只有出现在父类与子类之间,而重载可以出现在同一个类中

B.覆盖(重写)方法可以有不同的方法名,而重载方法必须是相同的方法名

C.final修饰的方法可以被覆盖(重写),但不能被重载

D.覆盖(重写)与重载是同一回事

选A

解析:

 重载与重写都是多态的一种表现形式,重载是编译期间的活动,重写是运行期间的活动。

    其次,重载是在一个类中定义相同的名字的方法,方法的参数列表或者类型要互相不同,但是返回值类型不作为是否重载的标准,可以修改可见性

重写是不同的,要求子类重写基类的方法时要与父类方法具有相同的参数类型和返回值,可见性需要大于等于基类的方法

图片转载于牛客网

第九题:

9.下面程序的输出结果为(      )

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

public class Demo {

 public static String sRet = "";

 public static void func(int i)

 {

 try

 {

 if (i%2==0)

 {

 throw new Exception();

 }

 }

 catch (Exception e)

 {

 sRet += "0";

 return;

 }

 finally

 {

 sRet += "1";

 }

 sRet += "2";

 }

 public static void main(String[] args)

 {

 func(1);

 func(2);

 System.out.println(sRet);

 }

 }

A.120

B.1201

C.12012

D.101

选B

解析:

(1)func(1),if条件不成立,不抛异常,finally运行,sRet="1",无返回值,故继续执行,sRet="12"

(2)func(2),if条件成立,sRet="120",有返回值,调用finally,往后不执行,sRet="1201"

第十题:

10.对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。

A.正确

B.错误

选B

解析:

运行异常,可以通过java虚拟机来自行处理。非运行异常,应该捕获或者抛出

;