第18章_JDK8-17新特性(上)
第18章_JDK8-17新特性(上)
本章专题与脉络
1. Java版本迭代概述1.1 发布特点(小步快跑,快速迭代)
发行版本
发行时间
备注
Java 1.0
1996.01.23
Sun公司发布了Java的第一个开发工具包
Java 5.0
2004.09.30
①版本号从1.4直接更新至5.0;②平台更名为JavaSE、JavaEE、JavaME
Java 8.0
2014.03.18
此版本是继Java 5.0以来变化最大的版本。是长期支持版本(LTS)
Java 9.0
2017.09.22
此版本开始,每半年更新一次
Java 10.0
2018.03.21
Java 11.0
2018.09.25
JDK安装包取消独立JRE安装包,是长期支持版本(LTS)
Java 12.0
2019.03.19
…
…
Java17.0
2021.09
发布Java 17.0,版本号也称为21.9,是长期支持版本(LTS)
…
…
Java19.0
2022.09
发布Java19.0,版本号也称为22.9。
从Java ...
第17章_反射机制
第17章_反射机制
本章专题与脉络
1. 反射(Reflection)的概念1.1 反射的出现背景Java程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致。 Object obj = new String(“hello”); obj.getClass()
例如:某些变量或形参的声明类型是Object类型,但是程序却需要调用该对象运行时类型的方法,该方法不是Object中的方法,那么如何解决呢?
解决这个问题,有两种方案:
方案1:在编译和运行时都完全知道类型的具体信息,在这种情况下,我们可以直接先使用instanceof运算符进行判断,再利用强制类型转换符将其转换成运行时类型的变量即可。
方案2:编译时根本无法预知该对象和类的真实信息,程序只能依靠运行时信息来发现该对象和类的真实信息,这就必须使用反射。
1.2 反射概述Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
加载完类之后,在堆内存的方 ...
第16章_网络编程
第16章_网络编程
本章专题与脉络
1. 网络编程概述Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。
Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
1.1 软件架构
C/S架构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、美团app、360安全卫士等软件。
B/S架构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐等。
两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。
1.2 网络基础
计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源 ...
第15章_File类与IO流
第15章_File类与IO流
本章专题与脉络
1. java.io.File类的使用1.1 概述
File类及本章下的各种流,都定义在java.io包下。
一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
File对象可以作为参数传递给流的构造器。
想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
1.2 构造器
public File(String pathname) :以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
public File(String parent, String child) :以parent为父路径,child为子路径创建File对象。
pu ...
第14章_数据结构与集合源码
第14章_数据结构与集合源码
本章专题与脉络
1. 数据结构剖析我们举一个形象的例子来理解数据结构的作用:
战场:程序运行所需的软件、硬件环境
敌人:项目或模块的功能需求
指挥官:编写程序的程序员
士兵和装备:一行一行的代码
战术和策略:数据结构
上图:没有战术,打仗事倍功半
上图:有战术,打仗事半功倍
总结:简单来说,数据结构,就是一种程序设计优化的方法论,研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,目的是加快程序的执行速度、减少内存占用的空间。
具体研究对象如下:
1.1 研究对象一:数据间逻辑关系数据的逻辑结构指反映数据元素之间的逻辑关系,而与数据的存储无关,是独立于计算机的。
集合结构:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系。集合元素之间没有逻辑关系。
线性结构:数据结构中的元素存在一对一的相互关系。比如:排队。结构中必须存在唯一的首元素和唯一的尾元素。体现为:一维数组、链表、栈、队列
树形结构:数据结构中的元素存在一对多的相互关系。比如:家谱、文件系统、组织架构
图形结构:数据结构中的元素存在多 ...
第13章_泛型(Generic)
第13章_泛型(Generic)
本章专题与脉络
1. 泛型概述1.1 生活中的例子
举例1:中药店,每个抽屉外面贴着标签
举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签
举例3:家庭厨房中:
Java中的泛型,就类似于上述场景中的标签。
1.2 泛型的引入在Java中,我们在声明方法时,当在完成方法功能时如果有未知的数据需要参与,这些未知的数据需要在调用方法时才能确定,那么我们把这样的数据通过形参表示。在方法体中,用这个形参名来代表那个未知的数据,而调用者在调用时,对应的传入实参就可以了。
受以上启发,JDK1.5设计了泛型的概念。泛型即为“类型参数”,这个类型参数在声明它的类、接口或方法中,代表未知的某种通用类型。
举例1:
集合类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK5.0之前只能把元素类型设计为Object,JDK5.0时Java引入了“参数化类型(Parameterized type)”的概念,允许我们在创建集合时指定集合元素的类型。比如:List<String>,这表明该L ...
第12章_集合框架
第12章_集合框架
本章专题与脉络
1. 集合框架概述1.1 生活中的容器
1.2 数组的特点与弊端
一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。
另一方面,使用数组存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
数组在内存存储方面的特点:
数组初始化以后,长度就确定了。
数组中的添加的元素是依次紧密排列的,有序的,可以重复的。
数组声明的类型,就决定了进行元素初始化时的类型。不是此类型的变量,就不能添加。
可以存储基本数据类型值,也可以存储引用数据类型的变量
数组在存储数据方面的弊端:
数组初始化以后,长度就不可变了,不便于扩展
数组中提供的属性和方法少,不便于进行添加、删除、插入、获取元素个数等操作,且效率不高。
数组存储数据的特点单一,只能存储有序的、可以重复的数据
Java 集合框架中的类可以用于存储多个对象,还可用于保存具有映射关系的关联数组。
1.3 Java集合框架体系Java 集合可分为 Collection 和 Map 两大体系:
Collection ...
第11章_常用类和基础API
第11章_常用类和基础API
本章专题与脉络
1. 字符串相关类之不可变字符序列:String1.1 String的特性
java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如"hello" )都可以看作是实现此类的实例。
字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
字符串String类型本身是final声明的,意味着我们不能继承String。
String对象的字符内容是存储在一个字符数组value[]中的。"abc" 等效于 char[] data={'h','e','l','l','o'}。
123456789//jdk8中的String源码:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The va ...
第10章_多线程
第10章_多线程
本章专题与脉络
我们之前学习的程序在没有跳转语句的情况下,都是由上至下沿着一条路径依次执行。现在想要设计一个程序,可以同时有多条执行路径同时执行。比如,一边游戏,一边qq聊天,一边听歌,怎么设计?
要解决上述问题,需要使用多进程或者多线程来解决。
1. 相关概念1.1 程序、进程与线程
程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。如:运行中的QQ,运行中的网易音乐播放器。
每个进程都有一个独立的内存空间,系统运行一个程序即是一个进程从创建、运行到消亡的过程。(生命周期)
程序是静态的,进程是动态的
进程作为操作系统调度和分配资源的最小单位(亦是系统运行程序的基本单位),系统在运行时会为每个进程分配不同的内存区域。
现代的操作系统,大都是支持多进程的,支持同时运行多个程序。比如:现在我们上课一边使用编辑器,一边使用录屏软件,同时还开着画图板,dos窗口等软件。
线程(thread):进程可进一步细化为线程,是程序内部的一条 ...
第09章_异常处理
第09章_异常处理
本章专题与脉络
1. 异常概述1.1 什么是生活的异常男主角小明每天开车上班,正常车程1小时。但是,不出意外的话,可能会出现意外。
出现意外,即为异常情况。我们会做相应的处理。如果不处理,到不了公司。处理完了,就可以正常开车去公司。
1.2 什么是程序的异常在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式问题,读取文件是否存在,网络是否始终保持通畅等等。
异常 :指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。
异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。
代码逻辑错误,只是没有得到想要的结果,例如:求a与b的和,你写成了a-b
1.3 异常的抛出机制Java中是如何表示不同的异常情况,又是如何让程序员得知,并处理异常的呢?
Java中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出(throw)。然后程序员可以捕获(catch ...