语法结构 
1.类 2.属性 3.方法 4.静态代码块  
构造器 
构造函数,构造类的对象,默认隐式,创建对象,先执行父类构造函数,再执行子类构造函数  
父类的super必须在第一行  
代码块 
优先级最高,只执行一次  
普通属性不能在静态方法里不能用  
普通方法既可以使用静态属性也可以使用普通属性,静态方法只能使用静态属性  
运算符 
1.算数运算符 2.逻辑运算符 3.关系运算符 4.位运算符 5.三目运算符 6.赋值运算符  
7.访问运算符  
包与包结构 
package import  
程序执行结构 
-  
顺序   -  
分支(if-else , if-else if , switch-case)   -  
循环(for, while, do-while,iterator,for-each)注:循环最多嵌套3层     
关键字 
true和false是值,不是关键字  
this,super, abstarct, interface ,implements,static…  
static(不可修饰类),静态代码块 (最优先执行,且只执行一次)  
final(终态)(可以修饰类,不能被子类继承,修饰的方法不能被覆写)  
continue(结束当次循环,进行下次循环)  
注释与注解 
单行,多行,文档注释  
面向对象 
封装(私有化成员属性,具有公开的get,set方法)直接操作属性,保证安全性,保证真实性  
继承(单继承,接口可以多继承)将共有的代码提取出来,可以复用,层次关系,先执行父类构造方法,再执行子类构造方法,子类可以有父类实例化  
多态(同一种行为的不同体现)重载,覆盖重写实现,左父右子  
抽象类与接口 
抽象类(方法法体为空,不能用new进行实例化,没有构造方法,通过子类继承)只需声明方法,不需要实现  
接口(适配不同的设备) 方法都是未实现的,都是用子类去实现,接口和实现类没有任何关联的,属性都是常量  
数组 
定义方法  
int [] num[];
int nums[]={1,2,3,4,5,6};
int number[]=new int[]{Integer.MAX_VALUE};
  
集合框架 
Collection  
List(有序序列,可以重复,不可以自己实例化,子类可以代替父类出现)  
ArrayList 添加(add) 全部清除(clear) 移除(remove(0))获取(get(0)) 修改()  
包含(contains) 转换为数组(toArray)  
LinkedList 队首,队尾添加(addFirst,addLast)  
Set(不可以放重复的元素,无序的)  
TreeSet(有序集合) 比较实现comparable  
Map  
HashMap<key,value> 添加(put) 清除(clear) 移除() 键可以为空  
比较器 
Comparator(compare)  
Collections.sort(list,Comparator)  
工具类 
Math.PI.abs(绝对值).ceil(向上取整).round(四舍五入).floor(向下取整)  
Random  
Calendar  
字符串 
String不能被继承,String对象不可变,可以共享,常量  
charAt:返回指定索引处的 char 值  
concat:将指定字符串连接到此字符串的结尾  
contains:当且仅当此字符串包含指定的 char 值序列时,返回 true  
endWith: 测试此字符串是否以指定的后缀结束  
StringBuffer(先出来)  
不会产生新的对象,线程安全  
StringBuilder  
线程不安全,但是效率高  
delete(左闭右开)  
reverse:翻转  
IO流 
File代表磁盘文件的类  
文件流  
输入流(read):文件到程序,磁盘到内存  
输出流(write):程序到文件内存到磁盘  
   
数据源:数据流入的源头  
数据宿:数据流出的目的地  
   
字节输入流 :InputStream(抽象类)实现FileInputStream is.available(判断长度)  
字节输出流:OutputStream(抽象类)实现FileOutputStream  
字符输入流  
字符输出流:ready()  
流先开的后关 换行:newLine();  
读取:readLine  
System.in对应键盘和System.out对应显示器  
对象序列化 
对象序列化就是把对象写入到输出流(文本)中,用来存储或传输  
ObjectOutputStream  
反序列化就是从输入流中读取对象  
ObjectInputStream  
作用:便于读写对象  
序列化步骤  
-  
将即将要序列化的类实现Serializable   -  
创建序列化类(ObjectOutputStream)   -  
创建一个序列化对象   -  
调用序列化对象的writeObject(对象)   -  
关闭流     
反序列化  
- 创建反序列化类(ObjectInputStream)
 - 创建序列化对象去接受,反序列化readObject(对象)
 - 关闭流
   
异常与调试 
运行时异常:RuntimeException类及其子类异常  
编译时异常:代码错误  
   
error错误不可处理  
Exception:是运行时的错误,它可以被捕捉并处理  
异常捕获try…catch…finally try…finally try…catch  
抛出异常:throw new Ecption();  
自定义异常(继承)extends Excption  
不定参数 
泛型 
例如:Teacher 泛型的上下界  
Map  
List  
枚举 
引用数据类型  
常用结构:private static final  
 
private Season(){
}
  
 
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。  
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。  
注:不能添加引号 定义属性只能在实例对象的下面 第一行必须是实例  
多线程 
进程:每一个程序,容器是操作系统  
线程:容器是进程  
| 维度 | 多进程 | 多线程 | 优劣 | 
|---|
 | 数据共享、同步 | 数据是分开的:共享复杂,需要用IPC;同步简单 | 多线程共享进程数据:共享简单;同步复杂 | 各有优势 |  | 内存、CPU | 占用内存多,切换复杂,CPU利用率低 | 占用内存少,切换简单,CPU利用率高 | 线程占优 |  | 创建销毁、切换 | 创建销毁、切换复杂,速度慢 | 创建销毁、切换简单,速度快 | 线程占优 |  | 编程调试 | 编程简单,调试简单 | 编程复杂,调试复杂 | 进程占优 |  | 可靠性 | 进程间不会相互影响 | 一个线程挂掉将导致整个进程挂掉 | 进程占优 |  | 分布式 | 适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单 | 适应于多核分布 | 进程占优 |   
线程实现方式 
- 继承Thread类
 - 实现Runnable接口
 - 实现Callable接口
   
线程的生命周期 
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J4Ac90u0-1632191929807)(C:\Users\chenchao\AppData\Roaming\Typora\typora-user-images\image-20210914091340965.png)]  
继承Thread类  
- 创建一个类,继承Thraed
 - 重写run()方法
 - 创建对应类的实例(并非是Thread的实例)
 - 调用对应类实例的start()方法
   
实现Runnable接口  
- 创建一个类实现Runnable接口
 - 重写run()方法
 - 创建Thread类对象,构造函数中放入对应类的实例
 - 调用Thread类对象的strat()方法
   
实现Callable接口  
- 1、Callable规定的方法是call(),Runnable规定的方法是run().
 - 2、Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
 - 3、call方法可以抛出异常,run方法不可以
 - 4、运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。
   
Timer和TimerTask定时器  
同步锁 
关键字:synchronized 作用属性是变量和方法  
Lock接口(轻量级)  
Lock lock=new ReetrantLock()  
volatile:锁 指令重排  
死锁 
产出死锁的原因:  
- 循环等待
 - 互斥
 - 占有且申请
 - 不可抢占
   
加锁  
yield  
setDaemon:守护线程(后台线程)  
线程类型转换  
新建状态----->就绪状态----->阻塞状态------>等待状态------>限时等待状态------>结束状态  
notify():唤醒 Object(类)  
断言 
assert() 只能放逻辑变量 在VM中添加参数 -ea参数  
JDBC 
  
步骤  
-  
导入jar包   -  
注册驱动(只执行一次)  ClassforName("com.mysql.jdbc.Driver")
   -  
建立连接  Connection c=DriverManager.getConnection("jdbc:mysql://localhost:3306/user?useSSL=false?username=root&password=root")
   -  
创建执行SQL的语句  Statement st=c.createStatement();
   -  
执行语句  查询用ResultSet去接收  st.executeUpdate(sql)
  while(rs.next){
}
   -  
处理执行结果  预编译   -  
释放资源     
注:CRUD(read) 先开后关(ResultSet,Statement,Connection)  
批处理  
事务 
特性:ACID  
原子性:要么成功,要么失败  
一致性:事务前后数据完整性保持一致  
持久性:事务一旦提交,不可逆  
隔离性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响  
数据库连接池 
ment();  
4. 执行语句
查询用ResultSet去接收
  
st.executeUpdate(sql)  
  
while(rs.next){  
}  
6. 处理执行结果
预编译
7. 释放资源
注:CRUD(read)       先开后关(ResultSet,Statement,Connection)
批处理
### 事务
特性:ACID
原子性:要么成功,要么失败
一致性:事务前后数据完整性保持一致
持久性:事务一旦提交,不可逆
隔离性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
 
                
                
                
        
    
 
 |