javaSE框架
2020-05-30 09:26:38 82 举报
AI智能生成
JavaSE基础知识点总结
作者其他创作
大纲/内容
Java语言基础
Java语言概述
Java的发展
1995:jdk1.0(java的诞生)
JRE运行环境
JVM
核心库
核心API
集成API
用户界面API
发布技术
JDK开发环境
JRE
编译Java程序的编译器(即javac命令)
1998:jdk1.2
JavaSE
JavaME
JavaEE
2005: jdk1.5
2011: jdk1.7
2014: jdk1.8
Java语言最大的特点
跨平台性
java语言的运行机制
JVM虚拟机
指令集
寄存器
类文件的格式
栈
垃圾回收堆
存储区
第一个Java程序
HelloWorld
javac命令:编译程序
java命令:运行程序
垃圾回收机制
回收特点
流程控制
顺序结构
分支选择结构
单选择结构
双选择结构(典型)
三选择结构
switch
循环结构
当型结构:先判断后执行
while循环语句
for循环语句
直到型循环:先执行后判断
do...while循环语句
break
continue
基本语法
注释
单行注释://
多行注释:/* */
文档注释:/** */
标识符和关键字
标识符规则
关键字
数据类型
基本数据类型
数值类型
整数类型
byte:1个字节
short:2个字节
int:4个字节(常用数据类型)
long:8个字节
char:2个字节
浮点类型
float:4个字节
double:8个字节(默认类型)
BigDecimal
浮点数的表示方法
十进制数
科学计数法
三个特殊的浮点数值
正无穷大
负无穷大
非数
boolean布尔类型:占1位
引用类型
类
接口
数组
类型转换
自动类型转换:表数范围小的向表数范围大的自动转换
子主题
强制类型转换:表数范围大的向表数范围小的自动转换
表达式类型的自动提升
进制转换
二进制:0B或0b开头
八进制:0开头
十六进制:0X或0x开头
运算符
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
类型相关运算符
三目运算符
数组
初始化
静态初始化
动态初始化
异常
java.lang.ArraylndexOutOfBoundsException:N(数组索引越界异常)
增强for遍历数组
数组内存中的运行机制
多维数组
Arrays工具类
int binarySearch(type[] a,type key):
type[] copyOf(type[] original,int length):
boolean equals(type[]a,type[]a2)
void sort(type[]a):该方法对a数组的数组元素进行排序。
String toString(type[]a)
方法
方法的属性
方法的参数传递机制:值传递
递归方法
方法的重载
成员变量和局部变量
成员变量:在类中定义的变量
实例变量:不用static修饰
静态变量(类变量):用static修饰
局部变量:在方法内定义的
形参:方法签名中定义的变量
方法局部变量(在方法内定义的)
代码块局部变量(在代码块内定义的)
面向对象
类和对象
类是对象的抽象
对象是类的具体
对象的引用
this引用
类的组成
构造方法(构造器)
修饰符
构造器的初始化
构造器的重载
成员变量
修饰符
成员方法
修饰符
注意
三大特征
封装
封装的目的
封装的做法
访问控制符
private(同一个类):当前类访问权限
default(同一个包):包访问权限
protected(不同包子类):子类访问权限
public(不同包非子类):公共访问权限(全局范围内都可访问)
访问控制级别
访问控制符的基本原则
包
package
import
继承
创建变量时的内存变化
成员变量,方法的访问特点
调用父类构造器
重写(覆盖,覆写)
重写的规则
重写的特点
创建的是子类对象就优先用子类方法
super关键字限定
三种用法
在子类成员方法中访问父类成员变量
在子类成员方法中访问父类成员方法
在子类构造方法中访问父类构造方法
this关键字
三种用法
在本类的成员方法访问本类的成员变量
在本类的成员方法访问本类中另一个的成员方法
在本类的构造方法访问本类中另一个的构造方法
注意:这个this调用必须是第一个语句
super和this两种构造调用不能同时调用
重写和重载的区别
继承的三个特点
单继承:一个类的直接父类只有唯一一个
多级继承
一个父类可以拥有多个子类
多态
引用类型的类型转换
向上转型:一定是安全的
向下转型:把父类对象还原为本来的子类对象
instanceof 运算符
格式:对象 instanceof 类型,用于判断前面的的对象能否用于后面类型的实例,返回一个布尔值
多态中成员变量的使用特点(编译看左边,运行还看左边)
通过对象调用成员变量:看等号左边是谁,就是谁,没有则向上找
间接通过成员方法调用成员变量:看方法属于谁,就优先用谁,没有则向上找(即子类没有重写方法,就调用父类的, 重写了就调用子类的)
成员方法的访问规则
看new的是谁,就优先用谁,没有则向上找(编译看左边,运行看右边)
多态的好处:不管等号右边,等号左边可以统一
抽象类:包含抽象方法的类
抽象方法
抽象类的使用
注意事项
抽象类不能创建对象
抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
接口
抽象方法
接口使用步骤
接口不能直接使用,必须要有一个实现类实现接口
接口的实现类必须覆盖重写接口中所有的抽象方法
创建实现类对象,进行使用
默认方法(java8)
默认方法可以通过实现类对象直接调用
默认方法也可以被实现类进行覆盖重写
静态方法(java8)
调用格式:接口名称.方法名称
不能通过实现类对象调用静态方法
私有方法(java9)
普通私有方法:解决默认方法中重复代码的问题
静态私有方法:解决静态方法重复代码的问题
常量
注意
关键字
final 关键字
四种用法
修饰一个类
当前这个类不能有子类而且当前类中中的成员方法不能再被重写
修饰一个方法
这个方法不能被重写,而且abstract 不能和final同时修饰方法
修饰一个成员变量
由于成员变量有默认值,用了final 之后必须手动赋值,不然一直是默认值
赋值方式二选一
手动赋值
通过构造方法赋值
必须保证类中所有重载的构造方法对final修饰的成员变量都有赋值
修饰一个局部变量
变量是基本类型,值不变
变量是应用类型,地址不变,内容可变
内部类
成员内部类
内部类用外部类随便用,外部类用内部类,需要借助内部类对象
使用成员内部类的方法
间接方式:在外部类方法中使用内部类,然后在main中使用外部类方法
直接方式:外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称()
内部类方法调用外部类重名成员变量方式:外部类名称.this.外部类成员变量的名称
局部内部类:在方法中定义的,只能在方法中被调用
匿名内部类:如果接口的实现类或者父类的子类只使用一次,就可以省略类的定义,用匿名内部类
注意事项
如果局部内部类想要调用方法中的变量,那么这个变量就一定是final的,java8之后方法中被内部类调用的变量不写final,也默认是final
类和接口的特殊用法
类作为成员变量类型
接口作为成员变量类型
接口作为方法的参数或返回值类型
常用API类
Object类
toString方法
直接打印对象,相当于调用toString方法,没有重写Object的toString方法就只会打印出对象的地址值
equals方法:其他某个对象是否与这个对象相等
比较的类型
基本数据类型:比较的是内容
引用类型:比较的是地址值
hashcode方法:返回对象的哈希吗值
native:代表该方法调用的是本地操作系统的方法
wait方法
notify方法
notifyAll方法
Date类:表示特定的瞬间,精确到毫秒
DateFormat类
Calendar类
System类
StringBuilder类
包装类
Scanner类
Random类
JDK新特性
JDK5新特性
泛型
泛型通配符
通配符高级使用----受限泛型
增强for
可变数量的形参
注解
自动拆箱和装箱
静态导入
导入单个静态成员变量,方法
导入全部静态成员变量,方法
import和import static的区别
枚举
JDK7新特性
二进制字面量
数字字面量可以出现下划线
switch 语句可以用字符串
泛型简化
多异常捕捉:异常的多个catch合并
自动关闭资源(try-with-resources 语句)
JDK8新特性
允许在接口中有默认方法实现
Lambda表达式
函数式编程思想
Lambda表达式的标准格式
Lambda省略格式
Lambda的使用前提
Lambda表达式的特点:延迟加载
方法引用
方法引用符
通过对象名引用成员方法
通过类名称引用静态方法
通过super引用成员方法
通过this引用成员方法
类的构造器引用
数组的构造器引用
函数式接口
格式
@FunctionalInterface注解
常用的函数式接口
Supplier接口
Consumer接口
抽象方法:accept
默认方法:andThen
Predicate接口
抽象方法:test
默认方法:and
默认方法:or
默认方法:negate
Function接口
抽象方法:apply
默认方法:andThen
内置函数式接口
Stream流
流式思想
获取流的方式
根据Collection获取流
根据Map获取流
根据数组获取流
Stream流的of方法
常用方法
延迟方法
过滤:filter
映射:map
取用前几个:limit
跳过前几个:skip
组合:concat
终结方法
forEach
统计个数:count
Stream流的特点:只能使用消费(使用)一次
Map
时间日期API
Annotations
JDK9新特性
集合工厂方法
List接口,Set接口,Map接口的静态of方法
使用前提:当集合中存储的元素的个数已经确定,不在改变的时候使用
注意
对于try-with-resource引入对象的简化
集合
集合与数组的区别
数组的长度是固定的,集合的长度是可变的
数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
Collection:单列集合类的根接口
List接口:元素有序(存储和取出元素的顺序相同)、元素可重复,有索引,包含带索引的方法
Vector实现类(jdk1.0)
数据结构:数组
特点:查询快,增删慢,是同步的,单线程的,速率慢
遍历的方法:elements方法,返回此向量的组件的枚举
ArrayList实现类
数据结构:大小可变的数组
特点:查询快,增删慢,不是同步的,多线程的,速率快
集合添加元素的底层是调用数组的复制,每次添加元素都是新建数组添加到集合中,所以速度慢
LinkedList实现类
数据结构:链表实现
特点:查询慢,增删快,不同步的,多线程,速率快,包含大量操作首尾元素的方法,不能使用多态
Set接口:元素无序(存储和取出元素的顺序有可能不一致),而且不可重复,没有索引,也不能用普通for循环遍历
TreeSet实现类
HashSet实现类
LinkedHashSet集合:具有可预知迭代顺序bSet接口的哈希表和链表实现
特点:底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序,保证元素有序)
HashSet特点
是一个无序的集合,存储元素和取出元素的顺序有可能不一致
底层是哈希表结构,哈希表特点是查询特别快
哈希值
哈希表结构
数据结构
Set集合存储元素不重复的原理
Iterator迭代器
常用方法
Collections集合工具类
常用功能
addAll:往集合中添加一些元素
sort :将集合中元素按照默认规则排序,只能传递List集合,默认是升序
Comparator和Comparable的区别
shuffle:打乱集合顺序
Map集合(接口)
特点
元素是成对存在的,每个元素由键和值两部分组成,通过键可以找到所对应的值
键是唯一的,值可以重复
一个键对应一个值
常用的子类
HashMap类
特点:底层数据结构是哈希表,不同步,是多线程的,速度快
LinkedHashMap类
数据结构是哈希表和链表,具有可预知的迭代顺序
遍历的方法
Entry键值对对象(内部类)
Hashtable 实现类(jdk1.0)
数据结构是哈希表
和HashMap的区别
异常
异常的体系
Throwable根类
Error:无法通过处理的错误
Exception:表示编译期异常,可以通过代码的方式纠正,是必须处理的
RuntimeException:运行期异常
异常的处理
异常处理
try...catch:捕获异常,对出现的异常进行指定方式的处理
finally
作用:无论是否出现异常都会执行
注意事项
finally中有return语句
throw:在指定的方法中抛出一个指定的异常对象
注意事项
throws:声明异常对象
作用
在方法声明时使用,处理方法内部抛出的异常对象,会把异常对象抛出给方法的调用者
Throwable类中3个异常处理的方法
String getMessage:返回此throwable的简短描述
String toString:返回此throwable 的详细信息字符串
void printStackTrace:JVM打印异常,默认此方法,异常信息是最全面的
多异常处理
多个异常分别处理
多个异常一次捕获,多次处理
多个异常一次捕获一次处理
Objects的非空判断:查看指定引用对象是否为null
自定义异常类
多线程
并发与并行
并发:指两个或多个事件在同一个时间段内发生,一个CPU交替执行多个任务
并行:指两个或多个事件在同一时刻发生(同时发生),多个CPU同时执行多个任务
线程与进程
进程
线程
线程的调度
分时调度:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。
抢占式调度:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
Thread线程类
创建线程类的方法
继承Thread类,并重写该类的run()方法
声明实现Runnable接口的类,该类实现run方法
实现Runnable和Thread的区别
Thread类的常用方法
getName:获取获取当前线程名称
sleep方法:使当前正在执行的线程以指定的毫秒数暂停
多线程的原理
线程安全
线程同步机制
同步代码块
同步方法
静态同步方法
锁机制
Lock锁 接口(JDK1.5)
线程状态
新建
运行
阻塞
等待
计时等待
死亡
等待唤醒机制
线程池:一个容纳多个线程的容器
线程池的好处
降低资源消耗
提高响应速度
提高线程的可管理性
线程池的使用步骤
IO流
File类
绝对路径
相对路径
常用方法
判断功能的方法
创建和删除的方法
文件过滤器
递归
直接递归
间接递归
注意事项
IO流的分类
根据数据的流向分
输入流
输出流
格局数据的类型分
字节流
字节输出流OutputStream
FileOutputStream类
构造方法
数据追加续写
字节输入流InputStream
FileInputStream类
构造方法
从字节输入流中读取键值对
字符流
字符输入流Reader
FileReader类
构造方法
字符输出流Writer
FileWriter类
构造方法
IO异常的处理
Properties类
缓冲流
字节缓冲流
构造方法
字符缓冲流
构造方法
特有方法
转换流
InputStreamReader类
构造方法
OutputStreamWriter类
构造方法
序列化
序列化流ObjectOutputStream类
构造方法
序列化操作
反序列化流ObjectInputStream类
构造方法
反序列化操作
打印流
PrintStream类
网络编程
网络通信协议
UDP
TCP
网络编程三要素
协议
IP地址:互联网协议地址
端口号:标识设备中的进程(应用程序)
Socket类:实现客户端套接字,套接字指的是两台设备之间通讯的端点
构造方法
成员方法
ServerSocket类:实现了服务器套接字,该对象等待通过网络的请求
构造方法
成员方法
TCP通信分析
JavaSE增强知识
Junit单元测试
测试分类
黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值
白盒测试:需要写代码的。关注程序具体的执行流程
Junit使用:白盒测试步骤
判定结果
红色:失败
绿色:成功
断言
@Before:修饰的方法会在测试方法之前被自动执行
@After:修饰的方法会在测试方法执行之后自动被执行
注解
注解的作用
编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
代码分析:通过代码里标识的注解对代码进行分析【使用反射】
编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】
JDK的内置注解
@Override :检测被该注解标注的方法是否是继承自父类(接口)的
@Deprecated:该注解标注的内容,表示已过时
@SuppressWarnings:压制警告
自定义注解
格式
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
属性:接口中的抽象方法
要求
元注解:用于描述注解的注解
@Target:描述注解能够作用的位置
ElementType取值
TYPE:可以作用于类上
METHOD:可以作用于方法上
FIELD:可以作用于成员变量上
@Retention:描述注解被保留的阶段
@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
@Documented:描述注解是否被抽取到api文档中
@Inherited:描述注解是否被子类继承
反射读取注解
反射
Class
newInstance()
获取Class对象的方式
Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
类名.class:通过类名的属性class获取
对象.getClass():getClass()方法在Object类中定义着
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
获取功能
获取成员变量
获取构造方法
获取成员方法
获取全类名
类加载机制
Method
执行方法:invoke()
获取方法名称:String getName:获取方法名
存在重载,也需要写参数的class类型
Field:成员变量
操作
设置值
获取值
忽略访问权限修饰符的安全检查
Construct:构造方法
newInstance()
获取的时候,需要传递参数的class类型
如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
暴力访问,破坏私有的关键字
setAccessible(true)
性能分析
正常的new>检测关闭的反射>默认的反射
反射的好处
可以在程序运行过程中,操作这些对象。
可以解耦,提高程序的可扩展性。
反射案例
0 条评论
下一页