码上风云

记录精彩的程序人生

  menu
24 文章
0 浏览
1 当前访客
ღゝ◡╹)ノ❤️

十道java基础面试题,你能保证全答对吗?

Java 初级开发面试中常见的问题有好多,下面总结一下常见的问题,先给问题,大家思考一下再看答案。

1.JDK 和 JRE 有什么区别?
2.== 和 equals 有什么区别?
3.说说 final 在 Java 中的作用。
4.String 类的常用方法有哪些?
5.Java 中操作字符串的类有哪些?它们有什么区别。
6.如何将字符串翻转?
7.普通类和抽象类有什么区别?
8.接口和抽象类有什么区别?
9.java 中的 io 流分几种?
10.list set 和 map 之间有什么区别?


下面只做简短的重点回答。
答案:
1.JDK 和 JRE 有什么区别?
答:
JRE(Java Runtime Enviroment)是 Java 的运行环境。面向的是 Java 程序的使用者。JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件
JDK(Java Development Kit)是 Java 开发工具包。面向的是 Java 程序的开发者。它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 Java 文件编译为 class 文件)和运行环境(提供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行,也就是 JRE)。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java 工具 tools.jar 和 Java 标准类库 (rt.jar)。
关系图如下:
HTYSUSZUE0GF49RZR057.png

2.== 和 equals 有什么区别?
答:
== :如果比较的是基本数据类型,则直接比较其存储的 “值”是否相等;如果比较的是引用类型的变量,则比较的是所指向的对象的地址
equals:两个对象的内容是否相等,最多的是用来比较字符串

引申一个小题,答案在文章最下面找:

 Integer a=1;
 int b=1;
 Integer c=new Integer(1);
 Integer d=128;
 Integer e=128;
 System.out.println(a==b);
 System.out.println(a==c);
 System.out.println(b==c);
 System.out.println(d==e);

3.说说 final 在 Java 中的作用。
答:
分三种情况,
用来修饰引用:如果引用为基本数据类型,则该引用为常量,该值无法修改;如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改; 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
用来修饰一个方法:当使用 final 修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
用来修饰类时:该类成为最终类,无法被继承。

4.String 类的常用方法有哪些
答:

indexOf() 返回指定字符的索引
charAt() 返回指定索引处的字符
repalce() 字符串替换
trim() 去除字符串两端的空白
split() 分割字符串 返回分割后的字符串数组
getBytes() 返回字符串的byte类型数组
length() 返回字符串的长度
toLowerCase() 字符串转小写
toUpperCase() 字符串转大写
substring() 截取字符串
equals() 字符串比较

5.Java 中操作字符串的类有哪些?它们有什么区别。
答:
Java 中操作字符串的类有 String、StringBuffer、StringBuilder。
String : final 修饰,String 类的方法都是返回 new String。即对 String 对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
StringBuffer : 对字符串的操作的方法都加了 synchronized,保证线程安全。
StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以 new StringBuilder 对象,调用 StringBuilder 对象的 append、replace、delete 等方法修改字符串。

6.如何将字符串翻转?
答:

  • 利用 StringBuffer 或 StringBuilder 的 reverse 成员方法:
// StringBuffer 
public static String reverse1(String str) {  
  return new StringBuilder(str).reverse().toString();  
}
  • 利用 String 的 toCharArray 方法先将字符串转化为 char 类型数组,然后将各个字符进行重新拼接:
// toCharArray  
public static String reverse2(String str) {  
   char[] chars = str.toCharArray(); 
   String reverse = ""; 
   for (int i = chars.length - 1; i >= 0; i--) {   
   reverse += chars[i];  
   }   
 return reverse;  
}
  • 利用 String 的 CharAt 方法取出字符串中的各个字符:
// charAt  
public static String reverse3(String str) {    
	String reverse = "";    
	int length = str.length();   
	for (int i = 0; i < length; i++) {      
	reverse = str.charAt(i) + reverse;   
 	}  
  return reverse; 
 }

7.普通类和抽象类有什么区别?
答:

  • 抽象类不能被实例化
  • 抽象类可以有抽象方法,抽象方法只需申明,无需实现
  • 含有抽象方法的类必须申明为抽象类
  • 抽象类的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
  • 抽象方法不能被声明为静态
  • 抽象方法不能用 private 修饰
  • 抽象方法不能用 final 修饰

8.接口和抽象类有什么区别?
答:

  • 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
  • 抽象类要被子类继承,接口要被类实现。
  • 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
  • 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  • 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
  • 抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果
  • 抽象类里可以没有抽象方法
  • 如果一个类里有抽象方法,那么这个类只能是抽象类
  • 抽象方法要被实现,所以不能是静态的,也不能是私有的。
  • 接口可继承接口,并可多继承接口,但类只能单根继承。

9.java 中的 io 流分几种?
答:

  • 按照流的流向分,可以分为输入流和输出流;
  • 按照操作单元划分,可以划分为字节流和字符流;
  • 按照流的角色划分为节点流和处理流。
    所有流的基类
    InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
    OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

10.list set 和 map 之间有什么区别?
答:
List 接口和 Set 接口属于 Collection 接口,Map 接口和 Collection 接口并列存在(同级)。
List:元素可重复,有序性
Set:元素不可重复。

  • LinkedHashSet 按照插入排序
  • SortedSet 可排序
  • HashSet 无序

Map:采用键值对 <key,value> 存储元素,key 键唯一。

  • hashmap:底层结构是数组 + 链表,无序,线程不安全,效率高,允许有 null(key 和 value 都允许),父类是 AbstractMap
  • treemap:底层结构是红黑树,有序,将数据按照 key 排序,默认是升序排序。
  • hashtable:底层结构是哈希表,无序,线程安全,效率低,不允许有 null 值,父类是 Dictionary
//第二题运行结果
true
false
true
false

think twice, code once