初级
1.java基础----软件不要安装在中文目录下。
(1)JDK环境---版本:1.8---配置环境变量:[java javac命令只能在当前所在目录使用]
可以在全局使用java和javac命令
(2)写了HelloWorld
(3)变量 语法: 数据类型 变量名=值;
[1]数据类型: 基本数据类型和引用数据类型。
基本数据类型8个: byte short int long float double boolean char.
引用数据类型: 接口,类,数组,枚举[常量]
[2]变量名定义规则: 1.有字符,数字,_和$组成 2.不能以数字开头 3.不能使用关键字。
(4)运算符:
[1]赋值运算符:=,+=,-=,*=,/=,%=
[2]算数运算符: +,-,*,%,/,++,-- [位置可以放在前面和后面]
[3]关系运算符: >,>=,<,<=,==,!= 返回结果一定是boolean类型
[4]逻辑运算符: &&,||,! 连接关系运算符
[5]三目运算符: 表达式?值:值
优先级: 算数运算符>关系运算符>逻辑运算
==比较: 基本类型:比较的是值,引用类型:比较的引用地址。
equals()比较: 只能比较引用类型。默认比较的是引用地址。如果想比较值那么必须重写equals方法。因为String,Integer重写了equals
(5)控制语句:
if(){}else if(){}.....else{}
==if可以单独使用==
switch(表达式){
case 值: 语句块;break;
case 值: 语句块;break;
....
default:
}
表达式:得到的结果可以是什么类型? byte,short,int,char,String类型【1.7以后】
//碰到满足需要的case后,会把该case后的所有case以及default都执行
for(初始化;条件;变化){ //初始化只会执行一次
循环体。
}
while(条件){
循环条件;
}
语句嵌套:
1.99乘法表。
(6) 数据组:
格式: 数据类型[] 数组名=new 数据类型[长度];
下标从0~长度-1;
数组名[0]获取第一个元素
格式: 数据类型[] 数组名={元素,元素....};
算法: 排序 [冒泡排序 手写,插入排序,选择排序....]
for(int i=0;i<arr.length;i++){ //遍历的次数
for(int j=arr.length-1;j>i;j--){
if(arr[j]<arr[j-1]){
int tmp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=tmp;
}
}
}
System.out.println(Arrays.toString(arr));
(7) java OOP面向对象编程。---纵向编程。
三大特点:
封装:使用了private修改类成员,使其外界无法直接访问。一般封装属性。
继承:extends继承父类中的成员。提高代码的复用性。
只能单继承。
抽象类: 使用abstract来修饰。不能被实例化,只能被子类继承。
接口: interface.里面的属性都是静态常量,方法都是抽象方法
多态: 一个对象具有多种形态。
向上转型:子类对象可以转化为父类对象。自动转化
向下转型: 父类对象转化为子类对象,需要手动转化
高级
1. 异常: 处理异常的方式:
try{可能发生异常}catch(){捕获异常}finally{资源关闭}
throws 抛出异常 写在方法名()后面, 调用者。
2. 集合体系结构:
Collection:
|--List: 有序,可重复。
|---ArrayList:底层数据结构:数组,特点:查询快,增删慢。当数组元素满了,动态扩容。把数组中原来的元素复制到新数组。新数组的长度是原来的1.5倍。
|---LinkedList: 底层双向链表。特点: 查询慢, 增删快。
|--Set:无序,不可重复。
|---HashSet:底层哈希算法。
Map:8
|---HashMap: 底层1.7和1.8不一样。
1.7:底层使用数组+链表。链表是头部插入
1.8: 底层使用数组+链表 或者数组+红黑树,链表使用尾部插入。
如果冲突个数特多时使用红黑树。当冲突个数高于8个转化为红黑树。
Collections:集合的工具类
3. IO流:
InputStream: 字节输入流
OutputStream:字节输出流
==========================文件操作=====================
Reader:字符输入流
Writer:字符串输出流
=========================文本操作======================
4. 线程
(1)创建线程的方式:1.继承Thread重写run方法 2.实现Runnable接口 3.实现Callable接口。 Callable有返回值,Runnable无返回值。
(2)线程的状态:
NEW--->Start---进入就绪状态---->获取CPU时间片--->进入运行状态--->
syn--->堵塞状态---sleep|wait--等待状态。----终止状态
NEW--->RUNABLE--->BLOCKED---->WAITING----TIME_WAITING----TERMINATED
(3)线程池:
创建方式: new ThreadPoolExecutor()原始的线程池。
单一线程池:
固定长度的线程池:
可变线程池:
延迟线程池:
5. JDK8的新特性:
1.Lambda表达式: 接口必须是函数式接口。函数接口:有且仅有一个抽象方法。
2.Stream流:针对集合和数组的操作。Stream流类中包含很多方法。
3.方法引用:
4.时间类:
6. 设计模式: 23种
[1]单例模式: ---恶寒和懒汉【线程安全问题--->双重校验锁 手写】
[2]工厂模式:
[3]动态代理:---JDK动态代理[基于接口]和Cglib动态代理[基于当前类的子类]。
[4]观察者:
[5]建造者模式
[6]适配器模式:
[7]桥接模式 等等