1995年诞生:JavaSE、JavaME、JavaEE
2006年Hadoop大数据系列
JDK:开发者工具包、配置环境变量(配置Javahome、编辑环境变量)
JRE:运行环境
public class Hello{
public static void main(String[] args){
System.out.print("Hello,World!");
}
}
javac编译Java文件的,编译之后会生成一个class文件
java命令执行class文件
编译型语言和解释型语言
安装了IDEA的开发工具
行内注释
多行注释
文档注释,javadoc生成帮助文档
关键字
基本数据类型:八大基本类型
整数:byte(1字节)、 short(2字节)、 int(4字节)、long(8字节)
浮点数:float(4字节)、double(8字节)扩展了金融中使用了BigDecimal类型
字符:char(2字节)
扩展了
布尔值:boolean(1位)
引用数据类型
类
接口
数组
自动类型转换
低转高(字节数、子类父类)
强制类型转换
高转低:(低)高
变量
定义:type varName [=value];
作用域
类变量
实例变量
局部变量
常量
命名规则
防止命名冲突
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也是为了正常显示中文
什么是方法:语句块的集合
方法的定义
修饰符 返回值 方法名(参数名){return 返回值}
方法的调用
方法重载:名字相同,参数列表不同
命令行传参
可变参数:…必须放在最后一个参数
递归:自己调用自己,给自己一个出口
数组的定义
数组的使用
通过下标拿到值
数组下标越界ArrayIndexoutofBounds
增强for循环
二维数组
Arrays类
排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、堆排序、基数排序
什么是面向对象
类与对象
类是对象的抽象:类是模板class,所有的对象都是根据这个模板刻出来的。
对象是类的具体
构造器:new对象,每个类都有一个默认的无参构造,如果手动定义了无参构造就必须要手动添加一个无参构造,单例模式,需要构造器私有。
栈存放引用
堆存放具体的对象
封装:该露的露,该藏的藏
属性私有,提供相应的public的get、set方法。
继承
extends关键字
object类是所有类的老祖宗
子类拥有父类的全部特性
方法重写
this
super
Java是单继承只能继承一个父类,但是可以实现多个接口
多态:父类的引用指向子类的对象,可以使用instanceof相互的转型
修饰符
public
protected
Private
default
static
abstract
final
接口
interface
接口是一个约束,只能定义方法名
子类实现接口,必须重写其中的方法
只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化
接口比抽象类更抽象
内部类
局部内部类:方法里面的
静态内部类:方法外面类里面的
匿名内部类:方法里面的
异常机制:异常总接口:Throwable
Exception,Exception捕获不到需要抛出到Throwable,Exception捕获不到Error,需要捕获Error就要到Error去捕获
分为运行时异常和检查型异常
Error
AWT错误
JVM错误
处理异常
Object类
String类
不可变性,它是不可能被改变的,操作量较少的时候使用String
Math类
常见的数学运算
Random类
生成随机数:UUID
File类
包装类
Date类
一切的IO流就是进来和出去,进口和出口,input和output,按照字节说可以分为InputStream和OutputStream,按照字符流分可以分为Writer和Reader,有中文的时候不要用字节流要用字符流。
使用这些流的时候要注意序列化
进程和线程
run方法的调用和start方法的区别
线程创建的方式
静态代理
lambda表达式
函数式编程
避免内部类定义过多不便于阅读
手动把内部类推导成lambda表达式
线程的状态
新建、就绪、运行、阻塞、死亡
常用方法
线程同步
多个对象操作同一个资源:并发
为了处理并发要用到“锁”:队列+锁
Synchronized解决线程同步问题
同步方法:有弊端的,锁太多了
同步代码块(常用)
第一个线程进来拿到锁,后面就要排队了,直到这个人释放锁,后面人拿到锁才能进去
两个人都抱着对方的锁就会产生死锁,死锁的四个条件
代码中出现了以上四种情况,代码一定会产生死锁。当然破坏其中任何一个条件这个死锁就被解开了。
如果是同步方法的话,如果对方方法加锁的话,在方法中有代码块A,A是只读的,所有人都可以读取,而在方法中B代码块才是可写的,如果加锁的话,A和B都会被锁上,而实际上只用锁B就行了,最常用的还是同步代码块。同步代码块一般锁的是this
Lock(优先级高):也属于JUC下面的
一般常用
线程同步中的锁的使用顺序是
优先使用Lock锁,然后是同步代码块,最后是同步方法
线程通信
线程与线程之间是相互隔离的,如何实现他们的通信,有两个方法
这里面会用到object的两个方法
线程池(Pool)
线程每次创建都要消耗资源,如果我们提前准备好一些资源放在池子里,就解决了这个问题
URL
IP
端口
Socket变成
TCP编程
三次握手、四次挥手、面相连接
UDP编程
无连接,以包Packet发送
聊天通信
文件上传下载
Tomcat
AWT
Swing