Java - 常用API
一、数学计算
java.lang.Math :包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象
java.math.BigInteger:操作不可变的、任意精度的整数,常用于存储超出long类型的整型
java.math.RoundingMode:操作数据舍入
java.math.BigDecimal:操作不可变的、任意精度的有符号十进制数
java.util.Random:用于产生随机数
二、日期时间
JDK1.8之前
java.util.Date(大多数方法已经在Java 1.1引入Calendar类之后被弃用):返回日期时间
java.text.SimpleDateFormat:用于日期时间的格式化
java.util.Calendar:抽象类,提供了一个类方法getInstance,以获得此类型的一个通用的对象。它为特定瞬间与一组日历字段之间的转换,和操作日历字段提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间1970年1月1日00:00:00.000)的偏移量
JDK1 ...
Java - 正则表达式
正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)
正则表达式是对字符串操作的一种逻辑公式
一、正则表达式构造摘要1、字符类12[abc]`:肯定,`a`、`b` 或 `c[^abc]`:否定,除了 `a`、`b` 或 `c
[a-zA-Z]:范围,a 到 z 或 A 到 Z,两头的字母包括在内
2、预定义字符类.:任何字符(与行结束符可能匹配也可能不匹配)
123456\d`:数字,`[0-9]\D`:非数字, `[^0-9]\s`:空白字符,`[ \t\n\x0B\f\r]\S`:非空白字符,`[^\s]\w`:单词字符,`[a-zA-Z_0-9]\W`:非单词字符,`[^\w]
3、POSIX 字符类(仅 US-ASCII)\p{Lower}:小写字母字符,[a-z]
\p{Upper}:大写字母字符,[A-Z]
\p{ASCII}:所有ASCII,[\x00-\x7F]
\p{Alpha}:字母字符,[\p{Lower}\p{ ...
Java - 反射
一、反射的概念
Java程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致,为了解决这些问题,程序需要在运行时发现对象和类的真实信息,现在有两种方案
方案1:在编译和运行时都完全知道类型的具体信息,在这种情况下,我们可以直接先使用instanceof运算符进行判断,再利用强制类型转换符将其转换成运行时类型的变量即可
方案2:编译时根本无法预知该对象和类的真实信息,程序只能依靠运行时信息来发现该对象和类的真实信息,这就必须使用反射
类加载器加载完类之后,就会产生一个Class类型的对象,并引用存储到方法区,那么每一个类在方法区内存都可以找到唯一Class对象与之对应,这个对象包含了完整的类的结构信息,我们可以通过这个对象获取类的结构。这种机制就像一面镜子,Class对象像是类在镜子中的镜像,通过观察这个镜像就可以知道类的结构,所以,把这种机制形象地称为反射机制
反射:Class对象(镜像)–>类(原物)
二、类加载(了解)
类在内存中完整的生命周期:加载–>使用–>卸载
1、类的加载过程
类加载:当程序主 ...
Java - 网络编程
一、网络编程三要素1、IP地址和域名(1)IP地址
IP地址:指互联网协议地址(Internet Protocol Address),俗称IP。IP地址用来给一个网络中的计算机设备做唯一的编号,唯一标识网络中的设备
IP地址分类
方式一:
IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式(例192.168.65.100),其中a、b、c、d都是0~255之间的十进制整数,最多可以表示42亿个
IPv6:采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,
IPv4和IPv6地址格式不相同,因此在很长一段时间里,互联网中出现IPv4和IPv6长期共存的局面
方式二:
公网地址(万维网使用)
私有地址(局域网使用):范围为192.168.0.0–192.168.255.255,专门为组织机构内部使用
特殊的IP地址:
本地回环地址(hostAddress):127.0.0.1
主机名(hostName):localh ...
Java - IO流
一、IO概述1、什么是IO
数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存是输出流
Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做写出数据
2、IO的分类
根据数据的流向分类
输入流 :把数据从其他设备上读取到内存中的流
以InputStream,Reader结尾
输出流 :把数据从内存 中写出到其他设备上的流
以OutputStream、Writer结尾
根据数据的类型分类
字节流 :以字节为单位,读写数据的流
以InputStream和OutputStream结尾
字符流 :以字符为单位,读写数据的流
以Reader和Writer结尾
根据IO流的角色分类
节点流:可以从或向一个特定的地方(节点)读写数据
文件:FileInputStream、FileOutputStrean、FileReader、FileWriter
字符串:St ...
Java - 泛型
一、泛型概述
泛型:JDK1.5设计了泛型的概念,泛型即为“类型参数”,这个类型参数在声明它的类、接口或方法中,代表未知的通用的类型
泛型的优点:避免类型转换,通过编译提示异常来保证安全
泛型语法:<类型>
一般形式为,这里可以看做类型形参,等看做类型实参
泛型之后的Java数据类型
Class:Class类的实例表示正在运行的 Java 应用程序中的类和接口
GenericArrayType:泛化的数组类型,即T[]
ParameterizedType:参数化类型(例如:Comparator,Comparator)
TypeVariable:类型变量(例如:Comparator中的T,Map<K,V>中的K,V)
WildcardType:通配符类型(例如:Comparator<?>)
二、泛型类与泛型接口
语法格式:class 类名/接口名 <类型变量列表>
核心类库中的泛型类/接口
集合框架内的相关类和接口
Comparator接口
Comparable接口
自定义泛型类 ...
Java - 集合
一、集合概述
集合是java中提供的一种容器,可以用来存储多个数据
集合和数组的区别
数组的长度是固定的,集合的长度是可变的
数组中可以存储基本数据类型值,集合中只能存储对象
集合主要分为两大系列:Collection和Map,Collection表示一组对象,Map表示一组映射关系或键值对
二、Collection1、Iterator迭代器(1)Iterator接口
JDK专门提供了一个接口java.util.Iterator,主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器
迭代:即Collection集合元素的通用获取方式。在取元素之前先判断集合中是否有元素,如果有,则取出元素,然后继续判断,直到将集合中的元素全部取出
集合获取迭代器的方法:public Iterator iterator()
Iterator接口的常用方法:
public E next():返回迭代的下一个元素
public boolean hasNext():如果仍有元素可以迭代,则返回 true
void remove():删除元 ...
Java - 多线程
一、线程概述
一个软件中至少有一个应用程序,应用程序的一次运行就是一个进程,一个进程中至少有一个线程
软件:应用程序和相关资源文件等构成一个软件系统
程序:编程语言编写的一组指令的集合
进程:是操作系统调度和分配资源的最小单位
线程:进程中的一个执行单元,是CPU调度的最小单位
单核CPU只能并发,多核CPU可以并行+并发
并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行
并发(concurrency):指两个或多个事件在同一个时间段内发生(同一个时刻只能有一条指令执行,但多个进程的指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果)
不同的进程之间不共享内存,不同的线程共享同一个进程的内存
进程之间切换的复杂度要远远高于线程调度
线程调度:当系统只有一个CPU时,以某种顺序执行多个线程
分时调度:所有线程轮流使用CPU的使用权,平均分配每个线程占用 CPU 的时间
抢占式调度:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,Java使用的为抢占式调度
多线程程序并不能提高程序的运行速度,但 ...
Java - 异常
一、异常概述
异常 :指的是程序在执行过程中,出现的非正常的情况,如果不处理最终会导致JVM的非正常停止,并不是指的语法错误
正确对待异常:编写程序时,应该充分考虑到各种可能发生的异常和错误,极力预防和避免,实在无法避免的,要编写相应的代码进行异常的检测、异常消息的提示,以及异常的处理
异常的抛出机制:Java中把不同的异常用不同的类表示,一旦发生某种异常,就通过创建该异常类型的对象,并且抛出。程序可以catch到这个异常对象并处理,如果无法catch到这个异常对象,那么这个异常对象将会导致程序终止
二、异常体系1、Throwable
java.lang.Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类或其子类的实例时,才能通过Java虚拟机或者Java的throw 语句抛出
Throwable中的常用方法:
public void printStackTrace():打印异常的详细信息(包含了异常类型、异常原因,异常出现的位置)
public String getMessage():获取发生异常的原因(提示给用户的时候,就提示错误原因)
...
Java - 枚举、接口和注解
一、枚举类
枚举类型本质上也是一种类,只不过是这个类的对象是固定的,不能随意让用户创建
在JDK1.5之前,需要程序员自己通过特殊的方式来定义枚举类型
构造器加private私有化
本类内部创建一组常量对象,并添加public static final修饰符
在JDK1.5之后,Java支持enum关键字来快速的定义枚举类型
enum关键字声明
构造器只允许private修饰(默认,可不写)
必须在类体第一部分(第一个分号前)给出若干本类的属性,属性之间逗号隔开
123456789【修饰符】 enum 枚举类名{ 常量对象列表}【修饰符】 enum 枚举类名{ 常量对象列表; 其他成员列表;}
二、枚举注意事项
常量名:枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写
常量:如果常量对象列表后面没有其他代码,那么;可以省略,否则不可以省略
构造器:
默认提供的是private的无参构造,常量对象列表不用加参数
如有参构造需要手动定义,private可省略 ...