软件开发----Java基础每日刷题(转载于牛客)

1.        final、finally、finalize三个关键字的区别是()

A        final是修饰符(关键字)可以修饰类、方法、变量

       finally在异常处理的时候使用,提供finally块来执行任何清除操作

       finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作

       finally和finalize一样都是用于异常处理的方法

正确答案:ABC

解析:

final:可用来定义变量、方法传入的参数、类、方法。

finally:只能跟在try/catch语句中,并且附带一个语句块,表示最后执行。

finalize:是垃圾回收器操作的运行机制中的一部分,进行垃圾回收器操作时会调用finalize方法,因为finalize方法是object的方法,所以每个类都有这个方法并且可以重写这个方法,在这个方法里实现释放系统资源及其他清理工作,JVM不保证此方法总被调用。


2.        下面哪些写法能在 java8 中编译执行()

       dir.listFiles((File f)->f.getName().endsWith(“.Java”));

       dir.listFiles((File f)=>f.getName().endsWith(“.Java”));

       dir.listFiles((_.getName().endsWith(“.Java”)));

       dir.listFiles( f->f.getName().endsWith(“.Java”));

正确答案:AD

解析:
 

Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:

(1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。

(2) 箭头(→)。必须通过英文中画线和大于符号组成。

(3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。

由此可见,应该是A和D正确。


3.        在Java中下面Class的声明哪些是错误的?

       public abstract final class Test { abstract void method(); }

B        public abstract class Test { abstract final void method(); }

       public abstract class Test { abstract void method() { } }

       public class Test { final void method() { } }

正确答案:ABC

解析:

A.被final修饰的类为最终类,不能被继承,而类前面如果有abstract修饰,则为抽象类,抽象类是需要被继承才有意义,因此abstract和final矛盾,选项错误。

B.被final修饰的方法为最终方法,不能被继承,而方法前面如果有abstract修饰,则为抽象方法,抽象方法是需要被继承才有意义,因此abstract和final矛盾,选项错误。

C.抽象类中的抽象方法不能有具体的实现,而选项中的 abstract void method() {}中{}代表有具体的实现,因此此处应该为abstract void method();

注意: abstract 不能与private、static、final或native并列修饰同一个方法。


4.        以下有关构造方法的说法,正确的是:()

A        一个类的构造方法可以有多个

B        构造方法在类定义时被调用

C        构造方法只能由对象中的其他方法调用

D        构造方法可以和类同名,也可以和类名不同

正确答案:A

解析:

A选项是函数重载的体现,一个类可以有多个参数列表不同的构造方法。A选项正确。

B选项,构造方法在对象被初始化时调用。B选项错误。

C选项,构造方法只能在对象被初始化时调用,不能由其他方法调用。

D选项,构造方法必须与类名相同。


5.        能单独和finally语句一起使用的块是(  )

A        try

B        catch

C        throw

D        throws

正确答案:A


6.        instanceof运算符能够用来判断一个对象是否为:

A        一个类的实例

       一个实现指定接口的类的实例

C        全部正确

       一个子类的实例

正确答案:C

解析:

instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例


7.        jre 判断程序是否执行结束的标准是()

A        所有的前台线程执行完毕

       所有的后台线程执行完毕

       所有的线程执行完毕

       和以上都无关

正确答案:A

解析:

main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。                                                                                          
前台线程和后台线程的区别和联系:

1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。
2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。
3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。

4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。
说明:   

        应用程序的主线程以及使用Thread构造的线程都默认为前台线程                      
    使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序


8.        下面的switch语句中,x可以是哪些类型的数据:()

switch(x)

{

default:

System.out.println("Hello");

}

       long

B        char

C        float

D        byte

E        double

F        String

正确答案:BDF

解析:

以java8为准,switch支持10种类型

基本类型:byte char short int

对于包装类 :Byte,Short,Character,Integer String enum

2、实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的

a、基本类型byte char short 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。

b、基本类型包装类Byte,Short,Character,Integer 原因:java的自动拆箱机制 可看这些对象自动转为基本类型

c、String 类型 原因:实际switch比较的string.hashCode值,它是一个int类型 如何实现的,网上例子很多。此处不表。

d、enum类型 原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型 所以也可以说 switch语句只支持int类型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值