9-05Java面试题复盘

1.可将语句块或方法设为同步使用的语句是( A)
A synchronized
B static
C abstract
D final

解析:
synchronized 用于方法或者代码块前,使此方法或者代码块变成同步的
static 用于声明静态变量
abstract 用于定义抽象类或者方法
final 用于声明常量,即只能赋值一次的变量

2.下面代码的输出结果是什么?D

public class ZeroTest {
    public static void main(String[] args) {
     try{
       int i = 100 / 0;
       System.out.print(i);
  	   }catch(Exception e){
       		System.out.print(1);
            throw new RuntimeException();
       }finally{
       System.out.print(2);
    }
      System.out.print(3);
	 }
 }

A.3
B.123
C.1
D.12
解析:
Try…catch…finally与直接throw的区别:try catch是直接处理,处理完成之后程序继续往下执行,throw则是将异常抛给它的上一级处理,程序便不往下执行了。本题的catch语句块里面,打印完1之后,又抛出了一个RuntimeException,程序并没有处理它,而是直接抛出,因此执行完finally语句块之后,程序终止了

3.能单独和finally语句一起使用的块是(A )
A.try
B.catch
C.throw
D.throws
解析:
使用try…catch块捕获时可以没有catch块,但当没用catch块的时候必须得有finally块.

4.java中下面哪个能创建并启动线程(C)
public class MyRunnable implements Runnable {
public void run() {
//some code here
}
}
A.new Runnable(MyRunnable).start()
B.new Thread(MyRunnable).run()
C.new Thread(new MyRunnable()).start()
D.new MyRunnable().start()
解析:
创建并启动线程的过程为:定义线程—》实例化线程—》启动线程。
一 、定义线程: 1、扩展java.lang.Thread类。 2、实现java.lang.Runnable接口。
二、实例化线程: 1、如果是扩展java.lang.Thread类的线程,则直接new即可。
2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
所以A、D的实例化线程错误。
三、启动线程: 在线程的Thread对象上调用start()方法,而不是run()或者别的方法。

5.What is displayed when the following is executed; A

double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));

A.Ceil d1=-0.0
floor d1=-1.0
B.Ceil d1=0.0
floor d1=-1.0
C.Ceil d1=-0.0
floor d1=-0.0
D.Ceil d1=0.0
floor d1=0.0
E.Ceil d1=0
floor d1=-1
解析:
ceil:大于等于 x,并且与它最接近的整数。
floor:小于等于 x,且与 x 最接近的整数。

6.(多选)关于Java中的数组,下面的一些描述,哪些描述是准确的:( ACE )
A.数组是一个对象,不同类型的数组具有不同的类
B.数组长度是可以动态调整的
C.数组是一个连续的存储结构
D.一个固定长度的数组可类似这样定义: int array[100]
E.两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
F.可以二维数组,且可以有多维数组,都是在Java中合法的
解析:
Java中没有多维数组,多维数组的本质还是一维数组

7.关于JAVA的垃圾回收机制,下面哪些结论是正确?B
A.程序可以任意指定释放内存的时间
B.JAVA程序不能依赖于垃圾回收的时间或者顺序
C.程序可明确地标识某个局部变量的引用不再被使用
D.程序可以显式地立即释放对象占有的内存
解析:
java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。局部变量在栈上,必须用finalize()释放.

8.关于访问权限,说法正确的是? ( A)
A. 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
B. 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类
A不可以访问类B的方法testB
C. 访问权限大小范围:public > 包权限 > protected > private
D. 访问权限大小范围:public > 包权限 > private > protecte
解析:
在这里插入图片描述
9.以下哪个类包含方法flush()?(B)
A. InputStream
B. OutputStream
C. A 和B 选项都包含
D. A 和B 选项都不包含
解析:
方法flush()刷新此输出流并强制写出所有缓冲的输出字节

10.关于 访问权限说法正确 的是 ? ( B )
A. 类定义前面可以修饰public,protected和private
B. 内部类前面可以修饰public,protected和private
C. 局部内部类前面可以修饰public,protected和private
D. 以上说法都不正确
解析:
局部内部类只能abstract或者final修饰

11.以下代码输出什么 B

public static void main(String[] args) {
	Thread t = new Thread() {
		public void run() {
			360DW();
		}
	};
	t.run();
	System.out.print("DW");
}

static void 360DW() {
	System.out.print("360");
}

A.DW
B.360
C.360DW
D.都不输出
解析:
不理解,留于以后解释

12.java8中,下面哪个类用到了解决哈希冲突的开放定址法 C
A.LinkedHashSet
B.HashMap
C.ThreadLocal
D.TreeMap
解析:
Threadlocal使用开放定址法解决hash冲突,Hashmap使用链地址法解决hash冲突

13.子类要调用继承自父类的方法,必须使用super关键字。B
A. 正确
B. 错误
解析:
1、子类构造函数调用父类构造函数用super
2、子类重写父类方法后,若想调用父类中被重写的方法,用super
3、未被重写的方法可以直接调用

14.(多选)对Collection和Collections描述正确的是 BD
A.Collection是java.util下的类,它包含有各种有关集合操作的静态方法
B.Collection是java.util下的接口,它是各种集合结构的父接口
C.Collections是java.util下的接口,它是各种集合结构的父接口
D.Collections是java.util下的类,它包含有各种有关集合操作的静态方法
解析:
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式;
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作

15.(多选)以下哪种方式实现的单例是线程安全的 ABCD
A.枚举
B.静态内部类
C.双检锁模式
D.饿汉式
解析:
1.饿汉式(线程安全,调用效率高,但是不能延时加载); 2.懒汉式(线程安全,调用效率不高,但是能延时加载); 3.Double CheckLock实现单例:DCL也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用); 4.静态内部类实现模式(线程安全,调用效率高,可以延时加载); 5.枚举类(线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用)。

16.以下代码将打印 B

System.out.println(10%3*2);

A.1
B.2
C.4
D.6
解析:
% 与 * 优先级一样

18.下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是? B
A.实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。
B.局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
C.类变量指的是用static修饰的属性
D.final变量指的是用final 修饰的变量
解析:
实例变量: 定义在类中的变量是类的成员变量,可以不进行初始化, java 会自动进行初始化。(如果是引用类默认初始化为 null, 如果是基本类型,默认初始化为 0 )
局部变量 :定义在方法中的变量,必须进行初始化,否则不通过编译。
类变量 :(也叫作静态变量)是类中独立于方法之外的变量,用 static 修饰。
final 修饰的变量: 也称为常量。

19.java接口的方法修饰符可以为?(忽略内部接口) D
A.private
B.protected
C.final
D.abstract
解析:
接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。

20.观察以下代码,下列哪些针对代码运行结果的描述是正确的 ? A

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");
    }
}

A.Car
B.Vehicle
C.Compiler error at line 3
D.Compiler error at line 5
E.Exception thrown at runtime
解析:
首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java面试题真的很多,下面我来回答一个有关多线程的问题。 在Java中实现多线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。这两种方式有何区别? 继承Thread类的方式是直接定义一个类继承Thread,并重写它的run()方法。然后创建该类的对象,并调用对象的start()方法来启动线程。这种方式简单直接,但因为Java是单继承的,所以如果某个类已经继承了其他类,就不能再直接继承Thread类实现多线程。 实现Runnable接口的方式是定义一个类实现Runnable接口,并实现其唯一的抽象方法run()。然后创建Thread类的对象,将实现了Runnable的对象作为参数传递给Thread类的构造方法。最后调用Thread对象的start()方法来启动线程。这种方式灵活性更大,因为Java允许一个类实现多个接口,所以即使某个类已经继承了其他类,仍然可以通过实现Runnable接口来实现多线程。 另一个区别在于资源共享的问题。继承Thread类的方式,不管是数据还是方法,都是线程自己拥有的,不存在共享的情况。而实现Runnable接口的方式,多个线程可以共享同一个对象的数据和方法,因为多个线程共同操作的是同一个Runnable对象。 总结来说,继承Thread类方式简单直接,但只能通过单继承来实现多线程;实现Runnable接口方式更灵活,可以解决单继承的限制,并且多个线程可以共享同一个Runnable对象的数据和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值