java基础复习流水账

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、

  

 

posted @ 2022-06-16 10:33  秦言  阅读(38)  评论(0编辑  收藏  举报