JavaSE学习总结
正文
JavaSE
一、Java语言初始
- 我能不能学会这个语言???
- 注册博客
- MarkDown语法
- 简单的Dos命令
- 计算机语言发展
- Java的诞生
- 1995 JAVA SE、JAVA ME(Android)、JAVA EE
- 2006 Hadoop
- JDK 开发者工具包 配置环境变量
- JRE 运行环境
二、HelloWorld
//生成class
public class Hello{
public static void main(String[] args){
System.out.println("Hello,World")
}
}
- Java Hello
- 编译型
- 解释型语言
- 安装IDEA
三、基础语法
3.1 注释
- 行内注释 //
- 多行注释 /* */
- 文档注释 /** */ javadoc生成帮助文档
3.2 标识符
- 关键字
3.3 数据类型
- 基本数据类型
- 整数
- byte 占1字节
- short 占2字节
- int(默认) 占4字节
- long 占8字节
- 0b 二进制
- 0x 十六进制
- 0 八进制
- 浮点数
- float 占4字节
- double(默认) 占8字节
- BigDecimal (金融方面的有关计算)
- 字符
- char 占2字节
- Ascii编码
- utf-8
- Unicode
- 转义字符
- \b 退格(BS) ,将当前位置移到前一列
- \n 换行(LF) ,将当前位置移到下一行开头
- \r 回车(CR) ,将当前位置移到本行开头
- \t 水平制表(HT) (跳到下一个TAB位置)
- ' 代表一个单引号(撇号)字符
- " 代表一个双引号字符
- \ 代表一个反斜线字符'''
- 布尔值
- boolean 占1位
- if(a)
- 引用数据类型
- 类
- 接口
- 数组
- Java数据类型优先级:byte,short,char—> int —> long—> float —> double (排序由低到高)
3.4 类型转换
- 自动类型转换 ---->低转高
- 强制类型转换 ---->高转低 (低) 高 例如:(int)long
3.5 变量和常量
- type varName[=value];
- 作用域
- 类变量
- 实例变量
- 局部变量
- 常量 final MAX_A = 10;
- 命名规范
- 见名知意
- 驼峰命名(变量,方法)
- 类,首字母大写然后再符合驼峰命名规则
- 常量:大写+下划线
- 不要使用拼音命名
3.6 运算符
- 算术运算符 + - * / % ++ --
- 赋值运算符 =
- 关系运算符 > < >= <= == != instanceof
- 逻辑运算符 && || !
- 位运算符 & | ^ ~ >> << >>>
- 条件运算符 ? :
- 扩展运算符 += -= *= /=
3.7 包机制
- 域名倒写
- 防止命名冲突
- package
- import
3.8 JavaDoc
- JDK帮助文档
- javadoc
- @author(作者)
- @Version(版本)
- @Since(Java类最早能支持到哪个版本)
- @param(参数)
- @return(返回值)
- @throw(抛出的异常)
四、流程控制
4.1 Scanner
用户交互System.in
4.2 顺序结构
程序默认的结构,自上而下的执行
4.3 选择结构
- if单选择结构
- if - else 双选择结构
- if - else if - else 多选择结构
- switch
- jdk支持了String类型
- case穿透现象
- break
- default
4.4 循环结构
- while 尽量避免死循环
- do......while 一定会执行一次循环语句
- for for(int i = 0; i <100; i++)(九九乘法表)
- 增强for循环 for-each
- break & continue
- break:跳出循环
continue:终止当次循环- 带标签continue
- return:结束方法的运行
五、方法
- 什么是方法
- 方法的定义:修饰符 返回值 方法名 (参数名)
- 方法的调用
- 类名.方法
- 对象.方法
- 方法重载:名字相同,参数列表不同
- 命令行传参:给main方法传递参数
- 可变长参数:....... 必须放在最后一个参数
- 递归:自己调用自己,给自己一个出口
六、数组
- 数组的定义: new int[5] ; {1,2,3,4,5} (必须是同一个类型)
- 数组的使用
- 通过下标拿到值
- 数组下标越界:ArrayIndexoutofBounds
- 增强for循环遍历
- 二维数组:int[][]
- Arrays工具类
- 排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 基数排序
七、面向对象
7.1 什么是面向对象
7.2 类与对象
类是对象的抽象:模板Class;对象是类的具体
7.3 构造方法:构造的重载
- 默认的无参构造
- 如果手动定义了有参构造就必须要手动再加一个无参构造
- 单例模式,需要构造器私有
7.4 new对象
- 栈存放引用
- 堆存放具体的对象
7.5 封装:
属性私有,get 、set
7.6 继承
- extends关键字
- Object是所有类的父类
- 子类拥有父类的全部特性
- 方法重写
- this
- super
- Java是单继承,只能继承一个父类
7.7 多态
- 父类的引用指向子类的对象 Person person = new Student();
- instanceof关键字,如果匹配,可以进行类型之间的转换
7.8 修饰符
- public
- protected
- private
- static
- final
- abstract
7.9 接口
- interface关键字
- 只是起到约束作用,只能定义方法名
- 子类实现接口,必须重写其中的方法
- 只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化
- 接口比抽象类更抽象
- 一个类可以实现多个接口
7.10 内部类
- 局部内部类
- 静态内部类
- 匿名内部类(重点)
八、异常
8.1Throwable
- Exception
- 运行时异常:例如:1 / 0 ; ClassNotFound ; NullPoint;UnKownType;下标越界异常.........
- 检查型异常
- Error
- AWT错误
- JVM错误:栈溢出(StackOverFlow);Java内存溢出(OutOfMemory)
8.2五个关键字
- try
- catch(){}:捕获异常 先小后大
- finally{}
- throw:手动抛出异常
- throws:方法抛出异常
- 自定义异常:继承Exception类即可
九、常用类
- Object类
- hashcode()
- toString()
- clone()
- getClass()
- notify()
- wait()
- equals()
- Math类:常见的数学运算
- Random类:生成随机数 UUID
- File类
- 创建文件
- 查看文件
- 修过文件
- 删除文件
- 包装类:自动装箱和拆箱
- Date类
- Date
- SimeDateFormat:yyyy-MM-dd HH:mm:ss
- Calender(建议使用)
- String类:不可变形 final (操作量较少)
- StringBuffer:可变长 append()(多线程数据量较大 效率低,安全)
- StringBuilder:可变长(单线程数据量较大 效率高,不安全)
十、集合框架
10.1 Collection
- List (有序可重复)
- ArrayList(常用)
- add
- remove
- contains
- size
- LinkedList(常用)
- getFirst()
- getLast()
- removeFirst()
- addFirst()
- ........
- Vector
- Stack
- ArrayList(常用)
- Set(无序不可重复)
- HashSet(常用)
- TreeSet
10.2 Map
- HashMap(重点,天天用)
- JDK1.7:数组+链表
- JDK1.8:hash表= 数组+链表+红黑树
- TreeMap
10.3 Collections工具类
10.4 泛型
约束,避免类型转换之间的问题
十一、IO流
11.1 字节流
- 输出:OutputStream
- 输入:InputStream
11.2 字符流
- 写出:Writer
- 写入:Reader
11.3 节点流
- CharArrayReader ,Write,inputstream,outputstream
- StringReader,Writer
- pipe(管道流)PipedOutputStream,PipedInputStream
- File(文件流)
- FileOutputStream
- FileInputStream
- FileWriter
- FileReader
11.4 处理流
- buffer
- BufferedOutputStream
- BufferedInputStream
- BufferedWriter
- BufferedReader
- 序列化 反序列化 Serializable(标记性接口) transient(透明的)
- date
- DateOutputStream
- DateInputStream
- object流
- ObjectOutputStream
- ObjectInputStream
- ObjectWriter
- 转换流
- OutputStreamWriter
- InputStreamReader
- Filter
- FilterOutputStream
- FilterInputStream
- FilterWriter
- FilterReader
- print
- PrintStream
- PrintWriter
十二、多进程
12.1 进程和线程
12.2 run(),Start();
12.3 线程创建的方式
- Thread start(),本地方法:Java无权调用,交给底层的c处理 private native void start();
- Runnable:函数式接口 lambda
- Callable:可以有返回值
12.4 静态代理
new Thread(Runnable).start();
12.5 Lambda表达式:
-
函数式编程,避免内部类定义过多
-
new Thread(()->{
System.out.println();
}).start(); -
手动推导一遍lambda表达式
12.6 线程状态
- 新建状态
- 就绪
- 运行
- 阻塞
- 死亡
12.7 常用的方法
- sleep
- join
- yield
- isLive
- start
- setPriority
- interrupt
12.8 线程同步
- 多个对象操作同一个资源,并发
- 队列 + 锁
- Synchronized:
- 同步方法(弊端:锁太多了)
- 同步代码块(常用)
- 第一个线程进来拿到锁,后面就要排队了,直到这个人释放锁,后面拿到锁才能进去
- 死锁:两个人都抱着对方的锁,产生死锁的四个条件:①互斥;②请求与保持;③不剥夺条件;④循环等待条件
- Lock(优先级高) ReentrantLock :lock;trylock;unlock
12.9 线程通信
- 缓冲区:消息队列
- 标志位:红绿灯
- Wait();等待某些时间
- notifyAll();唤醒所有
12.10 线程池(Pool)
- 池化技术
- 池的大小
- 最大连接数
- 保持时间
- ......
十三、网络编程
- IP
- 端口
- Socket编程
- TCP(三次握手、四次挥手、面向连接)
- UDP(无连接、Packet)
- URL
- 聊天通信
- 文件上传
十四、GUI(可选)
14.1 AWT
- Frame
- 监听事件(鼠标、键盘、窗口、动作事件)
14.2 Swing
- 文本框
- 标签
- 按钮
- 文本域
- 面板
- 布局方式
- 关闭窗口
- 列表
14.3 贪吃蛇
- Timer
- 键盘监听
- 游戏帧的概念
十五、注解和反射
15.1 注解
- 元注解
- 内置注解
- 自定义注解
- 反射读取注解
15.2 反射
- Class newInstance();
- 类加载机制
- Method
- invoke(user3,"张三3");
- 存在重载;也需要写参数的类型
- Field set(user4,"张三4");
- Construct
- newInstance();
- 获取的时候需要,传递参数的class类型
- 破坏私有关键字 setAccessible(true);
- 性能分析:正常创建的new>检测关闭的反射>默认的反射
- 反射获得注解,泛型......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通