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;}
A、public void foo(){} (返回值不同,参数列表相同,不是重写也不是重载)
B、public int foo(){return 1;} (返回值不同,参数列表相同,不是重写也不是重载)
C、public A foo(B b){return b;} (返回类型相同,参数列表不同,是重载)
D、public 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)
(st)
(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 在声明一个数组的时候,不能直接限定数组的长度,只有在创建实例化对象的时候,才能给定数组的长度。