牛客网刷题日记(2021-10-22)

牛客网刷题日记_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

解析:

答案第三个

初始化过程:

  1. 初始化父类中的静态成员变量和静态代码块 ;
  2. 初始化子类中的静态成员变量和静态代码块 ;
    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, 609610, 612] [608, 609610]
[606, 608, 609610, 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中保存的返回值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值