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

Java基础/核心知识笔记终于完结,从Java语言诞生到jdk8新特性,共计74篇博文,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
    获取/修改 Calendar LocalDateTime/LocalDate/LocalTime
    格式化/解析 SimpleDateFormat DateTimeFormat

六、注解

  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日

Java七十四: Java基础/核心知识总结 — — “Java千字文”相关推荐

  1. invader的java学习第四天基础篇

    invader的java学习第四天基础篇(持续更新中-) 一.类型转换 自动转换(数值之间在进行四则运算时,数据类型会自动向大类型靠拢) byte num=10; short a=num; Syste ...

  2. Java第十四课——相声和群口相声

    Java第十四课--相声和群口相声 Java第十四课--相声和群口相声 一.聊天界面优化 二.增加发送内容的样式 三.群聊雏形 相声,我们知道有一个逗哏一个捧哏,也就是一唱一和,也就相当于双向的交流. ...

  3. 【Microsoft Azure 的1024种玩法】七十四.五分钟在Azure Virtual Machines中快速部署一套软件项目管理及自动构建工具

    [简介] Apache Maven由 Apache 软件基金会所提供的一个软件项目管理及自动构建工具,Maven 为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程 ...

  4. Day74~75_Flink(一)Flink基础核心知识

    第一讲 Flink基础核心知识 课程大纲 课程内容 学习效果 掌握目标 Flink概述 Flink概述 了解 Flink开发环境 Flink开发环境 掌握 Flink入门实战 Flink入门实战 掌握 ...

  5. 七十四、Python | Leetcode数字系列(下篇)

    @Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  6. java class文件 代码_java_基础——用代码编译.java文件+加载class文件

    java_基础--用代码编译.java文件+加载class文件 java_基础--用代码编译.java文件+加载class文件 [简单编译的流程] package com.zjm.www.test; ...

  7. 打怪升级之小白的大数据之旅(七十四)<初识Kafka>

    打怪升级之小白的大数据之旅(七十四) 初识Kafka 引言 学完Flume之后,接下来将为大家带来Kafka相关的知识点,在工作中,Kafka和Flume经常会搭配使用,那么Kafka究竟是什么呢?让 ...

  8. 达芬奇密码 第七十四章

    达芬奇密码 第七十四章[@more@] 第七十四章 "你怎么不说话呢?"兰登注视着"猎鹰者"号机舱对面的索菲说. "太累了.还有这首诗,我怎么也看不明 ...

  9. x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode()

    x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode() 宏块编码函数x264_macroblock_encode()是完成变换与量化的主要函数,而x264_m ...

最新文章

  1. puppet企业架构部署
  2. 新书《活用UML-需求分析高手》 序
  3. DOM方式动态加载数据
  4. 66. Plus One
  5. boost::intrusive::value_traits用法的测试程序
  6. StarUML 破解方法2.X(转)
  7. glup node 内存不够_Redis:内存被我用完了!该怎么办?
  8. 作者:李文静,山东农业信息中心助理农经师。
  9. 阿里云mysql本地可以连接数据库_本地电脑连接阿里云服务器上搭建的MySQL数据库...
  10. eclipse svn插件安装_PHP 安装
  11. td自动换行:设置table布局固定,td根据设定宽度自动换行
  12. Linq之动态条件(1)
  13. #pragma的常用方法讲解(转载)
  14. Python+Selenium+Edge浏览器安装与简单运行(2/2)
  15. 基于Cocos2d-x学习OpenGL ES 2.0之多纹理
  16. 设置虚拟机dns服务器域名,域名服务器DNS的设置实验
  17. 从excel文件xlsx中特定单元格中提取图片
  18. 为什么打印还要另存为_为什么打印时会出现另存为保存文件
  19. 【Linux】Linux下挂载新硬盘(图形化使用Ubuntu自带Disks)
  20. SAP mbew 标准价和移动平均价

热门文章

  1. Animoca Brands 和 Cube 娱乐的合资公司 Anicube 将进行 K-pop NFT 空投
  2. 三分钟带你实现Word内容和图片插入和替换
  3. c++狼人杀v1.1
  4. 服务器负载均衡是什么意思?
  5. oracle impdp目录,ORACLE的impdp和expdp命令
  6. 华为手机怎么打开php文件夹,64GB内存的华为手机空间不足,点下这4个文件夹,轻松释放10个G...
  7. img图片下面出现莫名的下边距
  8. Excel批量合并单元格
  9. 黑洞Blackhole :在Mac上控制苹果和安卓手机
  10. iOS 应用分发平台