1、switch分支表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String,不支持double、float、long
2、元素默认值
数据类型 | 明细 | 默认值 |
基本类型 | byte、short、char、int、long | 0 |
float、double | 0.0 | |
boolean | false | |
引用类型 | 类、接口、数组、String | null |
3、一个java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名
4、两个对象内存图
5、String(字符串创建)
a.以" "方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份
b.通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中
6、ArrayList的remove会删除下标
7、static内存机制
8、static访问注意事项
a.静态方法只能访问静态的成员,不可以直接访问实例成员
b.实例方法可以访问静态的成员,也可以访问实例成员
c.静态方法中是不可以出现this关键字的
9、建议工具类的构造器私有化处理
10、接口注意事项
a.接口不能创建对象
b.一个类实现多个接口,多个接口中有同样的静态方法不冲突
c.一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的
d.一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可
e.一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承
11、所有的类都直接或间接继承java.lang.Object类
12、为什么StringBuilder比String类拼接字符串更高校
13、 解决浮点型运算精度失真问题:BigDecimal b = BigDecimal.valueOf(0.1)
14、JDK8新增日期类
a.LocalTIme、LocalDate、LocalDateTime
b.Instant 时间戳
c.DateTimeFormatter 格式化
d.Duration 计算时间间隔、Period 计算日期间隔
e.ChronoUnit 可用于在单个时间单位内测量一段时间,相当于一个很全的工具类
15、Collection集合特点
List系列:添加的元素是有序、可重复、有索引
a.ArrayList、LinekdList:有序、可重复、有索引
Set系列:添加的元素是无序、不重复、无索引
a.HashSet:无序、不重复、无索引;LinkedHashSet:有序、不重复、无索引
b.TreeSet:按照大小默认升序排列、不重复、无索引
16、各种数据结构的特点和作用
a.队列:先进先出,后进后出
b.栈:后进先出,先进后出
c.数组:内存连续区域,查询快,增删慢
d.链表:元素是游离的,查询慢,首尾操作极快
e.二叉树:永远只有一个根节点,每个节点不超过2个子节点的树
f.查找二叉树:小的左边,大的右边,但是可能树很高,查询性能变差
g.平衡查找二叉树:让树的高度差不大于1,增删改查都提高了
h.红黑树(就是基于红黑规则实现了自平衡的排序二叉树)
17、List实现类的底层原理
a.ArrayList底层是基于数组实现的,根据索引查询元素快,增删相对慢
b.LinkedList底层基于双链表实现的,查询元素慢,增删首尾元素是非常快的
18、HashSet 1.7版本原理解析:数组+链表+(结合哈希算法)
HashSet 1.8版本原理解析
19、TreeSet自定义排序规则,例:Set<Apple> apples = new TreeSet<((o1, o2) -> Double.compare(o2.getPrice(), o1.getPrice())); (Apple对象省略)
20、Collection使用场景
a.如果希望元素可以重复,又有索引,索引查询要快?用ArrayList集合,基于数组的
b.如果希望元素可以重复,又有索引,增删首尾操作快?用LinkedList集合,基于链表的
c.如果希望增删改查都快,但是元素不重复,无序,无索引?用HashSet集合,基于哈希链表的
d.如果希望增删改查都快,但是元素不重复,有序,无索引?用LinkedHashSet集合,基于哈希表和双链表
e.如果要对对象进行排序?用TreeSet集合,基于红黑树。后续也可以用List集合实现排序
21、List自定义排序规则,例:Collections.sort(apples, (o1, o2) -> Double.compare(o1.getPrice(), o2.getPrice()); (Apple对象省略)
22、java.utils.Collections 是集合工具类,用来对集合进行操作,其中两种排序方法如下:
a.public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。
b.public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序。
23、不可变集合:调用of方法生成
24、IO流体系
25、commons-io框架
26、线程
27、线程的6种状态
新建状态(NEW)-就绪状态(RUNNABLE)-阻塞状态(BLOCKED)-等待状态(WAITING)-计时状态(TIMED_WAITING)-结束状态(TERMINATED)
28、
29、反射的作用-绕过编译阶段为集合添加数据
-反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以为集合存入其他任意类型的元素的。
-泛型只是在编译阶段可以约束集合只能操作某种数据类型,在编译成class文件进入运行阶段的时候,其真实类型都是ArrayList了,泛型相当于被擦除了。
例子:
ArrayList<Integer> list = new ArrayList<>(); list.add(12); list.add(23); Class c = list.getClass(); Method add = c.getDeclaredMethod("add", Object.class); boolean rs = (boolean) add.invoke(list, "哈哈"); System.out.println(rs); System.out.println(list); ArrayList list1 = list; list1.add("吼吼"); list1.add(false); System.out.println(list);
30、注解
31、动态代理
32、