语言背景
- Java于1995年诞生,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web引用开发和移动应用开发
- Java有三个版本
- JavaSE(标准版)
- JavaEE(企业版)
- JavaME(微型版)
- 2006年发布Hadoop
- JDK:java开发工具包,里面包含了各种用于java程序开发的基本工具包
- JRE:java运行环境
基础语法
注释
- 单行注释:
//
- 多行注释:
/**/
- 文档注释:
/** */
标识符
- 标识符即关键字,如:
public
、finally
等
数据类型
基本数据类型
- 整型
- byte
- short
- int
- long
- 字符型
- char
- 浮点型
- double
- int
- 布尔型
- boolean
- 整型
引用数据类型
- 类
- 接口
- 数组
- 类型转换
- 自动转换(低转高)
- 强制转换(高转低)
变量与常量
type varName [=value];
- 作用域
- 类变量
- 实例变量
- 局部变量
常量
final MIN_B = 10;
命名规范
- 见名知意
- 驼峰命名法
- 类命名首字母大写
- 常量: 大写+下划线
- 不使用驼峰命名法
运算符
- 算术运算符
+,-,*,/,%,++,--
(加、减、乘、除、取余数、自增、自减)
- 赋值运算符
=
- 关系运算符
>,<,=>,<=,==,!=
instance of
(大于、小于、大于等于、小于等于、等于、不等于、判断是否为类的实例化对象)
- 逻辑运算符
&&,||,!
(与、或、非)
- 位运算符
&,|,^,~,>>,<<,>>>
(位与、位或、位异或、位非、左移、右移、无符号右移)
- 条件运算符
?:
(表达式 ? 为真语句 :为假语句)
- 扩展运算符
+=,-=,*=,/=
a+=2 === a=a+2
a*=2 === a==a*2
a-=2 === a=a-2
a/=2 === a=a/2
包机制
- 域名倒写
- 防止命名冲突
package
import
JavaDoc
- JDK帮助文档
- javadoc
@author
@version
@since
@param
@return
@thoows
public Class Welcome {
/**
* @author theMan
* @param args
* @since 1.0
* @throws 无异常抛出
*/
public static void main(String[] args){
System.out.println("welcome");
}
}
流程控制
- Scanner
- 用户交互
System.in
- 用户交互
- 顺序结构
if
单选择结构if-else
多选择结构switch
多选结构- jdk支持了
String
类型 case
穿透现象default
默认
- jdk支持了
- 循环结构
while
避免死循环do-while
先执行,后判断for
- 增强for循环
- 特殊
break
跳出循环continue
终止本次循环return
结束方法运行
方法
- 何为方法
- 修饰符 返回值 方法名(参数名){return 返回值;}
- 方法调用
类名.方法
对象.方法
- 方法重载
- 名字相同,但参数列表不同
- 命令行传参
- 给main方法传递参数
- 可变长参数
...
- 必须放在最后一个参数
- 递归
数组
- 数组举例
new int[10]
{1,2,3}
- 同一数组内的数据必须相同类型
- 数组的使用
- 通过下标拿到值
ArrayIndexOfBounds
- 增强的for循环遍历
- 二维数组
new int[][]
- Array工具类
- 排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 桶排序
面向对象
何为面向对象
- 把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
类与对象
- 类是对象的抽象:即模板Class
- 对象是类的实例
- 构造方法
- 构造的重载
- 默认为无参构造
- 如果手动定义了一个有参构造就必须再加一个无参构造
- 单例模式,需要构造器私有!
- 构造的重载
- new对象
- 栈存放引用
- 堆存放具体的对象
- 封装
- 属性私有,即:
get
、set
方法
- 属性私有,即:
继承
extends
Object
- 子类拥有父类的全部属性
- 方法重写
this
super
- Java是单继承,只可继承一个父类
多态
- 父类的引用指向子类的对象
Person person = new Student();
instance of
关键,如果匹配,可以进行类型之间的转换
- 父类的引用指向子类的对象
修饰符
public
protected
private
static
final
abstract
接口
interface
- 约束:只能定义方法名
- 子类实现接口时,必须重写其方法
- 只有一个方法的接口叫做函数式接口,可使用
lamda
表达式进行简化 - 接口比抽象类更抽象
- 一个类可以实现多个接口
内部类
- 局部内部类
- 静态内部类
- 匿名内部类
异常
Throwable
- Exception
- 运行时异常
1/0
ClassNotFound
NullPoint
UnKonwnType
ArrayIndexOutOfBounds
- 检查时异常
- 运行时异常
- 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
Calendar
- String类
- 不可变性final,操作量较少
- StringBuffer
- 可变长
append()
- 多线程数据量较大
- 效率低,安全
- StringBuilder
- 可变长
- 单线程数据量较大
- 效率高,不安全
String str = "a"+1 + 2
String str = 'a' + 1 + 2
String str = 1+2+'a'
集合框架
Collection
- List
ArrayList
add()
remove()
contains()
size()
LinkedList
getFirst()
getLast()
removeFirst()
addFirst()
- iterator迭代器
- Set
- 约束,避免类型转换之间的问题
I/O流
字节流
- 输出:
OutputStream
- 输入:
InputStream
字符流
- Reader
- Wirter
节点流
CharArrayReader
、Wirter
、inputstream
、outputstream
StringReader
、Writer
pipe
、pipedOutputStream
File
处理流
buffer
bufferInputStream
bufferOutputStream
bufferReader
bufferWriter
data
DataInputStream
DataOutputStream
- object流
- 转换流
InputStreamReader
OutputStreamWriter
- Filter
- 四个
- print
PrintWriter
PrintStream
多线程
进程和线程
run()
Start()
线程创建的方式
Thread
Runnable
Callable
静态代理
new Thread(Runnable).start();
Lamda表达式
- 函数式编程
- 避免内部类定义过多
new Thread(()->{System.out.printIn();}).start();
线程的状态
- 新建态
- 就绪态
- 运行态
- 阻塞态
- 死亡态
常用的方法
sleep()
join()
yield()
isLive()
start()
setPriority()
interrupt()
线程同步
- 多个对象操作同一个资源,并发
- 对列+锁
- Synchronized
- 同步方法
- 同步代码块(常用)
- 锁,第一个线程进来拿到锁,后面的就要排队了,直到这个线程释放锁,后面的线程才能拿到锁进去
- 死锁,两个人都抱着对方的锁
- 互斥
- 请求与保持
- 不剥夺条件
- 循环等待条件
- Lock
ReentrantLock
lock
trylock
unlock
线程通信
- 缓冲区:消息队列
- 标志位:红绿灯
wait()
notifyAll()
线程池
- 池化技术
- 池的大小
- 最大连接数
- 保持时间
网络编程
- IP
- 端口
- Socket编程
- TCP
- 三次握手
- 四次挥手
- 面向连接
- UDP
- 无连接
- Packet
- URL
- 初识Tomcat
- 聊天通信
- 文件上传
GUI
AWT
- Frame
- 监听事件
- 鼠标
- 键盘
- 窗口
- 动作事件
Swing
- 文本框
- 标签
- 按钮
- 文本域
- 面板
- 布局方式
- 关闭窗口
- 列表
注解和反射
注解
- 元注解
- 内置注解
- 自定义注解
- 反射读取注解
反射
- Class
newInstance()
- 类加载机制
- Method
invoke(person1,"kevin");
- 存在重载,需要些参数的类型
- Field
set(person2,"marvin");
- Construct
newInstance()
- 获取的时候需要传递参数的class类型
- 破坏私有关键字
setAccessible(true);
- 性能分析
- 正常>检测关闭的反射>默认的反射
- 反射获得注解、泛型