JAVA知识点(尚硅谷宋红康老师的b站授课自我整理)

#Java整理全面笔记:

  1. 基本数据类型自动类型转化:
  2. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java

  3. 标识符的命名规范:
  4. 尚硅谷MySQL高级篇课件 尚硅谷java老师_尚硅谷MySQL高级篇课件_02

  5. 逻辑与、或
    a & b 、 a && b
    &:碰到条件a是错的不停止,继续算b
    &&:碰到条件a是错的停止,不计算b
    a | b 、a || b:同上面逻辑与
  6. 基本数据类型和包装类
    自动装箱:
    Integer i = 1000,这里自动装箱,相当于Integer i = new Integer(1000)
    但是对于-128到127之前频繁使用是有缓存cache数组,所以自动装箱的时候不会去new对象
    自动拆箱:
    Integer i = new Integer(1000)
    int num = i.intValue()相当于int num = i
    ps:Integer.parseInt()和Integer.valueOf()返回值类型不同,前者是返回int后者是返回int的包装类Integer。因为String是一个类,String只有valueOf没有前者
  7. 二维数组的使用
  8. 尚硅谷MySQL高级篇课件 尚硅谷java老师_尚硅谷MySQL高级篇课件_03

  9. 类中成员属性的赋值顺序
  10. 尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_04

  11. final修饰符
  12. 尚硅谷MySQL高级篇课件 尚硅谷java老师_尚硅谷MySQL高级篇课件_05

  13. ps:final修饰对象,对象里面的非final属性可以修改,但是该对象不可以修改
  14. 尚硅谷MySQL高级篇课件 尚硅谷java老师_实例化_06

  15. static修饰符
  16. 尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_07


  17. 尚硅谷MySQL高级篇课件 尚硅谷java老师_实例化_08

  18. abstract修饰符
  19. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_09

  20. ps:abstract不能修饰私有方法、静态方法(因为私有方法不能重写),静态方法不可以用非静态方法重写,子父类静态方法同名同参数不是多态,也不是重写。
    抽象类不可以实例化,但是可以使用多态
  21. interface接口
  22. 尚硅谷MySQL高级篇课件 尚硅谷java老师_实例化_10


  23. 尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_11


  24. 尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_12

  25. 内部类
    内部类作为成员内部类时可以用static关键字修饰,外部类只能用缺省和public修饰
  26. 尚硅谷MySQL高级篇课件 尚硅谷java老师_实例化_13


  27. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_14

  28. 上面因为static会预先加载不需要实例化,非静态成员内部类需要先实例化外部类静态内部类不可以通过实例化外部类来new,只能直接new。因为静态内部类的生命周期在用完就结束了,如果不用实例new会出现多个,这时候就不唯一了。
  29. 尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_15

  30. 上面局部变量num是自动补上了final修饰词,所以不能够在局内部内的方法内修改num值。
  31. 自定义异常类
  32. 尚硅谷MySQL高级篇课件 尚硅谷java老师_List_16

  33. 必须要有那个序列号
  34. 操作线程方法
    wait()释放锁、sleep()不会释放锁
  35. 尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_17

  36. 创建线程的四种方式
    创建多线程有四种方式:Thread、Runnable、Callable(FutureTask)、线程池(Executors.newFixedThreadPool、ExecutorService、execute、sumbit、shutdown)
  37. 尚硅谷MySQL高级篇课件 尚硅谷java老师_List_18


  38. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_19

  39. 死锁的方式synchronized和lock
    lock:ReentrantLock lock = new ReentrantLock()
  40. 判断String的字符串(变量、常量)
  41. 尚硅谷MySQL高级篇课件 尚硅谷java老师_尚硅谷MySQL高级篇课件_20

  42. 补充:final修饰的类,用该类定义变量不是常量!例如String:final String a和String a前者是常量后者是变量
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkyYqAql-1660468893974)(leanote://file/getImage?fileId=62bd58062b63c044bf000006)]
  43. StringBuffer、StringBuilder
    StringBuffer、StringBuilder可以append(null)但是new的话会抛出空指针异常,new StringBuffer(null)这样会运行时报错。
  44. 增强for循环
    普通for修改的是该数组对象,增强for是创建了新的局部变量s
  45. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_21

  46. 集合Collection
    1、StringBuffer的底层数组容量默认16;Stringbuffer(线程安全)和StringBuilder(线程不安全)扩容机制是不够放大2倍再加2,还不够直接变成需要的长度。
    2、ArrayList底层默认容量10;ArrayList扩容机制是不够变成1.5倍,还不够直接变成需要的长度,最后如果超过给的一个略小于整型范围的值,则给整型最大值。如果还不行则会抛出异常。jdk8以后,Arraylist首先不会初始化,在使用到的时候,才会给出容量10
    3、这两者扩容的时候会创建新数组,把旧数据赋值上去。
    4、vector扩容机制是放大2倍,默认长度是10
  47. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_22

  48. ArrayList的clone方法自我研究:
    1、clone方法是object类里面的一个权限为protected的方法,如果需要使用需要实现Cloneable接口,List没有实现Cloneable的接口,所以这里不能够使用多态。例如ArrayList arrayList = (ArrayList) list.clone();
    2、ArrayList本身是深拷贝,而里面的数组元素是浅拷贝,这意味着里面成员变量没有开辟新的内存空间,而ArrayList是开辟了的。这样如果改变原先的ArryList里面某一个位置指向的对象,是不会影响克隆出来的ArrayList。
  49. 尚硅谷MySQL高级篇课件 尚硅谷java老师_实例化_23

  50. HashSet、HashMap
    HashSet插入判断是否相同先看hashcode()再看equals();TreeSet插入判断只看重写的compareTo()方法。
  51. 尚硅谷MySQL高级篇课件 尚硅谷java老师_尚硅谷MySQL高级篇课件_24


  52. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_25

  53. 先判断hashcode(),在看equals()。改内容不会修改hashcode()
  54. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_26

  55. HashMap是扩大两倍容量,默认长度是16
  56. 泛型
    泛型的继承(P572):例如List和List是不具有子父类的关系的。但是List和ArrayList是具有子父类关系的。

尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_27


这里贴上具体的演示情况代码。

尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_28


这里展示子父类泛型继承的关系,是否保留的几种情况。

尚硅谷MySQL高级篇课件 尚硅谷java老师_List_29


尚硅谷MySQL高级篇课件 尚硅谷java老师_开发语言_30

  1. 输入输出流
  2. 尚硅谷MySQL高级篇课件 尚硅谷java老师_java_31

  3. 默认输入流是字节流,如果要用缓冲流的readLine(),则需要用转换流转成字符流。
    输出流也是 字节流,是outputStream的子类。
    数据流只可以操作基本数据类型和String,对象流都可以操作
  4. Lambda
    Lambda表达式只可以操作一个抽象方法的接口,不可以操作抽象类
  5. 一些思考
    optional的jdk11中or方法
    《?extends optional《 ?extends T》〉
    main入口,public class