当前位置: 首页 > java>阅读正文

Java易错题集合

2022.1.5 朱丰华 338 次 留下评论 2907字

1.final对象本身的引用和值都不能改变?

错,final修饰的基本对象不可以改变,引用对象地址不可以改变,但引用对象的值可以改变。

2.定义Object类型需要占用多少空间?

Object是所有对象的基类,声明对象不占用空间(默认为null占用1位)。

3.java接口中包含函数声明和变量声明。

错,java接口中无法定义变量,只能是final修饰的常量。

4.哪些文件流可用于处理Unicode?

转换流(InputStreamReader,OutputStreamReader),可以指定编码,从而可以处理不同编码的文字

5.单例模式中,两个基本要点是?

(1)构造函数私有(2)唯一实例

6.如何实现一个线程安全的Singleton对象?

public class Singleton {
    private static Singleton instance;
    private Singleton (){}
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

7.synchronized和volatile的区别?

synchronized 会把属性锁定(可以修饰属性或方法或类),只有当前线程可以访问到该变量,其他的线程将会被阻塞。(保证了可见性和原子性)

volatile 则是从内存中重新读写变量(仅能修饰属性),它仅保证可见性(修改数据后,其他线程立刻能读取到新的值)和有序性以及禁止指令重排序,并不保证原子性,但它也不会导致线程阻塞。

相对来说,synchronized更强大,volatile更轻量。

8.正则表达式https:[://]www[.]example[.]com能否匹配https://www.example.com?

不能,因为[://]实际相当于[:/],且仅能取出 : 或者 / 中的任意一个

9.HashMap和ThreadLocalMap分别使用什么方法处理地址冲突?

HashMap采用分离链表法处理地址冲突,而ThreadLocalMap使用开放地址法处理

10.已知 i 为int类型,则 i = ++(i++) 能否通过编译?

不能,++() 是错误的,因为其只能用于变量上,而不能用于表达式

11.已知如下代码:

byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=5;

b3 = b1+b2;  // 语句1
b6 = b4+b5;  // 语句2

// 上述两个语句会发生什么?

语句1会编译报错,而语句2正常通过。因为四则运算后byte类型提升,而添加了final后则不会被提升。

12.下列哪个语句可以用来声明了一个创建N个字符串数组的变量?

char a[][];  // a
String a[];  // b
String[] a;  // c
Object a[50]; // d
String a[50];  // e
Object a[];  // f

声明数组时,不可以指定大小,而实例化数组时必须指定大小,只有 bcf 符合。

13.语句 Object o = true?new Integer(1):new Double(2); 的结果,o的值是多少?

o的值是1.0,因为对于数字类型,三元表达式会提升数据范围为最大的精度以确保精度不丢失,所以结果是Double类型值1.0

14.线程通过使用synchronized关键字可以获得对象的互斥锁定?

对,当使用synchronized修饰对象时,该对象在线程中存在锁标记,每个锁都只能被其中一个线程取得,叫做互斥锁。

15.如果一个list初始化为{5,3,1},执行以下代码后,结果为()?

nums.add(6);
nums.add(0,4);
nums.remove(1);

注意add(index, value)以及remove(index),则结果是{4,3,1,6}

16.Hashtable和HashMap的区别是?

  • HashMap是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
  • Hashtable线程安全的,而HashMap是线程不安全的
  • Properties类继承了Hashtable类,而Hashtable类则继承Dictionary类
  • HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

17.Java的Daemon线程,setDaemon()设置必须要()?

答案:在start之前。因为设置一个线程为守护线程必须要在用它的start方法之前进行设置,否则将抛出异常。

18.String s = “com.jd”.replaceAll(“.”,”/”)+”MyClass.class”;的结果是?

答案:///////MyClass.class。因为第一个参数是正则,其中的 . 表示任意字符。

19.Java反射主要涉及的类如Class,Method,Field等,他们都在Java.lang.reflet包下()

错,Class在java.lang包下,而Method,Field等在java.lang.reflet包下

20.反射可以动态的判断一个对象所属的类?

是的,除了instanceof关键字外,可以使用反射的getClass,并使用equals判断

21.实现类中可以直接调用接口中的属性吗?

可以直接调用,或者通过接口名.属性名。(接口中属性为public final static、接口中的方法为public abstract)

22.response重定向默认是301还是302?

默认是302(临时重定向),如果需要可以手动设置head,让status为301并设置Location

23.如果在try和finally中均有return,则会发生什么?

在try中发现return语句,会将该临时结果保存在栈中但没有立刻返回,继续执行finally,如果finally中也有return,那么该值将会替换临时的返回值,并把结果返回。

24.以下程序的执行结果是什么?

public class TestCall {
    String str = "good";
    char[] ch = {'a','b','c'};
    public static void main(String[] args){
        TestCall t = new TestCall();
        t.change(t.str,t.ch);
        System.out.print(t.str+"and");
        System.out.print(t.ch);
    }
    public void change(String str,char[] ch){
        str = "test ok";
        ch[0] = 'g';
    }
}

答案:执行结果 goodandgbc。注意引用传递,如果改变该引用值内部的数据则会被改变(ch被改变)。

25.java中lambda表达式语法?

(参数列表) -> {一些语句}
  • 对于 (参数列表),可以省略数据类型,如果只有一个参数时,还可省略 ()……(省略()必须省略类型)
  • 对于 {一些语句},如果仅有一个语句,可省略 {}, return, ; ……(如果省略也应该一起省略)

本篇完,还有疑问?留下评论吧

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注