9、JavaSE总结
9.1 Java语言
9.1.1 MarkDown语法
9.1.2 简单的Dos命令
9.1.3计算机语言发展
9.1.4 Java的诞生
1995年诞生:JavaSE、JavaME、JavaEE
2006年Hadoop大数据系列
9.1.5 JDK、JRE
JDK:开发者工具包、配置环境变量(配置Javahome、编辑环境变量)
JRE:运行环境
9.2 HelloWorld
  public class Hello{public static void main(String[] args){System.out.print("Hello,World!");}}
javac编译Java文件的,编译之后会生成一个class文件
java命令执行class文件
编译型语言和解释型语言
安装了IDEA的开发工具
9.3 基础语法
9.3.1 注释
行内注释
多行注释
文档注释,javadoc生成帮助文档
9.3.2 标识符
关键字
9.3.3 数据类型
基本数据类型:八大基本类型
整数:byte(1字节)、 short(2字节)、 int(4字节)、long(8字节)
- 0b二进制
- 0x16进制
- 0 八进制
浮点数:float(4字节)、double(8字节)扩展了金融中使用了BigDecimal类型
字符:char(2字节)
扩展了
- ASCII码
- UTF-8
- Unicode
- 转义字符:\u0000、\b、\n、\r、\t
布尔值:boolean(1位)
引用数据类型
类
接口
数组
9.3.4 类型转换
-  自动类型转换 低转高(字节数、子类父类) 
-  强制类型转换 高转低:(低)高 
9.3.5 变量和常量
-  变量 -  定义:type varName [=value]; 
-  作用域 类变量 实例变量 局部变量 
 
-  
-  常量 - 定义 final MAX_A =10
 
-  命名规则 - 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则(除了第一个单词以外,后面的单词首字母大写):monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
 
9.3.6 运算符
- 算数运算符:+ - * / % ++ –
- 赋值运算符:=
- 关系运算符:> < >= <= == != instanceof
- 逻辑运算符:&& || !
- 位运算符:& | ^ ~ >> << >>>
- 条件运算符:? :
- 扩展运算符:+= -= *= /=
9.3.7 包机制
防止命名冲突
- 域名倒写
- package
- import
9.3.8 JavaDoc
-  JDK帮助文档 
-  javadoc 参数信息@author 作者名@version 版本号@since 指明需要最早使用的JDK版本@param 参数名@return 返回值情况@throws 异常抛出情况
-  生成帮助文档 javadoc -encoding UTF-8 -charset UTF-8 Doc.java # -encoding UTF-8设置编码为UTF-8这样可以正常显示中文 # -charset UTF-8 设置字符集编码为UTF-8也是为了正常显示中文
9.4 Java流程控制
9.4.1 顺序结构
- 用户交互Scanner
- 程序默认的顺序结构,自上而下的结构
9.4.2 选择结构
- if单选择结构
- if-else双选择结构
- if-else多选择结构
- switch(JDK7支持了Spring类型)、case穿透现象、default
9.4.3 循环结构
- while:尽量避免死循环
- do-while
- for
- 增强for循环
9.4.4 break、continue
- break:跳出循环
- continue:终止当次循环
- return:结束方法的运行
9.5 方法
-  什么是方法:语句块的集合 
-  方法的定义 修饰符 返回值 方法名(参数名){return 返回值} 
-  方法的调用 - 类名.方法
- 对象.方法
 
-  方法重载:名字相同,参数列表不同 
-  命令行传参 
-  可变参数:…必须放在最后一个参数 
-  递归:自己调用自己,给自己一个出口 
9.6 数组
-  数组的定义 
-  数组的使用 通过下标拿到值 数组下标越界ArrayIndexoutofBounds 增强for循环 
-  二维数组 
-  Arrays类 
-  排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、堆排序、基数排序 
9.7 面向对象
-  什么是面向对象 
-  类与对象 类是对象的抽象:类是模板class,所有的对象都是根据这个模板刻出来的。 对象是类的具体 
-  构造器:new对象,每个类都有一个默认的无参构造,如果手动定义了无参构造就必须要手动添加一个无参构造,单例模式,需要构造器私有。 栈存放引用 堆存放具体的对象 
-  封装:该露的露,该藏的藏 属性私有,提供相应的public的get、set方法。 
-  继承 extends关键字 object类是所有类的老祖宗 子类拥有父类的全部特性 方法重写 this super Java是单继承只能继承一个父类,但是可以实现多个接口 
-  多态:父类的引用指向子类的对象,可以使用instanceof相互的转型 
-  修饰符 public protected Private default static abstract final 
-  接口 interface 接口是一个约束,只能定义方法名 子类实现接口,必须重写其中的方法 只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化 接口比抽象类更抽象 
-  内部类 局部内部类:方法里面的 静态内部类:方法外面类里面的 匿名内部类:方法里面的 
9.8 异常
-  异常机制:异常总接口:Throwable -  Exception,Exception捕获不到需要抛出到Throwable,Exception捕获不到Error,需要捕获Error就要到Error去捕获 分为运行时异常和检查型异常 - 运行时异常 - 1/0
- ClassNotFound
- NullPoint:空指针异常
- 未知的类型转换:UnknownType
- 下标越界异常
 
- 检查型异常
 
- 运行时异常 
-  Error AWT错误 JVM错误 - 栈溢出:StackOverFlow递归死的话就会报这个错误
- Java内存溢出:OutOfMemory:当计算的数大的时候就会报这个错误
 
 
-  
-  处理异常 - 五个关键字 - try{要捕获的异常代码块}
- catch(捕获异常){}:先小后大
- finally{无论捕不捕获都执行的代码块}
- throw在方法内部手动抛出异常
- throws方法抛出异常
 
- 自定义异常:继承Exception类即可
 
- 五个关键字 
9.9 Java常用类
-  Object类 - hashcode()
- toString()
- clone()
- getClass()
- notify()
- wait()
- equals()
 
-  String类 不可变性,它是不可能被改变的,操作量较少的时候使用String - StringBuffer:可变长,append(),当多线程数据量较大时使用
- StringBuilder:单线程数据量较大,效率高,不安全。
 
-  Math类 常见的数学运算 
-  Random类 生成随机数:UUID 
-  File类 - 创建文件
- 查看文件
- 修改文件
- 删除文件
 
-  包装类 - 自动装箱
- 自动拆箱
 
-  Date类 - Date
- SimpleDateFormat:yyyy -MM-dd HH:mm:ss
- Calendar(建议使用)
 
9.10 集合框架
- Collection - List(有序可以重复):建议使用iterator迭代器遍历 - ArrayList(常用):add添加、remove删除、contains包含、size大小
- LinkedList链表:链表都有头跟尾 - getFirst()
- getLast()
- removeFirst()
- addFirst()
 
- Vector
- Stack
 
- Set(无序不可重复) - HashSet(常用)
- TreeSet
 
 
- List(有序可以重复):建议使用iterator迭代器遍历 
- Map - HashMap(重点,常用)在项目中不用数据库存可以用HashMap存,在JDK1.7的数据结构是数组+链表,而在JDK1.8则变成了hash表=数组+链表+红黑树
- TreeMap
 
- Collections工具类
- 泛型:约束,避免类型转换之间的问题
9.11 IO流
一切的IO流就是进来和出去,进口和出口,input和output,按照字节说可以分为InputStream和OutputStream,按照字符流分可以分为Writer和Reader,有中文的时候不要用字节流要用字符流。
- 字节流 - 输出:OutputStream
- 输入:InputStrem
 
- 字符流 - Reader
- Writer写出
 
- 处理流 - buffer - bufferInputStrem
- bufferOutputStream
- bufferReader
- bufferWriter
 
- data:通信的时候必须要转换成这个,不转换的话就没办法传 - DataInputStrem
- DataOutputStream
 
- 转换流 - inputStreamReader
- OutputStreamWriter
 
- 过滤流:Filter - FilterInputStrem
- FilterOutputStream
- FilterReader
- FilterWriter
 
- print:打印是无法写入的 - PrintWriter
- PrintStream
 
- Object流:也是四个
- 文件流File
 
- buffer 
- 节点流 - CharArray - CharArrayReader
- CharArrayWriter
- CharArrayInputStrem
- CharArrayOutputStream
 
- 管道流:pipe - PipeOutputStream
 
- String - StringReader
- StringWriter
 
 
- CharArray 
使用这些流的时候要注意序列化
9.12 多线程
-  进程和线程 
-  run方法的调用和start方法的区别 
-  线程创建的方式 - Thread:实现了Runnable接口,start0,本地方法Java无权调用,交给底层C处理:Private native void start0()
- Runnable:函数式接口,可以被lambda表达式简化
- Callable:可以有返回值
 
-  静态代理 
-  lambda表达式 函数式编程 避免内部类定义过多不便于阅读 手动把内部类推导成lambda表达式 
-  线程的状态 新建、就绪、运行、阻塞、死亡 
-  常用方法 - sleep
- join
- yield
- isLive
- start
- setPriority
- interrupt
 
-  线程同步 -  多个对象操作同一个资源:并发 
-  为了处理并发要用到“锁”:队列+锁 
-  Synchronized解决线程同步问题 -  同步方法:有弊端的,锁太多了 
-  同步代码块(常用) 
-  第一个线程进来拿到锁,后面就要排队了,直到这个人释放锁,后面人拿到锁才能进去 
-  两个人都抱着对方的锁就会产生死锁,死锁的四个条件 - 互斥:一个资源只能被一个资源使用不能被两个进程使用
- 请求与保持:一个进程因为一个资源被阻塞了,就不能抱着这个资源不放不然就彻底死了。
- 不剥夺条件:即进程已经获得了资源,在没有使用完这个资源之前不能强行的拿走。
- 循环等待条件:很多个线程形成了一个圈之后,相互有需求
 代码中出现了以上四种情况,代码一定会产生死锁。当然破坏其中任何一个条件这个死锁就被解开了。 
 如果是同步方法的话,如果对方方法加锁的话,在方法中有代码块A,A是只读的,所有人都可以读取,而在方法中B代码块才是可写的,如果加锁的话,A和B都会被锁上,而实际上只用锁B就行了,最常用的还是同步代码块。同步代码块一般锁的是this 
-  
-  Lock(优先级高):也属于JUC下面的 一般常用 - ReentrantLock常用方法 - Lock
- tryLock
- unLock
 
 
- ReentrantLock常用方法 
-  线程同步中的锁的使用顺序是 优先使用Lock锁,然后是同步代码块,最后是同步方法 
 
-  
-  线程通信 线程与线程之间是相互隔离的,如何实现他们的通信,有两个方法 - 通过缓冲区:消息队列是它的原型,做一个缓冲让他妈呢存放数据,也就是两个线程都到缓冲区拿数据,从而实现线程的通信。
- 标志位(信号灯):两个线程去读标志位,如果这个标志位发生了变化,两个线程就做相应的变化,也就是现实生活中的红绿灯,两辆车行驶的时候完全没有关系,但是因为有了红绿灯实现了井井有条的通信。
 这里面会用到object的两个方法 - wait()
- notifyall()
 
-  线程池(Pool) 线程每次创建都要消耗资源,如果我们提前准备好一些资源放在池子里,就解决了这个问题 - 池化技术,就像数据库的连接池一样,因为经常连接数据库是非常消耗资源的,不停的连接断开,因此就先准备一些连接,用的时候直接用就好了
- 池的大小
- 最大连接数
- 连接时间
- 保持时间
 
9.13 网络编程
-  URL 
-  IP 
-  端口 
-  Socket变成 
-  TCP编程 三次握手、四次挥手、面相连接 
-  UDP编程 无连接,以包Packet发送 
-  聊天通信 
-  文件上传下载 
-  Tomcat 
9.14 GUI(可选)
-  AWT - frame
- 事件 - 鼠标监听事件
- 键盘监听事件
- 窗口事件
- 文本框监听事件
- 动作事件
 
 
-  Swing - 文本框
- 标签
- 按钮
- 文本域
- 面板
- 布局方式
- 关闭窗口
- 列表
 
9.15 注解和反射
- 注解 - 元注解
- 内置注解
- 自定义注解
- 反射读取注解
 
- 反射 - Class
- 类加载机制
- Method
- Field
- Construct
- 破坏私有关键字
- 性能分析
- 反射获得注解、泛型
 
- 单例模式的探究