JavaSE知识内容
2021-08-01 14:50:47 75 举报
AI智能生成
JavaSE入门总结
作者其他创作
大纲/内容
Java认识
Java的诞生
1995
JavaSE
JavaME
Android
JavaEE
2006
Hadoop
JDK
开发者工具包
JRE
运行环境
JVM虚拟机
Hallow World
javac hello.java
java hello.class运行
半解释半编译
基础语法
关键字
JavaDoc
帮助文档
javadoc
@author
@version
@since
@param
@return
@throws
数据类型
基本数据类型
整数
byte
short
int
long
浮点数
float
double
字符
char
多字节
Unicode
转义字符
布尔
Boolean
进制转换
引用数据类型
类
接口
数组
类型转换
自动
低转高
手动
高转低
常量和变量
类型名 变量名 = 值
作用域
类变量(静态变量)
实例变量(成员变量)
局部变量
常量
final
运算符
赋值运算符
算术运算符
关系运算符
逻辑运算符
位运算符
条件运算符
包
package
import
流程控制
顺序结构
选择结构
if-else
switch(支持string)
方法的定义
修饰符 返回值 名字(参数){return 返回值;}
循环结构
while
do-while
for
foreach
方法
调用
类名.方法名
对象名.方法名
重载
参数列表不同
可变长度参数
定义
函数名(类型...变量名) 注意:变长参数必须放到最后
使用
按数组的方法使用
值传递和引用传递的理解
基本类型都是值传递,对象的时候虽然是引用,但是它只是在栈中存放了一个指向堆中同样地方的指针,如果不改变这个对象的话,会调用原来的,但是如果改变了,它就会新在堆中开一块内存来指向
数组
定义
存放类型需要相同
使用
通过下标
下表越界:ArrayIndexOutOfBoundsException
遍历
for循环
foreach
java.util.Arrays.toString
多维数组
Arrays类操作数组
排序
插入排序
直接插入排序
希尔排序
选择排序
简单选择排序
堆排序
交换排序
冒泡排序
快速排序
归并排序
基数排序
面向对象
类和对象概念
类是对象的抽象,对象是类的具体
构造器
默认无参构造(如果手动定义了有参构造,必须手动加上无参构造)
可以重载
单例模式为私有
new
栈存放引用
堆存放实例对象
修饰符
public
protected
private
static
final
特征
封装
私有
继承
extends
Java只支持单继承但是可以多重继承
都继承与Object
子类拥有父类的特性
this指向本类
super指向父类
子主题
多态
父类引用指向子类
instanceof关键字判断
抽象类
abstract
抽象类可以放抽象方法,以及普通类的东西,但普通类不能放抽象方法
抽象方法必须在子类实现
不能直接new
接口
interface
只能放抽象方法
实现接口必须重写所有方法
只有一个接口方法的叫函数式接口,可以用lambda表达式写,例如runnable
也不能直接new
接口可以多继承
implement
内部类
成员内部类
定义在类内
内部类可以随意访问外部类,外部想访问内部需要先实例化对象
如果变量重名优先内部类
局部内部类
定义在方法内
权限仅限于方法内
静态内部类
static修饰的成员内部类
只能访问外部类的static修饰的方法和属性
匿名内部类
new 类名(){};
GUI中监听事件经常使用
泛型<>
泛型接口
泛型方法
泛型类
异常
throwable
exception
运行时异常
0不能被除
类未找到
空指针
数组越界
.........
代码检查时异常
error
JVM错误
栈越界
死递归
堆内存不够
AWT错误
关键字
try()
catch(){}
finally{}
throw
throws
自定义异常
常用类
Object类
getClass
toString
hashCode
clone
notify
wait
equals
Math类
Random类
File类
包装类
8种基本数据类型的包装类
Date类
String类
不可变
StringBuffer类
可变长 多线程安全
StringBuilder类
可变长
Timer类
集合框架
Collection
List 有序可重复
ArrayList
LinkedList
Vector
Set 无须不可重复
HashSet
TreeSet
collection工具类
Map
HashMap 据说是高频问点
JDK1.7:数组+链表
JDK1.8:数组+链表+红黑树
TreeMap
Iterator
I/0流
字节流
OutputStream
InputStream
字符流
Reader
Writer
节点流
处理流
buffer
BufferedInputStream
BufferedOutputStream
data
DataInputStream
DataOutputStream
转换流
InputStreamReader
OutputStreamWriter
Filter
print
scanner
多线程
线程创建
继承Thread 内部调用了native方法start0()
继承Runnable接口
函数式接口 lambda
Callable
带返回值
静态代理
new Thread(Runnable实现类);
动态代理:自动实现接口类
lambda表达式
闭包
(参数)->{函数语句}
new Thread( ()->{
语句;}).start();
语句;}).start();
线程状态
新建
就绪
运行
阻塞
死亡
方法
sleep
join
yield
isaLive
start
priority
interrupt
同步
Synchronized
同步方法
同步代码块
死锁:相互抱着对方的锁
Lock
ReentrantLock
Lock
TryLock
UnLook
通信
缓冲区
标志位
wait()
notifyAll()
线程池
网络编程
IP、端口
Socket
TCP
三次握手四次挥手
可靠链接
UDP
URL
GUI
AWT
Frame类
监听事件
Swing
控件
关闭窗口方法不同
注解和反射
注解
元注解
四个
内置注解
三个
自定义注解
反射
类加载机制
方法
invoke
属性
set
构造方法
newInstance
解除私有保护
setAccessiable
JVM虚拟机
JVM体系结构
类加载器
加载
验证
准备
解析
初始化
双亲委派
启动类加载器
扩展类加载器
程序类加载器
自定义加载器
逐层向上请求,逐层向下加载,保证了安全性
沙箱安全
结构
字节码校验
双亲委派
区分了访问域,外层代码无法访问核心
存取控制器
安全管理器
安全软件包
提供者、签名、加密.....
Native(JNI)
调用本地方法接口
调用其他语言的接口
最初为了使用C/C++接口
程序计数器
线程私有
指向指向的指令
类似CPU从ip寄存器取出指向,eip指向下一条
方法区
线程共享
存放方法字节码
普通方法
构造方法
接口
........
静态变量
常量池
注意实例变量在堆中
栈
线程私有
生命周期和线程同步
存放
八大基本类型
对象引用
对象的实例在堆中
实例的方法
栈帧
每次进入和出去的其实都是栈帧
包含
方法索引
输入输出参数
变量
class引用
父帧
子帧
堆
JVM种类
Sun公司的HotSpot(主要研究对象)
内存分配
新生区
伊甸园区
幸存0区
幸存1区
满了之后会触发轻GC清理
养老区
满了之后重GC
元空间
Java8之后新名词,之前叫方法区、永久代
元空间不在JVM堆内存中,而直接在系统内存中
常量池、方法元信息、类元信息
调整
堆内存溢出:OOM
修改大小
-Xms2048m -Xmx1024m
显示信息
-XX:PrintGCDetails
JPofiler分析工具
Dump
-XX:+HeapDumpOutOfMemoryError
BEA公司的JRockit
IBM公司的J9 VM
GC
区域
新生区
幸存区from、to
老年区
轻/重GC
常用算法
引用清除法
复制算法
标记清除
标记压缩
弥补标记清除的不足
效率
内存效率
复制>标记清除>标记压缩
内存整齐
复制=标记压缩>标记清除
内存利用率
标记压缩=标记清除>复制
在不同区域使用不同算法才可以效率最高
JMM
Java内存模型
定义了线程和主内存之间的抽象关系
解决共享对象可见性问题:Volilate
保证修改完立刻刷新
加锁
JUC并发编程
java.util.concurrent
锁
Synchronized
作为关键字
同步代码块
Lock
Reentrantlook
区别
一个是关键字一个是类
lock可以获取锁的状态
lock手动、synchronized自动
synchronized获得不到锁会一直等,Lock可以选择等待时间
synchronized可重入、非公平,lock 可重入,公平/非公平,可响应中断
生产者消费者
8锁现象
集合不安全类
callable
countdownlatch、cyclicbarrier、semaphore
读写锁
阻塞队列
线程池
四大函数式接口
stream流式计算
分支合并
异步回调
JMM
volatile
单例模式
CAS
原子引用
收藏
收藏
0 条评论
下一页