- String是不可变的,尝试去修改只是会新生成一个字符串对象,而StringBulider、StringBuffer是可变的
- StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有。StringBulider线程不安全,但快,StringBuffer线程安全,但是慢
- jdk:java开发工具
- jre:java运行环境
- jdk包括jre,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。
- 对于基本数据类型,int、float等,==比较的是值
- 对于引用类型,==比较的是内存地址
- equals不能用于基本类型的比较;
- 如果没有重写equals,equals就相当于==;
- 如果重写了equals方法,equals比较的是对象的内容;
- 底层实现不同,ArrayList是数组实现,LinkedList是链表实现
- ArrayList适合随机查找(数组下标),因为LinkedList要移动指针
- LinkedList适合新增与删除(链表指针指向),因为ArrayList要移动数据
(1)String类的获取功能
- length():获取字符串长度;
- charAt(int index):获取指定索引位置的字符;
- indexOf(int char):返回指定字符在此字符串中第一次出现处的索引;
- substring(int start):从指定位置开始截取字符串,默认到末尾;
- substring(int start,int end):从指定位置开始到指定位置结束截取字符串;
(2)常见String类的判断功能
- equals(Object obj): 比较字符串的内容是否相同,区分大小写;
- contains(String str): 判断字符串中是否包含传递进来的字符串;
- isEmpty(): 判断字符串的内容是否为空串;
- startsWith(String str): 判断字符串是否以传递进来的字符串开头;
(3)常见String类的转换功能
- String.valueOf(): valueOf可以将任意类型转为字符串;
- toLowerCase(): 把字符串转成小写;
- 创建格式化对象 format(),多用于日期
- concat(String str): 把字符串拼接;
String str=new String("abcdefg"); String str1=new String("hijklmn"); String concat = str.concat(str1);
- final用于修饰类,变量,方法,,修饰的类不能被继承、修饰的变量不能被修改,修饰的方法不能被重写。
- finally用于抛异常,无论异常是否发生,都会执行finally代码块的语句,常用于一些流的关闭,比如JDBC连接时关闭connect等。
- finalize方法用于垃圾回收。
- NullPointerException:空指针异常
- SQLException:数据库异常
- IndexOutOfBoundsException:数组下标越界异常
- FileNotFoundException:找不到文件异常
- NoSuchMethodException:找不到方法异常
- ArrayStoreException:将错误类型的对象存储到一个对象数组时抛出的异常
- NumberFormatException:将字符串转换成数字时失败的异常
- IllegalArgumentException :向方法传了一个不合法或不正确的参数的异常
- ArithmeticException:异常的运算条件的异常,比如除零错误
- hashcode是通过hash函数算来的一个十进制的整数,一个对象有唯一确定的哈希值
- 如果两个对象equals相等,那么这两个对象的HashCode一定也相同
- 如果两个对象的HashCode相同,不代表两个对象相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
- 我们在重写equals方法后,也尽量重写hashcode方法,通过一定的算法,使他们在equals相等时,也会有相同的hashcode值。
- HashMap是线程不安全的,HashTable是线程安全的
- HashMap中允许键和值为null,HashTable不允许
- HashMap的默认容器是16,为2倍扩容,HashTable默认是11,为2倍+1扩容
- 多个线程操作共享数据时,加锁保证访问共享数据的线程安全性。
- 反射,是java在运行时进行自我观察的能力,通过class、constructor、field、method四个方法获取一个类的各个组成部分。
- 在Java运行环境中,对任意一个类,可以知道类有哪些属性和方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于反射机制
(1)什么时候使用克隆?
想对一个对象进行复制,又想保留原有的对象进行接下来的操作,这个时候就需要克隆了。
(2)如何实现对象克隆?
实现Cloneable接口,重写clone方法;
实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深克隆。
BeanUtils,apache和Spring都提供了bean工具,只是这都是浅克隆。
(3)深拷贝和浅拷贝区别是什么?
浅拷贝:仅仅克隆基本类型变量,不克隆引用类型变量;
深克隆:既克隆基本类型变量,又克隆引用类型变量;
- Collection接口的子接口有Set接口与List接口
- Map接口实现的集合:HashMap、TreeMap、HashTable
- Set接口实现的集合:HashSet、TreeSet、LinkedHashSet



