🍓1.下面代码输出的正确的是()
public class Example { String str=new String("good"); char[] ch={'a','b','c'}; public static void main(String[] args) { Example ex = new Example(); ex.change(ex.str,ex.ch); System.out.println(ex.str+" and "); System.out.println(ex.ch); } public void change(String str,char ch[]){ str="test ok"; ch[0]='g'; } }
A.good and abc
B.good and gbc
C.tst ok and abc
D.tst ok and gbc
正确答案为:B答案请长拉左测
Strng是一个类对象,当我们把他传入到change方法时,传入的是它的地址,这时我们change方法的第一条语句是让形参指向了另外一个对象,所以对原对象是没有变动的。数组ch传入的同样是地址,我们在该地址上进行改动,会改变原数组对象上的数据。
🍓2.下面代码输出的是()
public static void main(String[] args) { int num = 2; switch (num) { case 1: ++num; case 2: ++num; case 3: ++num; default: ++num; break; } System.out.println(num); } }
A.2
B.3
C.4
D.5
正确答案为:D
本题考察的是switch的穿透现象,当switch匹配到2后完成++num,由于没有break导致形成穿透,switch继续执行case 3和default语句,最后走了3次++num。
🍓3.下面关于servlet service描述错误的是?
A.不管是post还是get方法提交过来的连接,都会在service中处理
B.doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
C.service()是在javax.servlet.Servlet接口中定义的
D.service判断请求类型,决定是调用doGet还是doPost方法
正确答案:B
A.service方法是在servlet生命周期中的服务期,它根据HTTP请求方法(GET、POST等),将请求分发到doget和dopost等方法实现
B.doGet/doPost是在 javax.servlet.http.HttpServlet中实现的
C.service()是在javax.servlet.Servlet接口中定义的, 在 javax.servlet.GenericServlet 中实现了这个接口。
D.同理与A解释
🍓4.下面有关java object默认的基本方法,说法错误的是?
A.equals(Object obj) 指示某个其他对象是否与此对象“相等”
B.copy() 创建并返回此对象的一个副本
C.wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
D.toString() 返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成
正确答案:B
Object当中没有copy()方法,有的是clone()方法
🍓5.运行代码,结果正确的是:
Boolean flag = false; if(flag = true){ System.out.println("true"); }else{ System.out.println("false"); }
A.第二行代码编译错误
B.true
C.false
D.什么都不输出
正确答案:B
if判断中需要的是一个boolean类型的值,我们在空号中如果进行运算,需要返回一个boolean类型的变量。但其实赋值也是一种运算,返回的是赋值以后的值,这里返回的是flag被赋值以后的值true。
🍓6.下列有关Servlet的生命周期,说法不正确的是?
A.在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B.在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C.在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
D.destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
正确答案:A
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
🍓7.对于子类的构造函数说明,下列叙述中错误的是( )
A.子类不能继承父类的无参构造函数。
B.子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句。
C.在创建子类的对象时,若不含带参构造函数,将先执行父类的无参构造函数,然后再执行自己的无参构造函数。
D.子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。
正确答案:D
A:构造函数不能被继承,只能被调用。
B.子类如果要调用父类的有参构造函数,必须在自己的构造函数第一行使用super()显示地来调用
C.没有带参构造函数时jvm会默认提供无参构造,子类构造函数都默认调用父类地无参构造。为什么这时我们第一行看不见super()呢?因为调用父类无参构造可以省略。
D:同理与A
🍓8.关于Java以下描述正确的有( )
A.native关键字表名修饰的方法是由其它非Java语言编写的
B.能够出现在import语句前的只有注释语句
C.接口中定义的方法只能是public
D.构造方法只能被修饰为public或者default
正确答案:A
A:native是调用本地方法库实现的,可以是C,C++
B:import是用于导包地关键字,它前面还可以出现package,用于声明包
C:在jdk8后接口地修饰符还可以为default,但是需要有代码块,可以不被重写
D:构造方法可以为public、protect、default、private
🍓9.java语言的下面几种数组复制方法中,哪个效率最高?
A.for 循环逐一复制
B.System.arraycopy
C.Array.copyOf
D.使用clone方法
正确答案:B
A:for循环属于这四种方法唯一一种深复制(也就是复制值),而且不是封装好的方法,肯定是最慢的
B:System.arraycopy是一个native方法而且被手写入JVM中,在JVM里已经预写好了,当然是当之无愧的一哥,最快的
C:Array.copyOf本质上是调用了大哥System.arraycopy(),但它本身不是native方法(本地方法),所以效率只能排老三
D:clone()也是一个native方法,所以效率很高,但比不上System.arraycopy,为什么呢?因为它没有被写入到JVM中,所以只能当个二哥了。
速度效率:System.arraycopy()>clone()>Array.copyOf()>for循环
🍓10.String s = new String("xyz");创建了几个StringObject?
A.两个或一个都有可能
B.两个
C.一个
D.三个
正确答案:A
通过new实例的方法创建字符串时,我们都知道会在堆上创建对象。我们也知道还有字符串常量池这个东西,但是很多人不知道的是你在new字符串时jvm会去检查常量池是否存在这个对象。如果存在,它只会在堆上创建一个对象。如果不存在,它会在常量池和堆上同时都创建一个对象,也就是两个对象。
答案汇总:
1、正确答案:B
2、正确答案:D
3、正确答案:B
4、正确答案:B
5、正确答案:B
6、正确答案:A
7、正确答案:D
8、正确答案:A
9、正确答案:B
10、正确答案:A