Java基础核心知识总结 — — “Java千字文”

Java基础核心知识总结 — — “Java千字文”,第1张

Java基础/核心知识总结 — — “Java千字文” Java基础/核心知识总结 — — “Java千字文”

Java基础/核心知识笔记终于完结,从Java语言诞生到jdk8新特性,共计64篇博文,43幅自制插图,35张表格,7万6千余字,4600余行亲测代码,还有14篇IDEA使用笔记,可作为小伙伴们Java学习路上的一套随手参考资料。

Java学习笔记地址 ,尚硅谷Java入门视频教程 ,狂神说Java (特别感谢尚硅谷宋红康老师和狂神说秦疆老师)

Java系
  1. 语法系:

    ① 面向对象:语法框架

    ② 异常处理:保驾护航

  2. 空间系:

    ① 字符串:字符仓库

    ② 数组:物以类聚

    ③ 集合:混装仓

  3. 时间系:

    ① 日期类:时间戳

  4. 传输系:

    ① I/O流:规范数据传输方式

    ② 网络编程:数据超时空传输

  5. 控制系:

    ① 多线程:多条生产线忙而不乱,有条不紊

    ② 泛型/注解:各生产资料的条形码

    ③ 反射:不停产的检修

一、面向对象
  1. 修饰符
    • 权限修饰符

      private :作用域为类内,体现封装性

      缺省:作用域为包内

      protected:作用域为异包子类(加强继承类间的连接深度,同时规避其它类)

      public:作用域为整个工程

    • static

      决定了结构的加载时间和生命周期

    • final

      决定了能否被继承、被重写、被赋值

  2. 方法重写

    继承:通过方法重写,实现子类对父类的扩展延伸

    多态:通过继承关系下的类型转换,实现父类对不同子类重写方法的调用 ,体现出多态性、动态性

二、异常
  1. throw和throws的区别
    • throw:在方法体内手动抛出一个异常,相当于提示,触发后终止代码执行
    • throws:处理异常的一种方式,在方法头处抛出,调用该方法的时候再用try-catch-finally结构处理
  2. 抓和抛
    • 抛:

      ① 一种时手动抛出(throw);

      ② 一种是程序生成

    • 抓:

      ① 一种是延迟处理 throws;

      ② 一种是即时处理 try-catch-finally

三、多线程
  1. 四种创建线程的方式
    • 继承Thread类,重写run方法,缺点时继承后就不能继承其它类了,有局限性
    • 实现Runnable接口,重写run方法,有利于多个线程间 *** 做共享数据,建议使用,而且Thread本身也实现了Runnable接口,
    • 实现Callable接口,重写call方法,jdk5.0后引入,有返回值,可借助FutureTask类的相关方法获得返回值等更多功能
    • 使用线程池,在项目中最常用,避免了多线程线程不断建立撤销造成的资源浪费,可显著提升效率
  2. 三种解决线程同步安全问题的方式
    • 在run方法内将同步代码块写入同步监视器中
    • run方法内调用在方法头声明synchronized的同步方法,同步方法内写同步代码块
    • 在run方法内的同步代码块两端加ReentrantLock类的对象调用的lock/unlock方法形成的同步锁
  3. 线程间的通信
    • 就是在同步代码块处配合使用wait和notify/notifyAll,促使多线程在调用同步代码块时形成某种规律或协议
四、字符串
  1. 底层存储

    String内部定义了final char[ ] value 用于存储字符串数据,在底层以字符数组的形式存储,但该数组被声明为final,不可改变。

  2. 存储方式

    字符串值声明在字符串常量池中,在常量池中,不同地址的内存区域内不会存储相同内容的字符串的。

  3. 赋值方式
    • 普通变量赋值,在常量池中
    • **new String(“新建字符串”)**方式,创建了两个对象,一个在堆中,一个在常量池中
  4. 连接方式
    • 常量 + 常量 = 常量
    • 常量 + 变量 = 变量
    • 调用intern方法,结果为常量
  5. 字符串与字符数组 / 字节数组间的转换
    • toCharArray( ) / getBytes( ) 字符转成其它格式

    • new String(字符数组名 / 字节数组名(后可以补充指定字符集名))

  6. StringBuffer 和 StringBuilder
    • 底层的存储结构字符数组是可变的,并且可自动扩容,
    • 执行效率极高,建议使用StringBuilder
  7. 正则表达式

五、时间类
  • jdk8前后的时间类的交替更新

    主要功能jdk8之前jdk8之后(java.time包)日期/毫秒数Date(分为java.util.Date/java.sql.Date)Instant获取/修改CalendarLocalDateTime/LocalDate/LocalTime格式化/解析SimpleDateFormatDateTimeFormat
六、注解
  1. 自定义注解,关键是要掌握jdk中的四种元注解,定义自定义注解的生命周期、作用范围、是否可被javadoc提取及继承性。
  2. 框架 = 注解 + 反射 + 设计模式
七、集合(处理内存中的数据)
  1. 集合,进行多对象的统一存储,更贴近Java的面向对象的语法框架,根据不同应用场景的需求,对集合进行了三种分类:List(动态数组)、Set(高中的”集合“)、Map(高中的”函数“),并提供了增删改查、数组集合互转、遍历等公用方法
  2. List接口:主要是ArrayList、linkedList两个实现类,并掌握其底层添加数据的原理,以及针对List集合中数据特有的有序性,提供了针对索引值 *** 作 *** 作的系列方法。
  3. Set接口:主要是HashSet、linkedSet两个实现类,其底层添加数据原理与HashMap有关,需要参HashMap的源码分析,针对Set集合中数据的无序、不可重复性,所有的对象性数据的对应类必须重写equals方法和hashCode方法
  4. Map类型的集合中是以(k,v)的形式存储的,难点在于理解其添加数据时的源码的三种情况,但是在理解其源码后,对以后做项目有很多好处,可以自己尝试去读源码,可以参考源码的思想编程。因为Map的key是通过Set存储的,所以作为其key的对象数据对应的类必须重写hashCode方法和equals方法
八、I/O流(处理永久性存储数据)
  1. 用于设备间的数据传输,传输 *** 作以“ 流 ” 的形式进行。此处的数据是指永久性存储数据(硬盘中的数据)。
  2. 对于面向对象框架来说,其各种数据都是封装在对象当中的,对象实现了 Serializable接口后就可以以字节的形式通过网络传输的
九、网络编程
  1. 目的就是通讯,实现计算机间的数据交换。实现方式:确定IP和端口号,然后根据需求用对应的协议进行传输
  2. TCP网络编程通过三次握手和四次挥手实现了数据的可靠传输
  3. UDP网络编程是一种广播形式通讯,只是大量发出数据,至于对方有没有接收不去确定
十、反射与动态代理
  1. 反射机制允许程序在执行期间借助ReflectionAPI取得任何类的内部信息,并能直接 *** 作任意对象的内部属性及方法。
  2. 动态代理设立了一个统一的入口,可以动态的确定调用哪个对象的哪个结构
小结
  • 目前,JDK已经更新到十七,但实际项目中广泛使用的仍然是jdk8,或者是jdk11。关于JDK的新特性,及从多线程开始的Java核心知识的具体使用,会在学习完数据库、JavaWeb、框架后再进行深度编写。

  • 欢迎大家对博文留言指正

    2021年12月27日

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5683929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存