总结
Java语言初识
- 我能不能学会这个语言?
- 注册博客:27+
- MarkDown语法
- 简单的Dos命令
- 计算机语言发展
- Java的诞生
- 1995
- Java SE
- Java ME
- Android
- Java EE
- 2006
- Hadoop
- 1995
- JDK
- 开发者工具包
- 配置环境变量
- 开发者工具包
- JRE
- 运行环境
HelloWorld
-
public class HelloWord(){ public static void main(String[] args){ System.out.println("hello,word"); } }
-
javac Hell.java
- 生成class
-
java Hello
-
编译型
-
解释型语言
-
IDEA
基础语法
-
注释
- 行内注释 //
- 多行注释 /* */
- 文档注释 /** */ javadoc生成帮助文档
-
标识符
- 关键字
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bjhlk9t2-1646500212447)(E:\aChihiro\MD文件夹\开发区\存档文档\image-20220304220052352.png)]
- 关键字
-
数据类型
-
基本数据类型
-
整数
- byte 1字节
- short 2字节
- int(默认) 4字节
- long 8字节
- 进制转换
- 0b 二进制
- 0x 十六进制
- 0 八进制
-
小数(浮点数)
- float 4字节
- double(默认) 8字节
- BigDecimal 金融计算
-
字符
-
char 2字节
-
ascii编码
-
UTF-8
-
Unicode
-
\u0000
-
\n 换行
-
\b 退格
-
\r 回车
-
\t 制表
-
\'
-
\" 转义
-
\\
-
-
-
布尔值
- boolean 1位
- if(a)
-
-
引用数据类型
- 类
- 接口
- 数组
-
-
类型转换
- 自动类型转换
- 低转高
- 强制类型转换
- 高转低 (高)低
- 自动类型转换
-
变量和常量
- type varName [=value];
- 作用域
- 类变量
- 实例变量
- 局部变量
- 常量
- final MAX_A = 10;
- 命名规范
- 见名知意
- 驼峰命名(变量,方法)
- 类命名规范(首字母大写,驼峰命名)
- 常量:大写+下划线
- 不要使用拼音命名
-
运算符
-
算术运算符
-
+ - * / % ++ --
-
-
赋值运算法 =
-
关系运算符
-
> < >= <= == != instanceof
-
-
逻辑运算符
-
&& || !
-
-
位运算符
-
& | ^ ~ >> << >>>
-
-
条件运算符
-
? :
-
-
扩展运算符
-
+= -= *= /=
-
-
-
包机制
- 域名倒写
- 防止命名冲突
- package
- import 导入包
-
JavaDoc
-
JDK帮助文档
-
javadoc 直接生成文档
-
@author 作者
-
@Version 版本
-
@Since 最早支持的java版本
-
@param 参数
-
@return 返回值
-
@throws 抛出的异常
-
public class HelloWorld{ /** @author chihiro @param args 命名参数 @Since 1.0 @throws 没有异常抛出 */ public static void main(Stirng[] args){ System.out.println("hello") } } cmd - javac HelloWord.java javadoc -encoding UTF-8 -charset UTF -8 HelloWorld.java
-
-
流程控制
- Scanner
- 用户交互System.in
- 顺序结构
- 程序默认的结构,自上而下的执行
- 选择结构
- if 单选择结构
- if-else 双选择结构
- if-else if-else 多选择结构
- switch
- jdk7支持了String类型
- case穿透现象
- default
- 循环结构
- while
- 尽量避免死循环
- do…while
- for
- for(int i=0;i<100;i++)
- 九九乘法表
- 增强for循环
- while
- break & continue
- break:跳出循环
- continue:终止当次循环
- 带标签的continue
- return:结束方法的运行
方法
- 什么是方法!
- 方法的定义
- 修饰符 返回值 方法名(参数名){return 返回值;}
- 方法调用
- 类名.方法
- 对象.方法
- 方法重载
- 名字相同,参数列表不同
- 命名行传参
- 给main方法传递参数
- 可变长参数
- …
- 必须放在最后一个参数
- 递归
- 自己调用自己,给自己一个出口
- 面试常问
- 力扣(leetCode) 刷题
数组
-
数组的定义
- new int[5]
- {1,2,3,4,5}
- 必须是同一个类型
-
数组的使用
- 通过下标拿到值
- ArrayIndexOutOfBounds
- 增强for循环遍历
-
二维数组
-
int[][]
-
-
Arrays工具类
-
排序算法
- 冒泡排序*
- 选择排序
- 插入排序
- 快速排序*
- 归并排序
- 希儿排序
- 堆排序
- 基数排序
面向对象
-
什么是面向对象
-
类与对象
- 类是对象的抽象:模板Class
- 对象是类的具体
-
构造方法
- 构造的重载
- 默认无参构造
- 如果手动定义了有参构造就必须要手动再加一个无参构造
- 单例模式,需要构造器私有!
- 构造的重载
-
new 对象
- 栈存放引用
- 堆存放具体的对象
-
封装
- 属性私有,get、set
-
继承
- extends
- Object
- 子类拥有父类的全部特性
- 方法重写
- this
- super
- Java是单继承,只能继承一个父类
-
多态
-
父类的引用指向子类的对象 Person person = new Student();
-
instanceof 关键字,如果匹配,可以进行类型之间转换
-
-
修饰符
- public
- protected
- private
- static
- abstract
- final
-
接口
- interface
- 约束,只能定义方法名
- 子类实现接口,必须重写其中的方法
- 只有一个方法的接口,叫做函数式接口,可以使用lambda表达式简化:方返回值 方法名(参数列表);
- 接口比抽象类更抽象
- 一个类可以实现多个接口
内部类
- 局部内部类
- 静态内部类
- 匿名内部类*
异常
-
Throwable
- Exception
- 运行时异常
- 1/0
- ClassNotFound 类找不到
- NullPoint 空指针异常
- UnKownType 未知类型
- 下标越界异常
- …
- 检查型异常
- 运行时异常
- Error
- AWT错误
- JVM错误
- StackOverFlow 栈溢出
- OutOfMemory 内存溢出
- Exception
-
五个关键字
- try{}
- catch(){}
- 先小后大
- finally{}
- throw
- 手动抛出异常
- throws
- 方法抛出异常
-
自定义异常
- 继承Exception即可
常用类
- Object类
- hashcode()
- toString()
- clone()
- getClass()
- notify()
- wait()
- equals()
- Math类
- 常见的数学运算
- Random类
- 循环遍历随机数
- UUID
- 循环遍历随机数
- file类
- 创建文件
- 查看文件
- 修改文件
- 删除文件
- 包装类
- 自动装箱和拆箱
- Date类
- Date
- SimpleDateFormat
- yyyy-MM-dd HH:mm:ss
- Calender(建议使用)
- String类
- 不可变性 final
- 操作量较少使用
- StringBuffer
- 可变长
- append()
- 多线程数据流较大使用
- 效率低,安全
- 可变长
- StringBuilder
- 可变长
- 单线程数据量较大使用
- 效率高,不安全
- String str = “a” + 1+2 ==> a12
- String str = ‘a’ + 1 ==> b
- String str = 1+2 +“a” ==>3a
集合框架
-
Collection
- List(有序可重复)
- ArrayList(常用)
- add 添加
- remove 删除
- contains 包含
- size 大小
- LinkedList
- 链表
- getFirst()
- getLast()
- removeFirst()
- addFirst()
- …
- Vector
- Stack
- ArrayList(常用)
- Set(无序不可重复)
- HashSet(常用)
- TreeSet
- Lterator:迭代器
- List(有序可重复)
-
Map
- HashMap(重点,面试高频问点)
- JDK1.7:数组+链表
- JDK1.8:数组+链表+红黑树
- TreeMap
- HashMap(重点,面试高频问点)
-
Collections 工具类
-
泛型 <> 约束,避免类型转换之间的问题
IO流
- 字节流
- 输出:OutputStream
- 输入:InputStream
- 字符流
- 读入:Reader
- 写出:Wirter
- 节点流
- CharArrayReader
- CharArrayWriter
- CharArrayInputStream
- CharArrayOutPutStream
- StringReader
- StringWrit
- pipe(管道流)
- PipedOutputStream
- File
- 处理流
- buffer
- bufferInputStream
- bufferOutputStream
- bufferReader
- bufferWriter
- 序列化
- 反序列化
- Serializable
- transient:透明的
- Serializable
- 反序列化
- data
- DataInputStream
- DataOutputStream
- Object流
- 转换流
- InputStreamReader
- OutputStreamWriter
- Filter
- FilterInputStream
- FilterOutputStream
- FilterReader
- FilterWriter
- print
- PringWriter
- PringStream
- buffer
多线程
-
进程和线程
-
run()
-
Start()
-
线程创建的方式
- Thread
- start0:本地方法,Java无权调用,交给底层的C处理
- private native void start0();
- start0:本地方法,Java无权调用,交给底层的C处理
- Runnable
- 函数式接口
- lambda
- 函数式接口
- Callable
- 可以有返回值
- Thread
-
静态代理
- new Thread(Runnable).start();
-
Lambda表达式
- 函数式编程
- 避免内部类定义过多,导致代码不便阅读
- new Thread(()->{ Systme.out.println(); }).start();
- 手动推导一遍lambda表达式
-
线程的状态
- 新建状态
- 就虚
- 运行
- 阻塞
- 死亡
-
常用的方法
- sleep
- join
- yield:礼让
- isLive:存活
- start
- setPriority:优先级
- interrupt():中断线程
-
线程同步
-
多个对象操作同一个资源,并发
-
前提:队列 + 锁
-
Synchronized
- 同步方法(弊端:锁太多了,读的代码没有必要锁)
- 同步代码块(常用!)
- 第一个 进来拿到锁,后面就要排队了,直到这个人释放锁,后面人拿到锁才能进去
- 死锁:两个人都抱着对方的锁
- 互斥:一个资源只能被一个进程使用,不能被两个进程使用
- 请求与保持:一个进程已经被卡住了,不能再对资源抱住不放
- 不剥夺条件:进程已经获得这个资源,在没有使用完之前,不能强行拿走
- 循环等待:很多个线程形成了一个环状的,我要你,你要我的情况
- 死锁只要破坏以上其中一个条件,死锁就解开了
-
Lock(优先级高)
- ReentrantLock
- lock
- trylock
- unlock
- ReentrantLock
-
-
线程通信
- 缓存区:消息队列
- 标志位:红绿灯
- wait(); 等待某些时间
- notifyAll(); 唤醒所有的
-
线程池(Pool)
- 池化技术
- 池的大小
- 最大连接数
- 保持时间
- …
网络编程
- IP
- 端口
- Socket编程
- TCP
- 三次握手
- 四次挥手
- 面向连接
- UDP
- 无连接
- Packet
- URL
- 初识Tomcat
- 聊天通信
- 文件上传
GUI
-
AWT
- Frame
- 监听事件
- 鼠标
- 键盘
- 窗口
- 文本框
- 动作事件
-
Swing
- 文本框
- 标签
- 按钮
- 文本域
- 面板
- 布局方法
- 关闭窗口
- 列表
-
贪吃蛇
- Timer
- 键盘监听
- 游戏帧的概念
注解和反射
- 注解
- 原注解
- 内置注解
- 自定义注解
- 反射读取注解
- 反射
- Class
- newInstance();
- 类加载机制
- Filed
- set(user,“千寻简”);
- Method
- invoke(user,“千寻简”);
- 存在重载,也需要写参数的类型
- Construct
- newInstance();
- 获取的时候需要,传递参数的class类型
- 破坏私有关键字
- setAccessible(true);
- 性能分析
- 注册 > 检车关闭的反射 > 默认的反射
- 反射获得注解,泛型…
- Class
- 单例模式的探究
- Stream
- ForkJoin
- 效率对比