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(JavaRuntimeEnviroment)是java的运行环境。面向的是Java程序的使用者。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件
JDK(JavaDevelopmentKit)是Java开发工具包。面向的是Java程序的开发者。它提供了Java的开发环境(提供了编译器javac等工具,用于将Java文件编译为class文件)和运行环境(提供了JVM和Runtime辅助包,用于解析class文件使其得到运行,也就是JRE)。JDK是整个Java的核心,包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库(rt.jar)。
关系图如下:
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 成员方法:// StringBufferpublic static String reverse1(String str) {return new StringBuilder(str).reverse().toString();}
利用 String 的 toCharArray 方法先将字符串转化为 char 类型数组,然后将各个字符进行重新拼接:// toCharArraypublic staticString reverse2(Stringstr) {char[] chars = str.toCharArray();String reverse = "";for (int i = chars.length - 1; i >= 0; i--) {reverse += chars[i];return reverse;
利用 String 的 CharAt 方法取出字符串中的各个字符:// charAtpublicstatic String reverse3(String str) {String reverse = "";int length = str.length();for (int i = 0; i < length; i++) {reverse = str.charAt(i) + 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 键唯一。
hashmap:底层结构是数组 + 链表,无序,线程不安全,效率高,允许有 null(key 和 value 都允许),父类是 AbstractMaptreemap:底层结构是红黑树,有序,将数据按照 key 排序,默认是升序排序。hashtable:底层结构是哈希表,无序,线程安全,效率低,不允许有 null 值,父类是 Dictionary//第二题运行结果truefalsetruefalse