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

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

#Java整理全面笔记:https://blog.csdn.net/PorkBird/article/details/113666542

  1. 基本数据类型自动类型转化:
    在这里插入图片描述

  2. 标识符的命名规范:

  3. 逻辑与、或
    a & b 、 a && b
    &:碰到条件a是错的不停止,继续算b
    &&:碰到条件a是错的停止,不计算b
    a | b 、a || b:同上面逻辑与

  4. 基本数据类型和包装类
    自动装箱:
    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没有前者

  5. 二维数组的使用

  6. 类中成员属性的赋值顺序
    在这里插入图片描述

  7. final修饰符
    在这里插入图片描述
    ps:final修饰对象,对象里面的非final属性可以修改,但是该对象不可以修改
    在这里插入图片描述

  8. static修饰符
    在这里插入图片描述
    在这里插入图片描述

  9. abstract修饰符
    在这里插入图片描述
    ps:abstract不能修饰私有方法、静态方法(因为私有方法不能重写),静态方法不可以用非静态方法重写,子父类静态方法同名同参数不是多态,也不是重写。
    抽象类不可以实例化,但是可以使用多态

  10. interface接口
    在这里插入图片描述

    在这里插入图片描述

  11. 内部类
    内部类作为成员内部类时可以用static关键字修饰,外部类只能用缺省和public修饰
    在这里插入图片描述
    在这里插入图片描述
    上面因为static会预先加载不需要实例化,非静态成员内部类需要先实例化外部类静态内部类不可以通过实例化外部类来new,只能直接new。因为静态内部类的生命周期在用完就结束了,如果不用实例new会出现多个,这时候就不唯一了。

    上面局部变量num是自动补上了final修饰词,所以不能够在局内部内的方法内修改num值。

  12. 自定义异常类
    在这里插入图片描述必须要有那个序列号

  13. 操作线程方法
    wait()释放锁、sleep()不会释放锁
    在这里插入图片描述

  14. 创建线程的四种方式
    创建多线程有四种方式:Thread、Runnable、Callable(FutureTask)、线程池(Executors.newFixedThreadPool、ExecutorService、execute、sumbit、shutdown)
    在这里插入图片描述
    在这里插入图片描述
    死锁的方式synchronized和lock
    lock:ReentrantLock lock = new ReentrantLock()

  15. 判断String的字符串(变量、常量)

    补充:final修饰的类,用该类定义变量不是常量!例如String:final String a和String a前者是常量后者是变量
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkyYqAql-1660468893974)(leanote://file/getImage?fileId=62bd58062b63c044bf000006)]

  16. StringBuffer、StringBuilder
    StringBuffer、StringBuilder可以append(null)但是new的话会抛出空指针异常,new StringBuffer(null)这样会运行时报错。

  17. 增强for循环
    普通for修改的是该数组对象,增强for是创建了新的局部变量s
    在这里插入图片描述

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

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

  20. HashSet、HashMap
    HashSet插入判断是否相同先看hashcode()再看equals();TreeSet插入判断只看重写的compareTo()方法。
    在这里插入图片描述
    在这里插入图片描述
    先判断hashcode(),在看equals()。改内容不会修改hashcode()
    在这里插入图片描述
    HashMap是扩大两倍容量,默认长度是16

  21. 泛型
    泛型的继承(P572):例如List和List是不具有子父类的关系的。但是List和ArrayList是具有子父类关系的。

在这里插入图片描述
这里贴上具体的演示情况代码。
在这里插入图片描述
这里展示子父类泛型继承的关系,是否保留的几种情况。
在这里插入图片描述
在这里插入图片描述

  1. 输入输出流
    在这里插入图片描述默认输入流是字节流,如果要用缓冲流的readLine(),则需要用转换流转成字符流。
    输出流也是 字节流,是outputStream的子类。
    数据流只可以操作基本数据类型和String,对象流都可以操作

  2. Lambda
    Lambda表达式只可以操作一个抽象方法的接口,不可以操作抽象类

  3. ThreadLocal
    1、每一个线程Thread会自己维护一个threadlocalMap的实例对象,threadlocalMap是threadlocal的静态内部类,这个map不是hashmap,不会以数组+链表的形式存储。
    2、在往threadlocalMap中set对象的时候,存放的key是threadlocal的弱引用,value是我们想放的泛型T 。当前线程可以根据不同的threadlocal实例,计算这个key的哈希放到map中。会不会被回收看当前栈里面是否有强引用指向堆里面的实例。
    3、使用threadlocal一般都用static来声明创建,这样threadlocal就是类的静态变量,不同线程的map里面放的key都可以是同一个threadlocal变量,不需要重复创建。
    thread中threadlocals

  4. 一些思考
    optional的jdk11中or方法
    《?extends optional《 ?extends T》〉
    main入口,public class

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值