2020年最新JAVA基础进阶面试题(精品版)

1、String 是基本数据类型吗?

String 不是基本数据类型。

 

2、String 是可变的话?

String 是 final 类型的,不可变。

 

3、怎么比较两个字符串的值一样,怎么比较两个字符串是否同一对象? 比较字符串的值是否相同用 equals,比较字符串对象是否同一个用==。

 

4、switch 中可以使用 String 吗?

jdk7+中的 switch 可以使用String 类型。

 

5、String str = new String("abc");创建了几个对象,为什么?

创建了两个,"abc"本身创建在常量池,通过 new 又创建在堆中。

 

6、String、StringBuffer、StringBuilder 有什么区别?

String、StringBuffer、StringBuilder 最大的不同是 String 不可变,后者可变。StringBuffer 是线程安全的,StringBuilder 线程不安全速度较快。

 

7、String.trim()方法去掉的是哪些字符? trim 去掉字符串首尾的空白字符。

 

8、String 可以被子类继承吗?

既然 String 是 final 的,所以不能被继承。

 

9、可以自定义 java.lang.String 类并使用吗?

可以自定义 java.lang.String 类并编译成功,但不能被加载使用,具体请学习类加载机制。

 

10、String 与 byte[]两者相互之间如何转换?

String > byte[] 通过 String 类的 getBytes 方法;byte[] > String 通过 new String(byte[])构造器。

 

  1. 你知道的 List 都有哪些?

 ArrayList、LinkedList、Vector 等。

  1. List 和Vector 有什么区别?

Vector 是 List 接口下线程安全的集合。List 是有序的吗?

List 是有序的。

  1. ArrayList 和 LinkedList 的区别?分别用在什么场景?

ArrayList 和 LinkedList 数据结构不一样,前者用在查询较多的场合,后者适用于插入较多的场合。

 

5、ArrayList 和 LinkedList 的底层数据结构是什么?

 

ArrayList 使用的是数组结构,LinkedList 使用的是链表结构。

 

6、ArrayList 默认大小是多少,是如何扩容的?

 

Jdk1.7 之前 ArrayList 默认大小是 10,JDK1.7 之后是 0,JDK 差异,每次约按 1.5 倍扩容。

 

7、List 是线程安全的吗?如果要线程安全要怎么做?

 

List 中的 Vector 才 是 线 程 安 全 的 , 其 他 要 实 现 线 程 安 全 使 用 工 具 类

Collections.synchronizedList(new ArrayList())方法。

8、怎么给 List 排序?

使用 List 自身的 sort 方法,或者使用 Collections.sort(list)方法;

9、Arrays.asList 方法后的 List 可以扩容吗?

Arrays.asList 使用的是 final 数组,并且不支持 add 方法,不支持扩容。

 

10、List 和 Array 之间如何互相转换?

 

List>Array 使用 toArray 方法,Array>List 使用 Arrays.asList(array)方法,由于它是固定的,不固定的可以使用new ArrayList(Arrays.asList(array))。

 

  • main 方法是做什么用的?

 

  • main 方法是 Java 程序的入口方法,JVM 在运行的时候会首先查找 main 方法。

 

 

  • 不用 main 方法如何运行一个类?

 

  • 不行,没有main 方法我们不能运行 Java 类。
  • 在 Java 7 之前,你可以通过使用静态初始化运行 Java 类。但是,从 Java 7 开始就行不通了。

 

 

  • main 方法如何传递参数?传递参数的类型是什么?能不能改变该参数类型?

 

  • String 数组,不能改变。

 

 

  • main 方法为什么是静态的?能不能改为非静态?

 

  • main()方法一定是静态的,如果 main()是非静态的那么在调用 main 方法时 JVM 就得实例化它的类。

 

  • 不能改为非静态,main()方法必须声明为静态的,这样 JVM 才可以调用 main()方法而无需实例化它的类。
  • 如果从 main()方法去掉“static”这个声明,虽然编译依然可以成功,但在运行时会导致程序失败。
  • 在实例化时,还得调用类的构造函数。如果这个类的构造函数有参数,那么届时就会出现歧义。

 

 

  • main 方法能被重载吗?

 

  • 可以,我们可以重载main()方法。一个 Java 类可以有任意数量的 main()方法。

 

 

  • main 方法能被覆盖吗?

 

  • 在 Java 中静态方法在编译时会编译在一起,main 方法是静态方法,所以你在 Java 中不能覆盖静态方法。

 

 

  • main 方法的返回类型是什么?能不能改变?

 

  • void,不能改变。

 

  • main 方法的作用域用什么修饰?能不能改变?

 

  • public,不能改变。

 

 

  • main 方法可以同步吗?

 

  • main 方法可以在 Java 中同步,synchronized 修饰符允许用于 main 方法的声明中,这样就可以在 Java 中同步 main 方法了。

 

 

  • main 方法可以终结吗?

 

  • 可以在 Java 中终结 main 方法。

猜你喜欢

转载自blog.csdn.net/yunchan2675/article/details/108239333