Java七十四: Java基础/核心知识总结 — — “Java千字文”
Java基础/核心知识总结 — — “Java千字文”
Java基础/核心知识笔记终于完结,从Java语言诞生到jdk8新特性,共计74篇博文,43幅自制插图,35张表格,7万6千余字,4600余行亲测代码,包括14篇IDEA使用笔记,可作为小伙伴们Java学习路上的一套随手参考资料。
Java学习笔记地址 ,尚硅谷Java入门视频教程 ,狂神说Java (特别感谢尚硅谷宋红康老师和狂神说秦疆老师)
Java系
语法系:
① 面向对象:语法框架
② 异常处理:保驾护航
空间系:
时间系:
① 日期类:时间戳
传输系:
控制系:
① 多线程:多条生产线忙而不乱,有条不紊
② 泛型/注解:各生产资料的条形码
③ 反射:不停产的检修
一、面向对象
修饰符
权限修饰符
private :作用域为类内,体现封装性
缺省:作用域为包内
protected:作用域为异包子类(加强继承类间的连接深度,同时规避其它类)
public:作用域为整个工程
static
决定了结构的加载时间和生命周期
final
决定了能否被继承、被重写、被赋值
方法重写
继承:通过方法重写,实现子类对父类的扩展延伸
多态:通过继承关系下的类型转换,实现父类对不同子类重写方法的调用 ,体现出多态性、动态性
二、异常
throw和throws的区别
- throw:在方法体内手动抛出一个异常,相当于提示,触发后终止代码执行
- throws:处理异常的一种方式,在方法头处抛出,调用该方法的时候再用try-catch-finally结构处理
抓和抛
抛:
① 一种时手动抛出(throw);
② 一种是程序生成
抓:
① 一种是延迟处理 throws;
② 一种是即时处理 try-catch-finally
三、多线程
四种创建线程的方式
- 继承Thread类,重写run方法,缺点时继承后就不能继承其它类了,有局限性
- 实现Runnable接口,重写run方法,有利于多个线程间操做共享数据,建议使用,而且Thread本身也实现了Runnable接口,
- 实现Callable接口,重写call方法,jdk5.0后引入,有返回值,可借助FutureTask类的相关方法获得返回值等更多功能
- 使用线程池,在项目中最常用,避免了多线程线程不断建立撤销造成的资源浪费,可显著提升效率
三种解决线程同步安全问题的方式
- 在run方法内将同步代码块写入同步监视器中
- run方法内调用在方法头声明synchronized的同步方法,同步方法内写同步代码块
- 在run方法内的同步代码块两端加ReentrantLock类的对象调用的lock/unlock方法形成的同步锁
线程间的通信
- 就是在同步代码块处配合使用wait和notify/notifyAll,促使多线程在调用同步代码块时形成某种规律或协议
四、字符串
底层存储
String内部定义了final char[ ] value 用于存储字符串数据,在底层以字符数组的形式存储,但该数组被声明为final,不可改变。
存储方式
赋值方式
- 普通变量赋值,在常量池中
- **new String(“新建字符串”)**方式,创建了两个对象,一个在堆中,一个在常量池中
连接方式
- 常量 + 常量 = 常量
- 常量 + 变量 = 变量
- 调用intern方法,结果为常量
字符串与字符数组 / 字节数组间的转换
toCharArray( ) / getBytes( ) 字符转成其它格式
new String(字符数组名 / 字节数组名(后可以补充指定字符集名))
StringBuffer 和 StringBuilder
- 底层的存储结构字符数组是可变的,并且可自动扩容,
- 执行效率极高,建议使用StringBuilder
正则表达式
五、时间类
jdk8前后的时间类的交替更新
主要功能 jdk8之前 jdk8之后(java.time包) 日期/毫秒数 Date(分为java.util.Date/java.sql.Date) Instant 获取/修改 Calendar LocalDateTime/LocalDate/LocalTime 格式化/解析 SimpleDateFormat DateTimeFormat
六、注解
- 自定义注解,关键是要掌握jdk中的四种元注解,定义自定义注解的生命周期、作用范围、是否可被javadoc提取及继承性。
- 框架 = 注解 + 反射 + 设计模式
七、集合(处理内存中的数据)
- 集合,进行多对象的统一存储,更贴近Java的面向对象的语法框架,根据不同应用场景的需求,对集合进行了三种分类:List(动态数组)、Set(高中的”集合“)、Map(高中的”函数“),并提供了增删改查、数组集合互转、遍历等公用方法
- List接口:主要是ArrayList、LinkedList两个实现类,并掌握其底层添加数据的原理,以及针对List集合中数据特有的有序性,提供了针对索引值操作操作的系列方法。
- Set接口:主要是HashSet、LinkedSet两个实现类,其底层添加数据原理与HashMap有关,需要参HashMap的源码分析,针对Set集合中数据的无序、不可重复性,所有的对象性数据的对应类必须重写equals方法和hashCode方法
- Map类型的集合中是以(k,v)的形式存储的,难点在于理解其添加数据时的源码的三种情况,但是在理解其源码后,对以后做项目有很多好处,可以自己尝试去读源码,可以参考源码的思想编程。因为Map的key是通过Set存储的,所以作为其key的对象数据对应的类必须重写hashCode方法和equals方法
八、I/O流(处理永久性存储数据)
- 用于设备间的数据传输,传输操作以“ 流 ” 的形式进行。此处的数据是指永久性存储数据(硬盘中的数据)。
- 对于面向对象框架来说,其各种数据都是封装在对象当中的,对象实现了 Serializable接口后就可以以字节的形式通过网络传输的
九、网络编程
- 目的就是通讯,实现计算机间的数据交换。实现方式:确定IP和端口号,然后根据需求用对应的协议进行传输
- TCP网络编程通过三次握手和四次挥手实现了数据的可靠传输
- UDP网络编程是一种广播形式通讯,只是大量发出数据,至于对方有没有接收不去确定
十、反射与动态代理
- 反射机制允许程序在执行期间借助ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
- 动态代理设立了一个统一的入口,可以动态的确定调用哪个对象的哪个结构
小结
目前,JDK已经更新到十七,但实际项目中广泛使用的仍然是jdk8,或者是jdk11。关于JDK的新特性,及从多线程开始的Java核心知识的具体使用,会在学习完数据库、JavaWeb、框架后再进行深度编写。
欢迎大家对博文留言指正
2021年12月27日
Java七十四: Java基础/核心知识总结 — — “Java千字文”相关推荐
- invader的java学习第四天基础篇
invader的java学习第四天基础篇(持续更新中-) 一.类型转换 自动转换(数值之间在进行四则运算时,数据类型会自动向大类型靠拢) byte num=10; short a=num; Syste ...
- Java第十四课——相声和群口相声
Java第十四课--相声和群口相声 Java第十四课--相声和群口相声 一.聊天界面优化 二.增加发送内容的样式 三.群聊雏形 相声,我们知道有一个逗哏一个捧哏,也就是一唱一和,也就相当于双向的交流. ...
- 【Microsoft Azure 的1024种玩法】七十四.五分钟在Azure Virtual Machines中快速部署一套软件项目管理及自动构建工具
[简介] Apache Maven由 Apache 软件基金会所提供的一个软件项目管理及自动构建工具,Maven 为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程 ...
- Day74~75_Flink(一)Flink基础核心知识
第一讲 Flink基础核心知识 课程大纲 课程内容 学习效果 掌握目标 Flink概述 Flink概述 了解 Flink开发环境 Flink开发环境 掌握 Flink入门实战 Flink入门实战 掌握 ...
- 七十四、Python | Leetcode数字系列(下篇)
@Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- java class文件 代码_java_基础——用代码编译.java文件+加载class文件
java_基础--用代码编译.java文件+加载class文件 java_基础--用代码编译.java文件+加载class文件 [简单编译的流程] package com.zjm.www.test; ...
- 打怪升级之小白的大数据之旅(七十四)<初识Kafka>
打怪升级之小白的大数据之旅(七十四) 初识Kafka 引言 学完Flume之后,接下来将为大家带来Kafka相关的知识点,在工作中,Kafka和Flume经常会搭配使用,那么Kafka究竟是什么呢?让 ...
- 达芬奇密码 第七十四章
达芬奇密码 第七十四章[@more@] 第七十四章 "你怎么不说话呢?"兰登注视着"猎鹰者"号机舱对面的索菲说. "太累了.还有这首诗,我怎么也看不明 ...
- x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode()
x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode() 宏块编码函数x264_macroblock_encode()是完成变换与量化的主要函数,而x264_m ...
最新文章
- puppet企业架构部署
- 新书《活用UML-需求分析高手》 序
- DOM方式动态加载数据
- 66. Plus One
- boost::intrusive::value_traits用法的测试程序
- StarUML 破解方法2.X(转)
- glup node 内存不够_Redis:内存被我用完了!该怎么办?
- 作者:李文静,山东农业信息中心助理农经师。
- 阿里云mysql本地可以连接数据库_本地电脑连接阿里云服务器上搭建的MySQL数据库...
- eclipse svn插件安装_PHP 安装
- td自动换行:设置table布局固定,td根据设定宽度自动换行
- Linq之动态条件(1)
- #pragma的常用方法讲解(转载)
- Python+Selenium+Edge浏览器安装与简单运行(2/2)
- 基于Cocos2d-x学习OpenGL ES 2.0之多纹理
- 设置虚拟机dns服务器域名,域名服务器DNS的设置实验
- 从excel文件xlsx中特定单元格中提取图片
- 为什么打印还要另存为_为什么打印时会出现另存为保存文件
- 【Linux】Linux下挂载新硬盘(图形化使用Ubuntu自带Disks)
- SAP mbew 标准价和移动平均价
热门文章
- Animoca Brands 和 Cube 娱乐的合资公司 Anicube 将进行 K-pop NFT 空投
- 三分钟带你实现Word内容和图片插入和替换
- c++狼人杀v1.1
- 服务器负载均衡是什么意思?
- oracle impdp目录,ORACLE的impdp和expdp命令
- 华为手机怎么打开php文件夹,64GB内存的华为手机空间不足,点下这4个文件夹,轻松释放10个G...
- img图片下面出现莫名的下边距
- Excel批量合并单元格
- 黑洞Blackhole :在Mac上控制苹果和安卓手机
- iOS 应用分发平台