牛客选择错题本二

Top******

分析下列代码的执行循序和执行结果

package com.company;

import java.util.Arrays;

public class Main {
    private static int k = 1;
    private static Main main1 = new Main("main1");
    private static Main main2 = new Main("main2");
    private static int i = print("i");

    private static int print(String str) {
        System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
        ++n;
        return ++i;
    }
    {
        print("构造块");
        j = 100;
    }
    static {
        print("静态块");
        n = 100;
    }
    private int j = print("j");
    private static int n = 99;
    public Main(String str) {
        System.out.println((k++) + ":" + str + "   i=" + i + "   n = " + n);
        ++i;
        ++n;
        int a = 123;
        int c = 123123;
    }
    public static void main(String[] args) {
        Main main = new Main("test");

    }

}


首先,找到 Main 函数,在执行 Main 函数之前需要对类进行初始化,于是,代码从 最上面开始进行初始化,初始化静态的语句和初始化块
1、首先开始执行 k = 1
2、进入下面的 Main main1,此时从上到下执行非静态的代码,于是程序来到在这里插入图片描述
3、执行完构造块而之后,到达 j = print('j") 这里,至此,非静态的语句已经执行完毕,此时执行构造器
4、执行 Main 的构造器,在这里插入图片描述
5、main1 对象加载完毕,接下来加载 main2 对象,同理,上面的重复一遍
6、执行 i = print(“i”)
7、接下来执行静态块儿
8、静态块儿执行完毕以后,类初始化结束,开始执行 Main 方法,创建对象 test,至此,执行完毕

1、

下面有关forward和redirect的描述,正确的是() ?
正确答案: B C D 你的答案: A B C D (错误)
forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
执行redirect时,服务器端告诉浏览器重新去请求地址
forward是内部重定向,redirect是外部重定向
redirect默认将产生301 Permanently moved的HTTP响应

A、 服务器会直接访问目标地址的URL,不会把控制权转交,因此错误!

2、

下面关于变量及其范围的陈述哪些是不正确的()
正确答案: B C 你的答案: A B (错误)
实例变量是类的成员变量
实例变量用关键字static声明
在方法中定义的局部变量在该方法被执行时创建
局部变量在使用前必须被初始化

B、类变量(静态变量)用 static 修饰
C、方法中的局部变量在方法被调用入栈的时候就创建了。

3、

java语言的下面几种数组复制方法中,哪个效率最高?
正确答案: B 你的答案: D (错误)

for 循环逐一复制
System.arraycopy
Array.copyOf
使用clone方法

从速度上看:System.arraycopy > clone > Arrays.copyOf > for

4、

一个容器类数据结构,读写平均,使用锁机制保证线程安全。如果要综合提高该数据结构的访问性能,最好的办法是______。
正确答案: C 你的答案: A (错误)
只对写操作加锁,不对读操作加锁
读操作不加锁,采用copyOnWrite的方式实现写操作
分区段加锁
无法做到

如果只对写加锁,读不加锁, 很可能读到脏数据。
脏数据指的是: 从目标中取出的数据已经过期、错误或者没有意义,这种数据就叫做脏数据

5、

在这里插入图片描述
正确答案: C 你的答案: D (错误)
010 2123012 3434
01201 340124 2334
0012314 01223344**
12345 12345 12345

每个线程输出0,1,2,3,4,’空格, 输出空格前必有线程输出了0-4,所以选C、

6、

Hashtable 和 HashMap 的区别是:

正确答案: B C D E 你的答案: B C D E (正确)
Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口
HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
Hashtable 线程安全的,而 HashMap 是线程不安全的
Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

答案:BCDE

7、

volatile关键字的说法错误的是
正确答案: A 你的答案: B (错误)
能保证线程安全
volatile关键字用在多线程同步中,可保证读取的可见性
JVM保证从主内存加载到线程工作内存的值是最新的
volatile能禁止进行指令重排序

violate 不能保证原子性,也就不能保证线程安全,但是能够保证可读性

8、

在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的()?
正确答案: A 你的答案: D (错误)
管道
消息队列
高速缓存数据库
套接字

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
既然是不同的服务器之间进行通信,怎么可能会是具有亲缘关系的进程呢?

9、

在上下文和头文件正常的情况下,代码
System.out.println(10%3*2);
将打印?
正确答案: B 你的答案: C (错误)
1
2
4
6

%和*是同一个优先级,从左到右运算

10、

在委托事件模型中,源生成事件并把它发送给一个或多个监听器,每个监听器必须向事件源注册。
正确答案: A 你的答案: B (错误)
T
F

不注册就没法发送了,所以必须得注册

11、

下面有关 java 类加载器,说法正确的是?()

正确答案: A B C D 你的答案: B C D (错误)
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
tomcat 为每个 App 创建一个 Loader,里面保存着此 WebApp 的 ClassLoader。需要加载 WebApp 下的类时,就取出 ClassLoader 来使用

引导类加载器,是加载 java 的核心库,使用原声代码实现的

12、

在java的一个异常处理中,可以包含多个的语句块是
正确答案: D 你的答案: A (错误)
try
finally
throws
catch

异常处理一般格式:
捕获异常:
try{
    //代码块
}catch(异常类型,例如:Exception e){
    //需要抛出的异常,例如:e.printStackTrace();
}catch(异常类型){
    //需要抛出的异常
}finally{
    //必定执行的代码块
}
所以说在一个异常处理中catch语句块是可以多个的,也就是可以抛出多个异常!

13、

下面代码的运行结果是( )

public class Arraytest{
    int a[] = new int[6];
    public static void main ( String arg[] ) {
        System.out.println ( a[0] );
    }
}

由于 main 方法是 static 修饰的,所以如果想要访问 a 数组,必须用 static 修饰才行。

14、

下面的类哪些可以处理Unicode字符?

正确答案: A B C 你的答案: A B (错误)
InputStreamReader
BufferedReader
Writer
PipedInputStream

本题考点是字节流和字符流的类,stream 后缀的都是字节流,而本题 Unicode 是字符,所以只要是能处理字符流的都是本题的答案,所以是 ABC

15、

下面关于Applet的说法是正确的是
正确答案: A B C D 你的答案: C D (错误)
Applet可以在带有Java解释器的浏览器中运行
Applet类必须继承java.applet.Applet
Applet可以访问本地文件
Applet是Object类的子类

过时的知识,背过吧。

16、

class A{
    public A foo() {
        return this;
    }
}
class B extends A {
    public A foo(){
        return this;
    }
}
class C extends B {
    _______

}

正确答案: C 你的答案: D (错误)
public void foo(){}
public int foo(){return 1;}
public A foo(B b){return b;}
public A foo(){return A;}

Apublic void foo(){} (返回值不同,参数列表相同,不是重写也不是重载)
Bpublic int foo(){return 1;} (返回值不同,参数列表相同,不是重写也不是重载)
Cpublic A foo(B b){return b;} (返回类型相同,参数列表不同,是重载)
Dpublic A foo(){return A;}  (乍一看好像就是重写,其实是return 后面错了,怎么能 return 类名呢?)

17、

Consider the following code:
Integer s=new Integer(9);
Integer t=new Integer(9);
Long u=new Long(9);

Which test would return true?

正确答案: C D E 你的答案: B C D E (错误)
(su)
(s
t)
(s.equals(t))
(s.equals(9))
(s.equals(new Integer(9))

本题 B 不选的原因是因为,都是 new 的对象,而不是通过 Integer i = 128 这样创建的对象,所以,B 选项输出的是 false,不是 true。

18、

下面字段声明中哪一个在interface主体内是合法的? ()
private final static int answer = 42;
public static int answer = 42;
final static answer = 42;
int answer;

interface 修饰的变量默认是 public static final 修饰的,默认都可以省略,所以选择 B 选项,虽然没写 final 但是默认是 final 的。

A、不能用 private 修饰
B、属性默认 public static final 
C、没写属性的类型
D、final 修饰的要给一个初始值

19、

下面叙述那个是正确的?()
正确答案: B 你的答案: A (错误)

java中的集合类(如Vector)可以用来存储任何类型的对象,且大小可以自动调整。但需要事先知道所存储对象的类型,才能正常使用。
在java中,我们可以用违例(Exception)来抛出一些并非错误的消息,但这样比直接从函数返回一个结果要更大的系统开销。
java接口包含函数声明和变量声明。
java中,子类不可以访问父类的私有成员和受保护的成员。

C、接口没有变量定义,只有常量定义
D、子类可以访问父类的私有成员和受保护的对象

20、

下列说法正确的是
正确答案: B 你的答案: D (错误)
在类方法中可用this来调用本类的类方法
在类方法中调用本类的类方法可直接调用
在类方法中只能调用本类的类方法
在类方法中绝对不能调用实例方法

A、this 只能在实际方法和构造方法中调用
B、正确
C、不正确
D、可以先创建对象,然后对象再进行调用方法

21、

下面描述属于java虚拟机功能的是?
正确答案: A B C D 你的答案: A B C (错误)
通过 ClassLoader 寻找和装载 class 文件
解释字节码成为指令并执行,提供 class 文件的运行环境
进行运行期间垃圾回收
提供与硬件交互的平台

22、

Which statement declares a variable a which is suitable for referring to an array of 50 string objects?
下面哪个语句可以用来声明了一个创建N个字符串对象数组的变量?
正确答案: B C F 你的答案: B C E (错误)
char a[][];
String a[];
String[] a;
Object a[50];
String a[50];
Object a[];

本题不选 E 的原因是:Java 在声明一个数组的时候,不能直接限定数组的长度,只有在创建实例化对象的时候,才能给定数组的长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_努力努力再努力_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值