JavaSE阶段知识树
2020-04-22 10:29:53 142 举报
AI智能生成
JavaSE阶段概括所有知识内容体系的思维导图。共给大家一起学习进步!作者:Ziph
作者其他创作
大纲/内容
【开篇】Java的概述与环境搭建
初识Java
Java的由来
Java之父的介绍
詹姆斯·高斯林(高司令)
Java的语言特点
面向对象(使用计算机模拟现实世界,解决现实问题,贴近人类思维)
简单(相对C、C++,不易造成内存溢出、减少代码量、代码可读性强)
跨平台(操作系统、服务器、数据库)
Java的运行机制
编译执行
将源文件编译成机器码,一次编译,多次执行
执行效率高,不可跨平台
解释执行
将源文件被一行一行解释,一行一行执行。不同操作系统具备不同的解释器
执行效率低,可以跨平台
先编译、再解释
将源文件编译成字节码文件(平台中立文件.class),再将字节码文件进行解释执行
Java的设计理念:Write Once Run Anywhere
Java的环境搭建
名词的了解
JVM(Java Virtual Machine)虚拟机:使用软件在不同操作系统中,模拟相同的环境
JRE(Java Runtime Environment)运行环境:包含JVM和解释器,完整的Java运行环境
JDK(Java Development Kit)开发环境:包含JRE + 类库 + 开发工具包(编译器和调试工具)
配置环境变量
DOS操作
Windows键 + R——快捷键呼出运行窗口——再输入cmd并回车打开DOS命令窗口
常用的DOS命令
更换盘符:d:
查看当前目录下的文件及文件夹:dir
进入文件夹:cd 文件夹的名字
返回上一级目录:cd ..
清空屏幕:cls
删除文件:del 文件名
删除文件夹:rd 文件夹名称
退出:exit
第一个应用程序
编译:javac 源文件名称 .java
运行:java 类名
注意:Java语言严格区分大小写,写错一点,就有可能会造成程序的报错!
Class(类)的介绍
同一个源文件中可以定义多个类。编译后,每个类都会产生独立的.class文件。一个类中,只能有一个主函数,每一个类都可以有自己的主函数
public 修饰的类称为公开类,要求类名必须与文件名称完全相同
一个源文件中,只有有一个公开类
Package(包)的介绍
作用: 类似于文件夹,用于管理字节码文件(.class)文件
语法: package 包名;
位置: 必须写在源文件的第一行
带包编译: javac -d . 源文件名称.java(自动生成目录结构)
采用域名倒置的规则: www.ziph.cn -> cn.ziph.www
例如: cn.com.company.department.group.project.module.XxxClass(最后一个就是字节码文件名了)
Java的语言规范
书写格式
层级之间必须缩进(Tab:一个制表位),并且一行只写一句代码
代码注释
单行注释://
多行注释:/* */
文档注释:(生成外部文档:javadoc -d . HelloWorld.java):/** 文档注释 **/
注意:注释不参与编译
标识符命名问题
语法规定
可以由:字母、数字、_ 、$ 组成,但不能以数字开头
不能与关键字、保留字重名
约定俗成
望文生义、见名知义
类名由一个或多个单词组成,每个单词首字母大写
函数名、变量名由一个或多个单词组成,首单词首字母小写,拼接词首字母大写,被称为“驼峰式”
包名全小写,只可以使用特殊字符“ . ”,并且不能以“ . ” 开头或结尾
常量全大写,多个单词用_连接
【一】Java语言基础
变量
变量:计算机内存中的一块存储空间,是存储数据的基本单位
组成部分
数据类型
变量名
值
声明方式
先声明,再赋值
数据类型 变量名; 变量名 = 值;
声明并赋值
多个同类型变量的声明与赋值
数据类型
数据类型分类
基本数据类型
整数
byte
1个字节
-2^7 ~ 2^7-1
short
2个字节
-2^15 ~ 2^15-1
int
4个字节
-2^31 ~ 2^31-1
long
8个字节
-2^63~2^63-1
小数
float
double
布尔
boolean
字符
char
转义字符\
\'
\"
\\
\t
\n
引用数据类型
字符串
String
数组
对象
数据类型的转换
自动类型转换
两种类型相互兼容,目标类型大于源类型
强制类型转换
两种类型相互兼容,目标类型小于源类型
转换规则
整数长度足够,数据完整
整数长度不够,数据截断
小数强转整数,数据截断
字符整数互转,数据完整
保证正整数转换成字符,可以正常显示
boolean不可与其他类型转换
自动类型提升
运算符介绍
算术运算符
+ - * / % ++ --
赋值运算符
= += -= *= /= %=
关系运算符
> < >= <= == !=
逻辑运算符
&& || !
三元运算符(三目运算符)
布尔表达式 ? 结果1 : 结果2
表达式
控制台输入操作的介绍
【二】Java选择结构与分支结构
概念:根据已知条件进行落尽判断,满意条件后执行相应的操作
选择结构
基本if选择结构
if else选择结构
多重if选择结构
相互排斥,有一个选项为true,其他选择不再执行,适用于区间判断
多重if else选择结构
可以在一个选择结构当中,嵌套另一个选择结构,语法正确、格式正确的情况下,可以任意组合
分支结构
switch分支结构
可判断的byte、short、int、char、String(JDK7+)
switch中的多个case取值不可以相同
switch有自动向下贯穿的特性,如需要在某个选项执行后中止,需要追加break关键字
局部变量的介绍
概念
声明在函数内部的变量,必须先赋值再使用
作用范围
从定义行开始到所在的代码块结束
注意:多个变量在重合的作用范围内,不可出现重名
【三】Java循环结构
概念:通过某个条件,重复的执行一段逻辑代码
循环的组成部分
初始部分
循环条件
循环操作
迭代部分
循环结构分类
while循环
首次即有入口条件,先判断、再执行,适用于循环次数明确的情况
do while循环
首次没有入口条件,先执行、再判断,适用于循环次数不明确的情况
for循环
首次即有入口条件,先判断、再执行,适用于循环次数明确的情况
嵌套循环
在一个完整的循环结构中,嵌套另一个循环结构
外层控制循环次数,内层控制单次循环操作
流程控制语句介绍
break;
中止、跳出:switch分支结构、循环结构
continue;
结束本次、进入下一次循环
【四】Java函数
函数的介绍
概念:实现特定功能的一段代码,可反复使用
定义的位置
定义在类的内部,与main函数并列
函数的调用
函数名();
函数调用时,优先执行函数内部代码,结束后,返回到函数调用处,继续向下执行。
回值与返回值类型
定义返回值类型:基本数据类型、引用数据类型、void
return value; //应用在具有返回值类型的函数中,函数结束时,伴有返回值,返回到函数调用处
return; //应用在返回值类型为void的函数中,遇到return时,直接结束函数
经验:一个函数制作一件事(单一职能原则)
函数的好处:减少冗余、提高复用性、可读性、可维护性、方便分工合作
递归的介绍
实际开发中,递归可以解决一些具有既定规律的问题
当需要解决的问题可以拆分成若干个小问题,大问题、小问题的解决方法相同,有特定的规律,函数自己调用自己
设置有效的出口条件,避免无穷递归
【五】Java数组
概念:一组连续的存储空间,存储多个相同数据类型的值
数据类型[] 数组名 = new 数据类型[长度]; // int [] a = new int[5];
数组的组成概述
访问元素时,需要通过“下标”(从0开始,依次+1,自动生成)
访问的语法:数组名[下标]; //存:a[0] = 10; 取:a[0]
下标的范围:0 ~ 数组的长度-1
数组的复制
手工循环完成逐一的赋值
System.arraycopy(原数组,起始位置,新数组,起始位置,长度)
java.util.Arrays.copyOf(原数组,新长度)
基本类型变量与引用类型变量的区别
基本数据类型中,存储的是“值”
引用数据类型中,存储的是“地址”
数组的排序
冒泡排序法
相邻的两个值比较大小,互换位置
选择排序法
固定值与其他值比较大小,互换位置
JDK排序法
java.util.Arrays.sort(数组名);
二维数组
一维数组中的一维数组,数组中的元素,还是数组
创建语法:数据类型[][] 数组名 = new 数据类型[高维下标][低维下标]
访问元素的方式:数组名[高维下标][低维下标]
高维数组中保存了低维数组的地址,访问 数组[0] 等价于访问低维数组的地址
【六】Java面向对象
程序:程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集合
对象:一切客观存在的事物都是对象,万物皆对象。对象一定具有自己的特征和行为
类的抽取:在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分
类:定义了对象应具有的特征和行为,类是对象的模板
对象:拥有多个特征和行为的实体,对象是类的实例
【七】Java面向对象三大特性
封装
概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限
由private修饰为私有的属性 + 提供set/get公共的访问方法
封装之后,不可直接访问属性,仅可通过get/set公共访问进行访问,可以在方法内部对数据进行过滤
继承
程序中的继承,是类与类之间特征和行为的一种赠与或获得
构成继承关系的要求:两个类之间必须满足"is a"的关系
选择父类:功能越精细、重合点越多,越接近直接父类
父类的抽象:在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用
定义子类时:class 子类 extends 父类
产生继承关系后,子类可以使用父类中的属性和方法,也可以定义子类独有的属性和方法
Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加
不可继承:父类构造方法、父类中由private修饰的成员、父子类不在同一个包时由default修饰的成员
访问修饰符:private、default、protected、public
方法的覆盖:父类提供的方法无法满足子类需求、可在子类中定义相同的方法进行覆盖
覆盖的要求:方法名、参数表、返回值都与父类完全相同,仅访问修饰符可以与父类相同或更宽
方法覆盖后,执行时,优先执行子类覆盖后的版本
super关键字
使用" super. "的形式在子类中访问父类的属性和方法(解决属性遮蔽、方法覆盖调用)
使用" super() "、" super(实参) "在子类构造方法的首行,调用父类的构造方法,如果没有显示书写,则默认调用父类无参构造super()
同一个子类的构造方法中,super()、this()不可同时存在
构建子类对象时,先构建父类对象
多态的介绍
概念:父类引用指向子类对象,从而产生多种形态
父类引用仅可调用父类中所声明的属性和方法,不可调用子类独有的属性和方法
实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行父类中的方法
多态应用场景一:使用父类作为方法形参实现多态,使方法参数的类型更为宽泛
多态应用场景二:使用父类作为方法返回值实现多态,使方法可以返回不同的子类对象
【八】Java三个修饰符
abstract
概念:似是而非的,像却又不是,具备某种对象的特征,但不完整
抽象类:不能new对象,但可以声明引用
抽象方法:只有方法声明,没有方法实现。(必须包含在抽象类中)
经验:抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
子类继承抽象类后,必须覆盖父类中所有的抽象方法,否则,子类还是抽象类
static
概念:static可以修饰属性和方法,即为静态属性(类属性)、静态方法(类方法)
静态成员是全类所有对象共享的额成员,全类中只有一份,不因创建多个对象而产生多份,不必创建对象,可直接通过类名访问
静态方法:允许直接访问静态成员,不能直接访问实例成员,不允许使用this、super关键字;可以继承,不能覆盖,没有多态
类加载:JVM首次使用某个类时,通过CLASSPATH查找该类的.class文件,并将.class文件中对类的描述信息加载到内存中,进行保存
加载时机:创建对象、创建子类对象、访问静态成员、Class.forName("全限定名")
静态代码块:类加载的执行环节,执行地位和静态属性一致,只有首次加载类时,需要执行,仅一次。可为静态属性赋值,或程序必要的初始行为
final
概念:最后的,不可更改的
final修饰类:此类不能被继承
final修饰方法:此方法不能被覆盖,意为最终方法,不支持子类以覆盖的形式修改
final修饰变量: 此变量值不能被改变(常量)
局部变量:显示初始化
实例变量:实现初始化、动态代码快、构造方法
静态常量:显示初始化、静态代码块
基本数据类型常量:值不可变
引用数据类型常量:地址不可变
【九】Java接口
概念:接口是一种能力和约定
经验:Java单继承,当父类的方法种类无法满足子类需求时,可实现接口来扩充子类的能力
接口支持多实现,可为类扩充多种能力
规范:任何类在实现接口时,必须覆盖接口中所有的抽象方法,否则此类还是抽象类
实现接口中的抽象方法时,访问修饰符必须是public
接口应用同父类引用一样,可以声明为应用,指向实现类对象,仅可调用接口中所声明的方法,无法调用实现类独有方法
接口引用指向实现类对象时,需要调用实现类独有方法,可强转回实现类本身类型,进行调用
【十】Java内部类与常用类
内部类
概念: 在一个类的内部再定义一个完整的类
特点
编译之后可生成独立的字节码文件
内部类可直接访问外部类的私有成员,而不破坏封装
可为外部类提供必要的内部功能组件
分类
成员内部类
在类的内部定义,与实现变量、实例方法同级别的类
外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
当外部类、内部类存在重名属性时,会优先访问内部类属性
成员内部类不能定义静态成员
静态内部类
不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
成员内部类不能定义静态成员
局部内部类
定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
局部内部类访问外部类当前方法中的局部变量时,因无法保证变量的声明周期与自身相同,变量必须修饰为final
限制类的使用范围
匿名内部类
没有类名的局部内部类(一切特征都与局部内部类相同)
必须继承一个父类或者一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
Object类
超类、基类,所有类的直接或间接父类,位于继承树的最顶层
任何类,如没有书写extends显示继承某个类,都默认为直接继承Object类,否则为间接继承
Object类型可以存储任何对象
作为参数,可以接受任何对象
作为返回值,可以返回任何对象
包装类
概念:基本数据类型所对应的引用数据类型
转型方法
Number父类提供的,常用作自动拆箱
parseXXX() 通过String进行包装类对象的机构件
valueOf()
通过基本类型构建
通过String构建
注意:在使用字符串构建数字型包装类型对象时,要保证类型的兼容,否则产生NumberFormatException
JDK5之后,提供自动装箱、拆箱,简化使用包装类的编程过程
自动装箱时,会调用valueOf方法,Byte、Short、Integer、Long,四种整数包装类型都提供了对应的cache缓冲区,将常用的256个数字提 前创建对象并保存在数组中,实现复用
String类
字符串是常量,创建之后不可改变
字符串字面值存储在字符串池中,可以共享
StringBuilder
可变字符串,JDK5发布,线程不安全,运行效率快
StringBuffer
可变字符串,JDK1.0发布,线程安全,运行效率慢
BigDecimal
精确计算浮点数
Java.math.BigDecimal
add、subtract、multiply、divide(需要确定保留的精度、除不尽时的四舍五入策略)
【十一】Java集合
概念:对象的容器,存储对象的对象,可代替数组
集合是容器的工具,定义个对多个对象进行操作的常用方法
位置:java.util.*
Collection体系集合
Collection父接口:代表一组任意的对象,无序、无下标
List接口
有序、有下标、元素可以重复
ArrayList
数组结构存储,查询快,增删慢
JDK1.2发布,运行效率快,线程不安全
Vector
数组结构存储,查询快,增删慢
JDK1.0发布,运行效率慢,线程安全
LinkedList
链表结构存储,增删快,查询慢
Set接口
无序、无下标、元素不可重复
HashSet
基于HashCode实现元素不重复
当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入
TreeSet
基于排列顺序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过CompareTo方法确定是否为重复元素
Map体系集合
Map父接口的特点:存储一对数据(Key-Value),无序、无下标,键不可重复,值可重复
HashMap【重点】
JDK1.2版本提供,线程不安全,运行效率快
允许用null作为Key或Value
HashMap底层是链表数组
Hashtable
JDK1.0版本提供,线程安全,运行效率慢
不允许用null作为Key或Value
Properties
Key和Value都是String类型
setProperty();
getProperty();
配置文件的读取
SortedMap
TreeMap
可以对Key做自动排序
自定义类型需要实现Comparable
【十二】Java异常
概念:程序在运行过程中出现的特殊情况
异常的分类
Throwable:可抛出的,一切错误或异常的父类,位于java.lang包中
Error:JVM、硬件、执行逻辑错误,不能手动处理
Exception:程序在运行和配置过程中产生的问题,可处理
RuntimeException:运行时异常,可处理,可不处理
CheckedException:受查异常,必须处理
异常的产生
自动抛出异常:当程序在运行时遇到不符合规范的代码或结果时,会产生异常
手动抛出异常:throw new 异常类型("实际参数");
产生异常结果:相当于遇到return一句,导致程序因异常而终止
异常的传递
按照方法的调用链反向传递,如果始终没有处理异常,最终会由JVM进行默认处理(打印堆栈跟踪信息)
受查异常:throws 异常类型 声明异常,修饰在方法参数列表后端
由于运行时异常,是可处理可不处理,所以无需声明异常
异常的处理
try{}catch(Exception e){}finally{}
常见异常处理结构
try{} catch(Exception e){}
try{} catch(){}
catch(){}
catch(){}
try{} catch(){}
finally{}
finally{}
try{} catch(){}
catch(){}
finally{}
catch(){}
finally{}
try{} finally{}
注意:多重catch情况下,异常捕获的顺序要遵循从子(小)到父(大)的顺序,父类异常在最后
自定义异常
需要继承Exception或Exception的子类,常用RuntimeException
无参构造方法
String message参数的有参构造方法
异常方法覆盖
方法名、参数列表、返回值类型必须和父类相同
子类的访问修饰符和父类相同或比父类更宽
子类中的方法,不能抛出比父类更宽泛的异常,可以抛出更多的异常
【十三】Java多线程
进程
真正运行时的程序,称之为进程
单核CPU下,在任何时间点上,只能运行一个程序
宏观并行,微观串行
线程
轻量级进程
计算机内存中的一块存储空间,是存储数据的基本单位
程序中的一个顺序控制流程,也是CPU的基本调度单位
进程可以由单个或多个线程组成,彼此间完成不同的工作,交替执行。称为多线程
JVM是一个进程,当中默认包含了主线程(Main)
线程的组成
CPU时间片
运行数据
栈空间
存储线程需要使用的局部变量,每个线程都拥有独立的栈
堆空间
存储线程需要使用的对象,多个线程可以共享堆中的对象
线程的创建
extends Thread
implements Runnable
线程的状态(基本)
线程的常见方法
休眠 sleep(long millis);
放弃 yield();
结合 join();
线程的状态(等待)
线程安全
当多线程并发访问临界资源时,如果破坏原子操作,可能会造成数据不一致
临界资源:共享资源(同一对象),一次仅允许一个线程使用,才能保证其正确性
原子操作:不可分割的多步操作,被视作为一个整体,其顺序和步骤不可打乱或缺省
synchronized
同步代码块 synchronized(临界资源对象)
同步方法
线程的状态(阻塞)
线程的通信
等待 wait();
通知(唤醒)
notify();
在等待队列中随机唤醒一个线程
notifyAll();
唤醒等待队列中所有的线程
线程池
线程容器,可以设定线程分配的数量上限
预先创建线程对象,存入池中,并实现重用池中的线程对象
避免频繁的创建、销毁
Executor 顶级接口
ExecutorService 线程池接口
Executors 工厂类
newFixedThreadPool(int nThreads);手动固定线程池的数量
newCachedThreadPool();动态数量线程池
Callable<V>接口
public V call() throws Exception{}
JDK5加入,与Runnbale类似,都代表了一个线程任务
call方法,具有泛型返回值,可以声明异常
Future接口
异步接收ExecutorService.submit();方法返回的结果。包含了call方法的返回值
V get();以阻塞形式等待Future中的异步处理结果(call的返回值)
Lock锁
JDK5加入,与synchronized比较,显示定义,结构更灵活
void lock();上锁
void unlock();释放锁
boolean tryLock();//尝试获取锁
ReentrantLock
重入锁
最多持有2147483648把锁
ReadWriteLock
ReentrantReadWriteLock
一种支持一写多读的同步锁,读写分离,可分配读锁、写锁
多次分配读锁,多个读操作可以并发执行
互斥规则
写-写:互斥,阻塞
读-写:互斥,读阻塞写、写阻塞读
读-读:不互斥、不阻塞
在读操作远远大于写操作的环境中,可在保障线程安全的情况下,提高运行效率
线程安全的集合
Collections中的工具方法
以synchronized开头的方法
JDK1.2提供,接口统一、维护性高,但是性能没有提升,均以synchronized实现
CopyOnWriteArrayList
线程安全的ArrayList,加强版读写分离
写有锁,读无锁,读写之间不阻塞,优于读写锁
写入时,先copy一个容器副本,再添加新元素,最后替换引用
CopyOnWriteArraySet
底层是CopyOnWriteArrayList
在添加新元素时,使用addIfAbsent();添加,遍历数组
如果重复了,则抛弃掉副本(复制的数组)
ConcurrentHashMap
JDK1.7
初始容量16段(Segment),使用分段锁设计
不对整个Map加锁,而是对每个Segment加锁
当多个对象存入同一个Segment时,才需要互斥
最理想的状态为16个对象分别存入16个Segment,并行数量16个
JDK1.8
Queue 队列
FIFO(先进先出)
抛出异常的方法
返回特殊值的方法(推荐)
ConcurrentLinkedQueue
线程安全、可高效读写的队列,高并发下性能最好的队列
采用的是无锁、CAS比较交换算法
V:要更新的变量 E:预期值 N:新值
只用当V==E时,V=N,否则标识已被更新过,则取消当前操作
BlockingQueue 阻塞队列
put 阻塞添加
take 阻塞移除
可用于解决消费者、生产者的问题
ArrayBlockingQueue
数组结构实现,有界队列,手工固定上限
LinkedBlockingQueue
链表结构实现,无界队列(默认上限是Integer.MAX_VALUE)
【十四】IO框架
流
内存与存储设备之间传输数据的通道
流的分类
按方向
输入流
将存储设备中的内容读入到内存中
输出流
将内存中的内容写入到存储设备中
按单位
字节流
以字节为单位,可以读写所有的数据
字符流
以字符为单位,只能读写文本数据
按功能
节点流
具有实际传输数据的读写功能
过滤流
在节点流的基础之上增强功能
字节流
InputStream 字节输入流
OutputStream 字节输出流
字节节点流
FileInputStream
FileOutputStream
字节过滤流
BufferedInputStream
BuffereOutpuStream
对象字节流
ObjectOutputStream
ObjectInputStream
使用对象字节流传输对象的过程,称为序列化、反序列化
必须实现Serializable接口
必须保证其属性均可序列化
transient修饰的属性为临时属性,不参与序列化
读取到文件末尾:java.io.EOFException
字符编码
UTF-8
针对Unicode可变长度字符编码
GB2312
简体中文
GBK
简体中文、扩展
当编码方式和解码方式不一致时,会出现乱码
字符流
Reader
Writer
字符节点流
FileWriter
FileReader
字符过滤流
BufferedWriter
BufferedReader
PrintWriter
桥转换流
InputStreamReader
OutputStreamWriter
可将字节流转换为字符流
可设置字符的编码方式
File类
代表了物理盘符中的一个文件或文件夹
FileFilter接口
对获取文件进行过滤,满足条件的文件或文件夹才能保存下来
【十五】网络编程
网络
由点和线构成的,标识诸多对象间的相互联系
计算机网络
为实现资源共享和信息传递,通过通信线路连接起来的若干主机(Host)
互联网:点与点相连
万维网:端与端相连
物联网:物与物相连
网络编程:让计算机与计算机之间建立连接、进行通信
网络模型:OSI开放式系统互联
第一层:物理层(双绞线、光导纤维)
第二层:链路层(MAC)
第三层:网络层(IP地址)
第四层:传输层(TCP、UDP)
第五层:会话层(断点续传)
第六层:表示层(对数据转换以及加密)
第七层:应用层(HTTP、FTP、SMTP)
TCP/IP模型
一组用于实现网络互联的通信协议,分为了四层
第一层:网络接口层(以太网、ADSL)
第二层:网络层(分配地址、传送数据,IP协议)
第三层:传输层(文本数据,协议是TCP、UDP协议)
第四层:应用层(负责传送最终形态的数据,协议为HTTP、FTp)
TCP/UDP
TCP:传输控制协议 是一种面向连接、可靠的、基于字节流的传输层通信协议数据大小无限制
建立连接的过程需要三次握手
断开连接的过程需要四次挥手
UDP:用户数据报协议 是一种无连接的传输层协议,提供面向事务的简单、不可靠信息传送服务每个包的大小是64KB
IP
互联网协议/网际协议地址
分配给互联网设备的唯一数字标签(标识)
IPV4
4字节32位整数,分成4段8位的二进制数 255.255.255.255
IPV6
16字节128位整数,分成8段十六进制整数 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FF
回环地址
127.0.0.1 localhost
Port端口
在通信实体上进行网络通讯的程序的唯一标识
0~65535
常用端口
Mysql:3306
Oracle:1521
Tomcat:8080
Web服务器:80
FTP服务器:21
InetAddress
标识互联网协议(IP)地址对象。封装了与该IP地址对象相关的所有信息,并提供常用方法
无法直接创建对象,构造方法私有化。需要通过getXXX方法来获得
基于TCP的网络编程
Socket
是网络中的一个通信节点
分为客户端Socket和服务端ServerSocket
通信要求:IP地址+端口号
【十六】反射
类的对象: 基于某个类new出来的对象,也称为实例对象
类对象
类加载的产物,封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)
获取类对象的方法
通过类的对象,获取类对象
Person p = new Person(); Class c = p.getClass();
通过类名获取类对象
Class c = 类名.class;
通过静态方法获取类对象
Class c = Claa.forName(“包名.类名”);
常见方法
public String getName() //获取类对象名
public Package getPackage() //获取指定包名
public Class<? super T> getSupercalass() //获取父类Class对象
public Class<?>[] getInterfaces() //获取实现的接口
public Field[] getFields() //获取属性
public Method[] getMethods() //获取方法
public Constructor<?>[] getConstructors() //获取构造方法
public T newInstance() //获取对象
设计模式
工厂设计模式
开发中有一个非常重要的原则“开闭原则”,对拓展开放、对修改关闭
工厂模式主要负责对象创建的问题
可通过反射进行工厂模式的设计,完成动态的对象创建
工厂模式分类
创建对象工厂
创建对象并调用方法的工厂
单例设计模式
单例(Singleton): 只允许创建一个该类的对象
方式1: 饿汉式(类加载时创建,天生线程安全)
方式2: 懒汉式(使用时创建,线程不安全,加同步)
方式3: 懒汉式(使用时创建,线程安全)
0 条评论
下一页