牛客网刷题日记_2021-10-22
题目1:
链接:https://www.nowcoder.com/questionTerminal/6a9592268db4436dbd4914c619e78a62
来源:牛客网
下面程序段执行后b的值是()。
Integer integ =new Integer(9);
boolean b = integ instanceof Object;
A. 9
B. true
C. 1
D. false
解析:
instanceof左边是对象,右边是类,返回值是布尔类型,当左边对象是右边类或子类创建的对象时,返回true,否则返回false。而类Object是类层次结构的根类,每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的方法,所以返回true。
题目2:
链接:https://www.nowcoder.com/questionTerminal/59f359863b86412b83dcd13a01750820
来源:牛客网
public boolean returnTest()
{
try
{
return true;
}
catch (Exception e)
{
}
finally
{
return false;
}
}
A.true
B.false
解析:
try说我要return true结束运行了,finally你有啥事没做的赶紧搞定哈,做完我好return。 finally说我这边也就return个false,结束运行。咦?好像你的return,没用上啊。我这边先结束运行了。。。
注意:
finally其实是仅在return 语句执行前执行,如果return 一个函数,那么会先执行函数,但如果函数内有(return)语句,那么finally就会在这个return 语句前执行。finally在catch中的return之前执行但是如果catch中有返回值而finally中也有返回值的话finally中的返回值会替换catch中的返回值,因为catch中的返回值是存放在一个临时区中。
如果catch块有异常向外抛出,执行顺序呢:我执行我的,你抛你得异常,我finally我的语句,我俩互不干涉,你别管我啥时执行,但我一定会执行。
关于finally,您只需记着一点:除非调用system.exit()让程序退出(也就是将调用这个程序的进程断开了、退出了这个程序)就不会执行或断电等因素致使程序停止进程终止,否则,无论任何因素,finally块都一定会执行。
题目3:
关于抽象类和接口叙述正确的是? ( )
A.抽象类和接口都能实例化的
B.抽象类不能实现接口
C.抽象类方法的访问权限默认都是public
D.接口方法的访问权限默认都是public
解析:
抽象类 特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。 6,抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰关键字使用注意:
抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。 7,接口可以继承接口,用extends
题目4:
以下语句输出的结果是()
解析:
++在前 就先+
++在后 先使用 后+
题目5:
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
下列哪些针对代码运行结果的描述是正确的?
Car
Vehicle
Compiler error at line 3
Compiler error at line 5
Exception thrown at runtime
解析:
首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。
题目6:
Java的跨平台特性是指它的源代码可以在多个平台运行。()
正确
错误
解析:
Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码
题目7:
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
ZYXX
ZYXY
YXYZ
XYZX
解析:
答案第三个
初始化过程:
- 初始化父类中的静态成员变量和静态代码块 ;
- 初始化子类中的静态成员变量和静态代码块 ;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;
所以:
(1)初始化父类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(2)再执行父类的构造方法;输出X
(3) 初始化子类的普通成员变量和代码块,执行 Y y=new Y(); 输出Y
(4)再执行子类的构造方法;输出Z 所以输出YXYZ
题目8:
ServletConfig接口默认是哪里实现的?
解析:
题目9:
JDK提供的用于并发编程的同步器有哪些?
Semaphore
CyclicBarrier
CountDownLatch
Counter
解析:
答案:ABC
A,Java 并发库 的Semaphore可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。B,CyclicBarrier 主要的方法就是一个:await()。await()方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。
C,直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指
CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。
D,Counter不是并发编程的同步器
题目10:
TreeSet<Integer> set = new TreeSet<Integer>();
TreeSet<Integer> subSet = new TreeSet<Integer>();
for(int i=606;i<613;i++){
if(i%2==0){
set.add(i);
}
}
subSet = (TreeSet)set.subSet(608,true,611,true);
set.add(609);
System.out.println(set+" "+subSet);
编译失败
发生运行时异常
[606, 608, 609,610, 612] [608, 609,610]
[606, 608, 609,610, 612] [608, 610]
解析:
选c
因为他们俩是共用的一个数组 所以 范围是一样的
1、TreeSet 自然排序
2、subSet()方法的运用
subset(form,true,to,true)中的from和to是范围这个范围中的集合,true只返回的集合中是包含上限和下限的。
题目10:
下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
byte[] src,dst;
dst=String.fromBytes(src,"GBK").getBytes("UTF-8")
dst=new String(src,"GBK").getBytes("UTF-8")
dst=new String("GBK",src).getBytes()
dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
解析:
答案:B
操作步骤就是先解码再编码
用new String(src,“GBK”)解码得到字符串
用getBytes(“UTF-8”)得到UTF8编码字节数组
题目11:
有关finally语句块说法正确的是( )
不管catch是否捕获异常,finally语句块都是要被执行的
在try语句块或catch语句块中执行到System.exit(0)直接退出程序
finally块中的return语句会覆盖try块中的return返回
finally 语句块在 catch语句块中的return语句之前执行
解析:
答案 ABC
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。