Java基础笔试练习(二十)

1.请给出程序最终输出内容。
int i = 3;
String result = new String();
switch (i) {
case 1:
result = result + "him ";
case 2:
result = result + "her ";
case 3:
result = result + "it ";
default:
result = result + "me ";
}
System.out.println(result);
A.it me
B.him her it me
C.him her
D.me
答案:
A
解析:
根据switch()括号里的值,进行匹配,走相应的case。case没有break就继续往下走
2.下列描述中,错误的是( )
A.java要求编程者管理内存
B.java的安全性体现在多个层次上
C.java中没有指针机制
D.java有多线程机制
答案:
A
解析:
java与C 很大的一点区别就是java是不需要使用者关注内存分配以及管理的
3.Which is not Java primitive types?
A.short
B.Boolean
C.byte
D.float
答案:
B
解析:
java规定类名首字母必须大写,这里可以直观的看出来Boolean是一个引用类型,不是基本数据类型。
java中的基本数据类型都对应一个引用类型,如Float是float的引用类型,Integer是int的引用类型
4.下列说法正确的是()
A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法
答案:
B
解析:
在类方法中不能有this关键字,直接调用类方法即可,A错误,B正确,在类方法中可以通过创建实例对象调用类的实例方法,C\D错误
5.java语言中,按照一定格式生成程序的文档的工具是?
A.javac
B.javah
C.javadoc
D.jar
答案:
C
解析:
jar 将许多文件组合成一个jar文件
javac 编译
javadoc 它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。
javah 把java代码声明的JNI方法转化成C\C++头文件。
6.以下程序的执行结果是:
static boolean foo(char c)
{
System.out.print(c);
return true;
}
public static void main(String[] args) {
int i =0;
for(foo('A');foo('B')&&(i<2);foo('C'))
{
i++;
foo('D');
}
}
A.ABDCBDCB
B.ABCDABCD
C.编译时出错
D.运行时抛出异常
答案:
A
解析:
这题考察的应该是for循环的执行顺序:
1只在开头执行一次便不再执行;然后是2->4->3->2->4->3这样循环下去;等到满足终止条件时到2就停止了。
7.对于Java中异常的描述正确的是( )
A.用throws定义了方法可能抛出的异常,那么调用此方法时一定会抛出此异常。
B.如果try块中没有抛出异常,finally块中的语句将不会被执行。
C.抛出异常意味着程序发生运行时错误,需要调试修改
D.Java中的可不检测(unchecked)异常可能来自RuntimeException类或其子类。
答案:
D
解析:
A错 在调用此方法的时候 也可以再次申明以将异常交由更高一级处理。
B错 finally块中的语句一定会被执行。除非catch块中有System.exit(0)。
C错 抛出异常不一定是运行时异常,也有可能是编译时异常。
D对 运行时异常的特点是Java编译器不会检查它。
8.给出下列代码,第三行将输出什么?
public class SwitchTest{//1
public static void main(String[] args) {//2
System.out.println("value="+switchit(4));//3
}//4
public static int switchit(int x) {
int j=1;
switch (x) {
case 1:j++;
case 2:j++;
case 3:j++;
case 4:j++;
case 5:j++;
default:j++;
}
return j+x;
}
}
A.value=6
B.value=8
C.value=3
D.value=5
E.value=4
答案:
B
解析:
没有break,从case 4开始一直执行到最后,j自加3次变成了4,结果返回8
9.以下代码执行的结果显示是多少()?
public class Demo{
public static void main(String[] args){
System.out.print(getNumber(0));
System.out.print(getNumber(1));
System.out.print(getNumber(2));
System.out.print(getNumber(4));
}
public static int getNumber(int num){
try{
int result = 2 / num;
return result;
}catch (Exception exception){
return 0;
}finally{
if(num == 0){
return -1;
}
if(num == 1){
return 1;
}
}
}
}
A.0110
B.-1110
C.0211
D.-1211
答案:
B
解析:
finally一定会在return之前执行,但是如果finally使用了return或者throw语句,将会使trycatch中的return或者throw失效
10.执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的( )
A.x[9]为0
B.x[9]未定义
C.x[10]为0
D.x[0]为空
答案:
A
解析:
数组定义后,默认元素为0
11.下列说法正确的有()
A.能被java.exe成功运行的java class文件必须有main()方法
B.J2SDK就是Java API
C.Appletviewer.exe可利用jar选项运行.jar文件
D.能被Appletviewer成功运行的java class文件必须有main()方法
答案:
A
解析:
B、C、D都错
A:正确main方法是入口
B:J2SDK当然不仅仅包含java API
C:jar选项是java.exe 的选项
D:Appletviewer是运行applet的, applet 不用main方法,继承applet类即可。
12.假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}
public void methodTwo()
{
System.out.print("B");
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}
public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}
A.ABDC
B.AB
C.ABCD
D.ABC
答案:
A
解析:
这是一道类多态的向上转型题。
Base b = new Derived();
向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。
因此:
调用的顺序是:(1)、(2)、(3)、(4)、(5)、(6)、(7) ; 得到的结果是:ABDC
13.下面字段声明中哪一个在interface主体内是合法的? ()
A.private final static int answer = 42;
B.public static int answer = 42;
C.final static answer = 42;
D.int answer;
答案:
B
解析:
在接口中,属性都是默认public static final修饰的,所以:
A(错误):不能用private修饰;
B(正确):在接口中,属性默认public static final,这三个关键字可以省略;
C(错误):没写属性的类型;
D(错误):final修饰的属性必须赋值;
14.ResultSet中记录行的第一列索引为?
A.-1
B.0
C.1
D.以上都不是
答案:
C
解析:
ResultSet跟普通的数组不同,索引从1开始而不是从0开始
15.Java 多线程有几种实现方法?( )
A.继承Thread类
B.实现Runnable接口
C.实现Thread接口
D.以上都不正确
答案:
AB
解析:
实现多线程的方法:
1.继承Thread类
2.实现Runnable接口
3.实现Callable接口
16.关于下面的一段代码,以下哪些说法是正确的:
public static void main(String[] args) {
String a = new String("myString");
String b = "myString";
String c = "my" + "String";
String d = c;
System.out.print(a == b);
System.out.print(a == c);
System.out.print(b == c);
System.out.print(b == d);
}
A.System.out.print(a == b)打印出来的是false
B.System.out.print(a == c)打印出来的是true
C.System.out.print(b == c)打印出来的是false
D.System.out.print(b == d)打印出来的是true
答案:
AD
解析:
A:a指向堆内存,b指向常量池,因此地址不相等,false
B:java有常量优化机制,c也指向常量池,且与b指向同一个,则a与c地址不相等,false;
C:b与c地址相等,true
D:d是c的副本,地址相同,所以b与d地址相等,true
17.Consider the following code:Which test would return true?
Integer s=new Integer(9);
Integer t=new Integer(9);
Long u=new Long(9);
A.(s==u)
B.(s==t)
C.(s.equals(t))
D.(s.equals(9))
E.(s.equals(new Integer(9))
答案:
CDE
解析:
(s==u) ,因为, s 是 Integer 类型, u 是 Long 类型,两个不同类型的引用不能进行 == 比较。
(s==t) , s 是指向一个 9 的引用,而 t 也是一个指向 9 的引用,虽然都是指向 9 ,但却是指向不同的 9 ,即是两个不同的引用。因此 == 比较返回的是假。
(s.equals(t)) , Integer 的 equals 方法如下:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false ;
}
是 Integer 的实例且 value 值也相等的情况下返回真,其他返回假。
在这里, s 和 t 都是 Integer 类型且值都为 9 ,因此结果为真。
(s.equals(9)) , 在进行 equals 比较之前,会对 9 调用 Integer.valueOf 方法,进行自动装箱 , 由于 IntegerCache 中已经存在 9 ,所以,直接返回其引用,引用相同, equals 就自然相同了。所以结果为真。
(s.equals( new Integer(9)) ,直接创建了一个新的 Integer 实例,但且值也为 9 ,所以,满足条件,返回真。
18.关于JSP生命周期的叙述,下列哪些为真?
A.JSP会先解释成Servlet源文件,然后编译成Servlet类文件
B.每当用户端运行JSP时,jsp init()方法都会运行一次
C.每当用户端运行JSP时,jsp service()方法都会运行一次
D.每当用户端运行JSP时,jsp destroy()方法都会运行一次
答案:
AC
解析:
B:init方法:负责初始化Servlet对象。在Servlet的整个生命周期类,init()方法只被调用一次。
D:destroy方法:销毁Servlet对象,释放占用的资源,Servlet要被卸载时调用
19.下面有关java threadlocal说法正确的有?
A.ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
B.从线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
C.在Thread类中有一个Map,用于存储每一个线程的变量的副本
D.对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
答案:
ABCD
解析:
ThreadLocal不是一个线程而是一个线程的本地化对象。当工作于多线程环境中的对象采用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的副本。每个线程都可以独立的改变自己的副本,而不影响其他线程的副本。
推荐
大厂笔试内容集合(内有详细解析) 持续更新中....
文末
欢迎关注Coder编程公众号,欢迎关注个人微信公众号:Coder编程
欢迎关注Coder编程公众号,主要分享数据结构与算法、Java相关知识体系、框架知识及原理、Spring全家桶、微服务项目实战、DevOps实践之路、每日一篇互联网大厂面试或笔试题以及PMP项目管理知识等。更多精彩内容正在路上~新建了一个qq群:315211365,欢迎大家进群交流一起学习。谢谢了!也可以介绍给身边有需要的朋友。
文章收录至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
欢迎关注并star~
微信公众号