1、下面程序的运行结果是 B
String str1 = "hello"; String str2 = "he" + new String("llo"); System.err.println(str1 == str2);
A、true
B、false
C、exception
D、无输出
解析:
String str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的;
String str2 = "he" + new String("llo");这里的str2必须在运行时才知道str2是什么,所以它是指向的是堆里定义的字符串“hello”,所以这两个引用是不一样的。
2、以下程序运行的结果为 ( A )
@Override
public void run(){
try {
Thread.sleep(1000);
} catch (InterruptedException e){
e.printStackTrace();
}
System. out .print( "run" );
}
public static void main(String[] args){
Example example= new Example();
example.run();
System. out .print( "main" );
A、run main
B、main run
C、main
D、run
E、不能确定
解析:
因为Example的run方法里面休眠了100ms,在当今电脑计算性能过剩的时代,如果是多线程启动,main方法肯定会打印出了main。
为啥是runmain而不是mainrun呢?
- 因为启动线程是调用start方法。
- 把线程的run方法当普通方法,就直接用实例.run()执行就好了。
没有看到start。所以是普通方法调用。
3、用户不能调用构造方法,只能通过new关键字自动调用。(B)
A、正确
B、错误
解析:
- 在类内部可以用户可以使用关键字this.构造方法名()调用(参数决定调用的是本类对应的构造方法)
- 在子类中用户可以通过关键字super.父类构造方法名()调用(参数决定调用的是父类对应的构造方法。)
- 反射机制对于任意一个类,都能够知道这个类的所有属性和方法,包括类的构造方法。
4、子类要调用继承自父类的方法,必须使用super关键字。 B
A、正确
B、错误
解析:
5、下面关于程序编译说法正确的是(C)
A、java语言是编译型语言,会把java程序编译成二进制机器指令直接运行
B、java编译出来的目标文件与具体操作系统有关
C、java在运行时才进行翻译指令
D、java编译出来的目标文件,可以运行在任意jvm上
解析:
A:.java编译成的是字节码,再被各系统的jvm翻译成本系统可以识别的机器码,这就是java一次编程多平台应用的跨平台性
B:java源文件生成的是class文件,与系统无关
C:注意字节码和机器码不是一回事 java程序在运行时字节码才会被jvm翻译成机 器码,所以说java是解释性语言
D:注意jvm的版本,好比人穿裤子,一条裤子能被任何人穿上吗
6、Java网络程序设计中,下列正确的描述是(AD)
A、Java网络编程API建立在Socket基础之上
B、Java网络接口只支持tcP以及其上层协议
C、Java网络接口只支持UDP以及其上层协议
D、Java网络接口支持IP以上的所有高层协议
7、下面哪些可能是重载的基本条件(ABD)(注意:是可能为重载的基本条件)
A、参数的类型不同
B、参数的顺序不同
C、函数的返回值类型不同
D、参数的个数不同
解析:
重载的概念是:
方法名称相同,参数个数、次序、类型不同
因此重载对返回值没有要求,可以相同,也可以不同
但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载
8、在java中重写方法应遵循规则的包括(BC)
A、访问修饰符的限制一定要大于被重写方法的访问修饰符
B、可以有不同的访问修饰符
C、参数列表必须完全与被重写的方法相同
D、必须具有不同的参数列表
解析:
A、抽象类可以有构造方法,接口中不能有构造方法
B、抽象类中可以有普通成员变量,接口中没有普通成员变量
C、抽象类中不可以包含静态方法,接口中可以包含静态方法
D、一个类可以实现多个接口,但只能继承一个抽象类。
解析:
在JDK1.8之前的版本(不包括JDK1.8),接口中不能有静态方法,抽象类中因为有普通方法,故也可以有静态方法。
在JDK1.8后(包括JDK1.8),在抽象类中依旧可以有静态方法,同时在接口中也可以定义静态方法了。
10、以下JAVA程序的运行结果是什么( D )
public
static
void
main(String[] args) {
Object o1 =
true
?
new
Integer(
1
) :
new
Double(
2.0
);
Object o2;
if
(
true
) {
o2 =
new
Integer(
1
);
}
else
{
o2 =
new
Double(
2.0
);
}
System.out.print(o1);
System.out.print(
" "
);
System.out.print(o2);
}
A、1 1
B、1.0 1.0
C、1 1.0
D、1.0 1
解析:
三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
A、程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器.
B、Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息
C、Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。
D、方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。
解析:
C.java堆:对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组
12、下列说法错误的有( ACD)
A、在类方法中可用this来调用本类的类方法
B、在类方法中调用本类的类方法时可直接调用
C、在类方法中只能调用本类中的类方法
D、在类方法中绝对不能调用实例方法
解析:
13、HashSet子类依靠()方法区分重复元素。 C
A、toString(),equals()
B、clone(),equals()
C、hashCode(),equals()
D、getClass(),clone()
解析:
HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。
而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。
14、以下程序的运行结果是? A
A、foobar
B、barfoo
C、foobar或者barfoo都有可能
D、Bar
E、Foo
F、程序无法正常运行
解析:
答案是 A foobar 这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.
15、在try的括号里面有return一个值,那在哪里执行finally里的代码? B
A、不执行finally代码
B、return前执行
C、return后执行
解析:
https://www.ibm.com/developerworks/cn/java/j-lo-finally/
16、关于访问权限说法正确 的是 ? (B )
A、外部类前面可以修饰public,protected和private
B、成员内部类前面可以修饰public,protected和private
C、局部内部类前面可以修饰public,protected和private
D、以上说法都不正确
解析:
( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。
( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。
( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。
17、在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的(A)?
A、管道
B、消息队列
C、高速缓存数据库
D、套接字
解析:
②流管道(s_pipe):去除了上述的第一种限制,实现了双向传输。
18、关于java中的数组,下面的一些描述,哪些描述是准确的:(ACF)
A、数组是一个对象,不同类型的数组具有不同的类
B、数组长度是可以动态调整的
C、数组是一个连续的存储结构
D、一个固定长度的数组可类似这样定义:int array[100]
E、两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
F、可以二维数组,且可以有多维数组,都是在java中合法的。
解析:
这个E选项是错的。
public static void main(String[] args) { int[] a = {1,2,3,4,5};
int[] b = {1,2,3,4,5};
System.out.println(a.equals(b));
}
进方法内部:
明显是Object里面的equals();
19、下列说法正确的有( C)
A、class中的constructor不可省略
B、constructor必须与class同名,但方法不能与class同名
C、constructor可在一个对象被new时执行
D、一个class只能定义一个constructor
解析:
constructor表示构造方法。
20、以下哪个类包含方法flush()?(B)
A、InputStream
B、OutputStream
C、A 和B 选项都包含
D、A 和B 选项都不包含
解析:
flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
21、下面有关servlet service描述错误的是? B
A、不管是post还是get方法提交过来的连接,都会在service中处理
B、doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
C、service()是在javax.servlet.Servlet接口中定义的
D、service判断请求类型,决定是调用doGet还是doPost方法
解析:
doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的。
22、以下程序的输出结果为 D
class
Base{
public
Base(String s){
System.out.print(
"B"
);
}
}
public
class
Derived
extends
Base{
public
Derived (String s) {
System.out.print(
"D"
);
}
public
static
void
main(String[] args){
new
Derived(
"C"
);
}
}
A、BD
B、DB
C、C
D、编译错误
解析:
子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
public
Derived(String s){
super
(
"s"
);
System.out.print(
"D"
);
}