java基础
2021-07-16 09:36:45 77 举报
AI智能生成
java的基本学习路线
作者其他创作
大纲/内容
环境配置
java简介
java的由来、特点
java语言的特点
java运行机制
java是跨平台的
java回收机制(GC)
java语法基础
java的注释规范
注释的分类
单行注释
使用//或/* */
多行注释
使用/*
*注释内容
*/
*注释内容
*/
文档注释
使用/**
* @author 用户名
*/
* @author 用户名
*/
注释的规范
java的数据类型
基本数据类型
数值型
byte(1)
short(2)
int(4)
long(8)
浮点型
float(4)
double(8)
字符型
char(2)
布尔型
boolean
引用数据类型
类、对象、数组等
运算符
算数运算符
+ 、- 、*、 /、 %、 +=、 -= 、/= 、%=
位运算
&、|、^、<<、>>、>>>
自增、自减运算
++、--
比较运算
> 、< 、==、 !=、 >=、 <=
逻辑运算符
&&、||、!
条件运算符
条件表达式?值1:值2
程序结构
顺序结构
从上到下,从左到右依次执行
选择结构
if - else
switch - case -default
break
continue
循环结构
for
while
方法和函数
形参与实参的概念
形参
函数定义时给定的参数叫做形参
实参
调用调用时传递给函数的参数叫做实参
按值传递
按地址(引用)传递
函数的重载
变长(可变)参数
数组
一维数组
二维数组
多维数组
面向对象
什么是面向对象?
面向对象映射的是人类社会的思维方式
类
是对对象的规范定义
面向对象的核心
抽象
从同类个体中将群体的共性进行抽象
封装
将抽象的结果封装到类中
继承
父类角度:
继承是使用已有的类派生新的类的一种方法途径;
子类角度:
子类通过继承获取父类允许子类获得的属性和行为一种途径;
继承是使用已有的类派生新的类的一种方法途径;
子类角度:
子类通过继承获取父类允许子类获得的属性和行为一种途径;
多态
多态是父类和子类之间的一种关系;
对于同名的行为子类展示或者扩展出来的与父类不同的行为状态;
对于同名的行为子类展示或者扩展出来的与父类不同的行为状态;
访问修饰符
private
私有的,本类可访问
默认
本包的类可访问
protected
受保护的,本包的类及其子类可访问
public
公开的,任何类都可访问
构造方法
构造方法与普通方法的区别
构造方法名是固定的,是以类名作为构造方法名的;
构造方法没有返回值;
构造方法可以使用访问控制修饰符进行修饰,这和普通方法一样;
构造方法不能被其他的普通方法调用;
构造方法可以被 new 操作符调用;
构造方法之间可以调用,但是调用方式是通过 this(实参列表) 来进行调用;this必须放在第一行;
构造方法可以重载;
构造方法的语法规则
每个类如果没有明确的显式写出构造方法,则由jvm默认提供一个不带参数的默认的构造方法;
如果一个类有显式的构造方法,则jvm默认提供的构造方法就失效了,如果还想使用默认的构造方法,则需要手动显式写出;
构造方法不能继承,不能重写,没有多态;
继承下的构造方法的语法:
子类在执行构造方法的同时会递归的调用父类的构造方法;【在执行子类的构造方法之前会把所有父类的构造方法执行一遍】
子类的构造方法默认调用的是父类的默认的构造方法,所以要求被调用的父类提供默认的构造方法;
如果子类需要显式的调用父类的构造方法,则需要使用 super(实参列表) 来调用父类的构造方法;
super(实参列表)要求必须防在第一行;
变量
成员变量
在类中定义的变量
局部变量
在方法中定义的变量
关键字
this
指代当前类的实例对象
this. 表示当前类的;用于区分被同名局部变量覆盖成员变量;
this(实参列表) 表示调用当前类的构造方法;【只能在第一行】
super
指代当前类的父类的实例对象
super. 表示当前类的父类的属性和行为;用于区分被子类同名方法重写的父类方法;
super(实参列表) 表示调用当前类的父类的构造方法;【只能在第一行】
static
静态的
静态在jvm中是常驻内存的
非静态语句块在类每次new时都会执行,并且是在构造方法之前执行的;静态语句块只执行一次
静态的生命周期:从加载jvm开始到jvm运行结束为止
static可以修饰:类、方法、成员变量、语句块
语句块:使用 {} 标识的代码块; 主要作用是改变作用域范围
static只能修饰成员变量不能修饰局部变量
static修饰的静态方法或者静态语句块只能调用静态的对象【静态成员变量、静态的方法】
非静态的方法可以调用静态的和非静态的对象;也就是非静态方法可以调用所有的
static修饰的成员变量和方法可以类名直接调用;所以静态的成员变量也叫作类变量
static修饰的语句块叫做静态语句块,静态语句块只执行一次;作用:用于类加载的一些初始化操作;有点类似于构造方法的初始化作用
final
最终的
final可以修饰类、方法、变量(成员变量和局部变量)
修饰类表示该类不可被继承,防止继承滥用的
final修饰的方法表示这个方法不能够被子类重写,防止通过重写修改父类来修改父类方法的逻辑
final修饰的变量表示这个变量的值一旦被初始化,则不允许再进行修改
基本类型:不允许在修改【值不能改】
引用类型:不允许修改引用地址,存储空间中的内容可以修改; 【地址的值不能改;地址的存储空间内容可以改】
static final 修饰的成员变量 叫做静态常量 ;
命名规则 字母全部大写用_分割;
静态常量要求声明时就要进行初始化;
命名规则 字母全部大写用_分割;
静态常量要求声明时就要进行初始化;
abstract
抽象的
abstract可以修饰类、方法;
abstract修饰的类叫做抽象类;修饰的方法叫做抽象方法;
abstract修饰的类叫做抽象类;修饰的方法叫做抽象方法;
interface
接口
接口是一组行为规范的定义;
接口是一种特殊的抽象类;
特殊到需要使用interface重新定义;
接口是一种特殊的抽象类;
特殊到需要使用interface重新定义;
支持多继承(实现)
类多继承接口:一个类【class】可以继承多个接口;使用implements关键进行继承【实现】
接口多继承接口:一个接口可以继承多个接口;使用extends关键字进行继承;
Util
Object
Object是java中顶级类,是所有类的直接或间接父类
【所有类都会包含这些方法】
hashCode() clone() equals() toString() wait() notify()
hashCode() clone() equals() toString() wait() notify()
String
String适用于处理字符串的工具类,字符串本质上是一个字符的数组
String字符串一旦初始化之后,长度是不可以改变的;
String字符串具有数组的特性,可以使用下标进行访问;
掌握字符串和字符之间的异同点;
掌握字符换工具类中常用的方法;
String字符串具有数组的特性,可以使用下标进行访问;
掌握字符串和字符之间的异同点;
掌握字符换工具类中常用的方法;
包装类
采用面向对象的方式对基本数据类型进行封装
byte-->Byte
short-->Short
int-->Integer
long-->Long
float-->Float
double-->Double
char-->Character
boolean-->Boolean
内部类
定义在类内部的类就是内部类
成员内部类
定义在成员变量位置上的内部类就是成员内部类
静态内部类★★★
使用static修饰的成员内部类就是静态内部类
局部内部类
定义在局部变量位置上的内部类就是局部内部类
匿名内部类★★★
没有变量名的局部内部类就是匿名内部类,也是定义在局部变量位置上的内部类
java对象的执行顺序:
(1)执行父类的静态语句块;
(2)执行子类的静态语句块;(3)执行父类非静态语句块;
(4)执行父类的构造方法;
(5)执行子类的非静态语句块
(6)执行子类的构造方法
静态语句块首先执行;【只执行一次】
非静态语句块;【每次new都执行,且在构造方法之前】
构造方法;
非静态语句块;【每次new都执行,且在构造方法之前】
构造方法;
==与equals:
==
== 判断两个变量的地址引用是否相同; 地址引用相同内容一定相同;反之,不一定;
== 操作符是判定的两个对象是否相等;【基本类型是值相等;对象类型是通过判定地址引用是否相同来判定相等,也就是判定是否为同一个存储地址】
equals
equals是用来判定内容是否相同;
equals方法一般是用来判定两个对象的内容是否相同
其他的子类必须对继承自Objcet类的equals方法进行重写;重写的目的是 让equals方法具有判断内容相等的功能;例如 String类,重写了equals方法;
异常
Throwable
Error
错误,是jvm在运行过程中不应该发生的严重问题;一般会影响jvm继续运行,且是不可控的
Exception
异常,是jvm在运行过程可以捕获的可以处理可以预料一些问题;一般异常不会影响jvm继续运行;但是异常需要进行捕获处理
异常的分类
根据发生的时机分为
编译时异常
发生在编译阶段的异常;要求必须进行异常处理,否则无法通过编译; 也叫作 检查性异常
运行时异常
发生在运行阶段的异常;不要求进行异常处理,【一般通过良好的编程规范来进行规避】,数组越界异常、除数为0异常、空指针异常
根据异常是否需要进行预处理
检查性异常
要求在编码时必须进行显式的异常处理;也叫作 编译时异常
非检查型异常
在编码是不要求记性显式的异常处理,但是在运行时会发生的异常; 也叫作 运行时异常
集合
Collection接口
List接口
ArrayList类
类似数组,查改快,增删慢
LinkedList类
类似链表,增删快,查改慢
Set接口
HashSet类
使用hash散列存储,没有下标,无法使用下标遍历
继承了Iterator接口,可以使用迭代器进行遍历
继承了Iterator接口,可以使用迭代器进行遍历
是不可重复的,无序列的,没有排序,可以为null
TreeSet类
使用红黑树【平衡二叉树】存储,没有下标,所以无法使用下标遍历;
继承了Iterator接口,可以使用迭代器进行遍历
继承了Iterator接口,可以使用迭代器进行遍历
是不可重复的,无序列的,排序的,不能为null
LinkedHashSet类
使用双向链表存储,没有下标,无法使用下标遍历
继承了Iterator接口,可以使用迭代器进行遍历
继承了Iterator接口,可以使用迭代器进行遍历
是不可重复的,有序列的,没有排序,可以为null
Map接口
HashMap类
使用hash散列存储,没有下标,所以无法使用下标遍历
键值是不可重复的,无序列的,没有排序的,可以为null
TreeMap类
使用红黑树【平衡二叉树】存储,没有下标,所以无法使用下标遍历
键值是不可重复的,无序列的,排序的,不能为null
LinkedHashMap类
使用双向链表存储,没有下标,所以无法使用下标遍历
键值是不可重复的,有序列的,没有排序的,可以为null
Collections工具类
Comparable
使某个类实现接口后具有比较的功能,通过重写comparaTo(Object o)方法
Comparator
可以通过匿名类实现接口或者创建一个比较类来实现接口,通过重写compara(Object o1,Object o2)方法实现
泛型
泛型是对某一类未知的类型的统称
在集合中使用泛型来表示集合可以处理的类型范围
要求在能够明确泛型的地方一定要使用明确的泛型,可以减少不必要的非检查性异常
IO流
字节流
InputStream
FileInputStream
ObjectInputStream
OutputStream
FileOutputStream
ObjectOutputStream
字符流
Reader
InputStreamReader
Writer
OutputStreamWriter
多线程
实现的方式
继承Thread类
实现Runnable接口
程序
代码+数据
进程
在cpu中动态执行的程序就是进程;进程是操作系统分配资源的基本单位;【像一条流水线】
线程
是微进程;一个进程中包含若干个线程,线程之间是共享进程的资源的;线程是cpu资源调度的基本单位;【像流水线上的工人】
线程状态
五态图
新建线程
可运行状态(就绪)
阻塞
运行状态
死亡(销毁)
七态图
新建线程
实现Runnable接口
继承Thread类
可运行状态
调用start方法
阻塞
调用sheep方法
调用join方法
运行状态
等待队列
调用wait方法
锁池
调用notify、notifyAll方法
死亡(销毁)
死锁
形成的条件
(必须全部满足才能形成死锁)
(必须全部满足才能形成死锁)
互斥条件;【资源具有互斥性,只能有一个进程使用】
不可剥夺条件;【一旦持有之后,不会主动放弃】
请求与保持条件;【先申请一部分资源,再继续申请后续资源】
循环等待条件;【资源不足时可以继续等待】
不可剥夺条件;【一旦持有之后,不会主动放弃】
请求与保持条件;【先申请一部分资源,再继续申请后续资源】
循环等待条件;【资源不足时可以继续等待】
解锁
只需打破其中一条即可
将内存中某个时间的快照值写出到文件进行保存;
对象流要求必须进行序列化才能处理
对象流要求必须进行序列化才能处理
序列化 (Serialization)
序列化:是一组信息在经过IO、网络等传输过程中,对这组信息进行编码,保证接收方可以按照编码的进行重新组合该对象【反序列化】
需要进行序列化的对象需要实现一个 Serializable 接口,该接口没有方法,只是一个标识性接口,告诉jvm要进行序列化处理
瞬时(transient)
一般和序列化进行搭配使用;
作用就是使用transient修饰的属性,不会被序列化;
在序列化过程中,该属性的值会使用默认值代替;
作用就是使用transient修饰的属性,不会被序列化;
在序列化过程中,该属性的值会使用默认值代替;
网络编程
反射
JDBC
0 条评论
下一页