Java基础/核心知识笔记终于完结,从Java语言诞生到jdk8新特性,共计64篇博文,43幅自制插图,35张表格,7万6千余字,4600余行亲测代码,还有14篇IDEA使用笔记,可作为小伙伴们Java学习路上的一套随手参考资料。
Java学习笔记地址 ,尚硅谷Java入门视频教程 ,狂神说Java (特别感谢尚硅谷宋红康老师和狂神说秦疆老师)
Java系- 语法系:
① 面向对象:语法框架
② 异常处理:保驾护航
- 空间系:
① 字符串:字符仓库
② 数组:物以类聚
③ 集合:混装仓
- 时间系:
① 日期类:时间戳
- 传输系:
① I/O流:规范数据传输方式
② 网络编程:数据超时空传输
- 控制系:
① 多线程:多条生产线忙而不乱,有条不紊
② 泛型/注解:各生产资料的条形码
③ 反射:不停产的检修
- 修饰符
-
权限修饰符
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 获取/修改CalendarLocalDateTime/LocalDate/LocalTime 格式化/解析SimpleDateFormatDateTimeFormat
- 自定义注解,关键是要掌握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方法
- 用于设备间的数据传输,传输 *** 作以“ 流 ” 的形式进行。此处的数据是指永久性存储数据(硬盘中的数据)。
- 对于面向对象框架来说,其各种数据都是封装在对象当中的,对象实现了 Serializable接口后就可以以字节的形式通过网络传输的
- 目的就是通讯,实现计算机间的数据交换。实现方式:确定IP和端口号,然后根据需求用对应的协议进行传输
- TCP网络编程通过三次握手和四次挥手实现了数据的可靠传输
- UDP网络编程是一种广播形式通讯,只是大量发出数据,至于对方有没有接收不去确定
- 反射机制允许程序在执行期间借助ReflectionAPI取得任何类的内部信息,并能直接 *** 作任意对象的内部属性及方法。
- 动态代理设立了一个统一的入口,可以动态的确定调用哪个对象的哪个结构
-
目前,JDK已经更新到十七,但实际项目中广泛使用的仍然是jdk8,或者是jdk11。关于JDK的新特性,及从多线程开始的Java核心知识的具体使用,会在学习完数据库、JavaWeb、框架后再进行深度编写。
-
欢迎大家对博文留言指正
2021年12月27日
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)