十道Java面试题

问:JDK 和 JRE 的区别
JDK是Java程序开发的最小环境
JRE是运行Java程序最小环境

问:== 和 equals 的区别
==:是Java中的一个二元操作符,用于比较原生类型和对象,比较基本类型时直接比较值是否相等;比较对象时,则比较两个对象基于内存的引用,如果引用相同返回true
equals:是Object类中的方法,如果没有重写该方法则默认使用==比较;所以一般业务中都会重写equals();

问:final 在 Java 中的作用
final用于修饰一个引用:
1.如果引用为基本数据类型,则该应用为常量,该值无法修改;
2.如果引用为数据类型,比如对象、数据,则该对象、数组本身可以修改,但指向该对象或数组的引用地址不能修改。
3.如果引用为类的成员变量,则必须当场赋值,否则编译会报错

问:String 类的常用方法有哪些
声明变量 String str;
声明并初始化 String str = "str";
获得字符串长度 int length(); 例: int i = str.length();
获取指定字符 char charAt(int index); 例 char c = str.charAt(1); c=="t";
将字符串变成char数组类型(字符串变成单个字符) char[] toCharArray(); 例 char[] cs = str.toCharArray(); cs=["s","t","r"];
找出字符在字符串中的位置(下标) int indexOf(String str); int indexOf(String str,int indexFrom)指定字符,在指定位置开始; 返回-1表示不存在
找出字符在字符串中最后出现的位置(下标) int lastIndexOf(String str);
字符串转换大小写:toUpperCase(); toLowerCase(); 例: str.toUpperCase();
根据指定给定的正则表达式分割字符串: String[] split(); 注:如果使用到特殊符号 使用\\转义,要使用多个分割符可以借助|符号。
判断两个字符串是否相等 equals(Object obj);
去除字符串两边的空格 trim();
替换字符 replace(char oldChar,char newChar);
截取字符串 String subString(int beginIndex,int endIndex); 从开始位置截取,顺数 endIndex个位置
忽略大小写比较两个字符串是否相等 boolean equalsIgnoreCase(String str);
判断字符串是否包含指定内容 boolean contains(String str);
判断字符串是否以指定前缀开始 boolean startsWith(Strint str);
判断字符串是否以指定后缀结束 boolean endsWith(String str);

问:Java中操作字符串的类有那些,他们之间有什么区别
String:是不可变的对象,每次对String操作都会生成一个新的对象,如果字符串基本不修改的话,直接使用String
注:使用new关键字声明String类型的变量它不会再堆内存中创建对象,直接指向String常量池,并且可以复用
StringBuffer 和 StringBuilder 都是可变对象
StringBuffer: 因为StringBuffer中的方法大部分使用了synchronized,所以StringBuffer线程安全的,在多线程环境建议使用StringBuffer
StringBuilder: 因为StringBuilder没用synchronized修饰所以是非线程安全的,在单线程环境建议使用StringBuidler
注:他们都是以char[]的形式保存字符串

问:如何将字符串反转
使用 StringBuffer().reverse();

问:普通类和抽象类有什么区别
1.普通类可以实例化,抽象类不行;
2.普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非子类也是抽象类;
3.抽象方法不能声明为静态,抽象方法只需要声明无需实现;
4.抽象类可以有构造方法,被继承时子类必须继承父类的一个构造方法;
5.普通类中不能有抽象方法,有抽象方法必须为抽象类。

问:接口和抽象类有什么区别
1.接口是对动作的抽象,抽象类是对本质的抽象;
2.抽象类和接口都是用来抽象具体的对象,但是接口的抽象级别更高;
3.抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量;
4.抽象类主要用来抽象类别,接口主要 用来抽象功能;
5.抽象类中,且不包含任何实现,派生类必须覆盖他们。接口中所哟u方法都必须是未实现的;
6.接口是设计的结果,抽象类是重构的结果

问:Java中的IO流分几种
按流向分,可分为输入流和输出流
  输入流:只能从中读取数据,而不能向其写入数据。
  输出流:只能向其写入数据,而不能向其读取数据。
按操作单元分,可以分为字节流和字符流
  字节流主要是由InputStream和OutPutStream作为基类
  字符流主要是由Reader和Writer作为基类
按流的角色分,可以分为节点流和处理流
  可以从/向一个特定的IO设备 读/写数据的流,称为节点流,也叫低级流
  处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实行数据的读/写功能,处理流野被称为高级流。

问:List、Set和Map有什么区别
1.List、Set 都是继承自Collection接口,Map则不是;
2.List特点:元素有放入顺序,元素可以重复,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉;
3.List支持for循环,通过下标来遍历,也可以使用迭代器遍历,Set只能使用迭代器来遍历,因为他是无序的,无法使用下标获取想要的值;
4.Set和List对比:
  Set:检索元素效率低下,删除和插入效率搞,插入和删除不会引起元素位置改变。
  List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
5.Map适合存储键值对的数据;
6.线程安全集合类和非线程安全集合类:
  LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
  HashMap是非线程安全的,HashTable是线程安全的;

posted on 2020-04-17 15:13  Ye-ye  阅读(132)  评论(0编辑  收藏  举报

导航