FlayerVEO 学无止境
http://www.flayerveo.com/
这个人很懒,啥都不想传
-
JavaSE 常用类-Date类与DateFormat类-旧时间API
http://flayerveo.com/index.php/archives/3193/
2020-12-05T04:57:00+00:00
# Date类:
**导入包:**import java.util.Date;
**Date类的构造方法:**
public Date() //无参构造方法,使用当前系统时间来构造Date对象
public Date(long date) //有参构造方法,指定时间(毫秒值)来构造Date对象
**Date类的成员方法:**
public long getTime() //获取当前时间的毫秒值
public void setTimne(long time) //设置当前对象时间(毫秒值)
**例:** 时间戳是从1970年1月1日0:00开始的毫秒值,setTime将时间戳设为0返回的时间是08是因为中国与美国时差为8

# DateFormat类:
**导入包:**import java.text.SimpleDateFormat;
**介绍:**DateFormat类是日期/时间格式化子类的抽象类,因为是抽象类,所以不能实例化,所以我们要用它的子类SimpleDateFormat来实现**日期**与**字符串**的格式化和解析操作。
1、 Date>String>格式化 (指定的格式化转换)
2、 String>Date>解析 (日期格式的模板)
**SimpleDateFormat的格式化符号:**

**格式化字符串为时间对象 String转Date:**

结果:
**解析时间对象为字符串Date转String:**

结果: 
**注意:**在解析字符串的时候,这个字符串一定是和SimpleDateFormat的模板格式是匹配的
**将java.util.Date 转为 java.sql.Date:**
java.util.Date使用getTime()方法获取当前毫秒值,然后再传给java.sql.Date

-
JavaSE 常用类-System类
http://flayerveo.com/index.php/archives/3184/
2020-11-19T05:19:02+00:00
# System类
**注意:**System类不能被实例化
**System类的成员方法:**
**public static void gc()** //用于垃圾回收。垃圾:指没有被引用的对象
**public static void exit(int status)** //终止程序
**public static long currentTimeMillis()** //返回当前毫秒值(时间戳)
**public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)** //复制一个数组中的一个部分元素到另一个数组中去
**System.gc()方法:**
**功能:**用于垃圾回收,会优先调用对象重写的finalize()方法,如果没有重写则调用Object类的finalize()方法。
**格式:**System.gc()
**例:**

注意:不要在程序中频繁的垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器,这回耗费更多的资源,会与正常运行的程序争夺资源,只有在执行大量的对象的释放时才调用垃圾回收。
**System.exit()方法:**
**功能:**终止当前运行的Java虚拟机。
**格式:**System.exit(int status) //status为0时表示正常退出,非0时表示异常终止
**例:**
 结果:
**System.currentTimeMillis()方法:**
**功能:**返回long类型的当前时间戳
**格式:**System.currentTimeMillis()
**例:**
 结果:
**System.arraycopy()方法:**
**功能:**复制一个数组中的一个部分元素到另一个数组中去
**格式:**System.arraycopy(数组1, 数组1的起索引, 数组2, 数组2的起索引, 复制几个元素)
**例:**

**System.getProperty()方法:**
**功能:**获取命令行传入的参数
**格式:**System.getProperty("参数名")
**例:**获取命令行传入的user,passwd参数 (注意要先打包成jar文件)

-
JavaSE 常用类-Runtime类
http://flayerveo.com/index.php/archives/3175/
2020-11-19T05:17:25+00:00
**功能:**主要用于统计内存对性能进行调整。

**方法实现:**

**注意:**Process在执行进程时无法直接返回进程的处理信息即命令的回显,所以需要通过InputStream字节流来接收命令回显:
```java
Process p = rt.exec("whoami");
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while((line = reader.readLine())!= null){
System.out.println(line);
}
p.waitFor();
is.close();
reader.close();
p.destroy();
```

-
JavaSE 常用类-Random类-随机数
http://flayerveo.com/index.php/archives/3170/
2020-11-19T05:16:11+00:00
# Random类
**作用:**用来专门生成随机数的类
**构造方法:用于创建Random对象**
**Random():**生成的随机数是没有规律的,这个构造方法使用的种子是当前的毫秒值(时间戳)
**Random(long seed):**生成的随机数是有规律的,这个构造方法使用的种子是由用户指定的
**成员方法:用于生成随机数**
**Random对象.nextInt():** //返回一个整型范围内的随机数
例1:使用Random()默认种子

三次运行结果:

例2:指定种子

三次运行结果:

**Random对象.nextInt(int n):** //返回指定范围n内的随机数(从0\~n,不包括n)

三次运行结果:

**生成其它类型随机数的成员方法:**

**生成区间随机数:**
生成从start到end-1之间的随机整数:
Random对象.nextInt(end-start) + start;

-
JavaSE 常用类-Math类-数学模块
http://flayerveo.com/index.php/archives/3161/
2020-11-19T05:14:55+00:00
注意:Math位于Java的Lang包中,因为Lang包默认已经被Java导入,所以不用额外导入,可直接使用。
1. **Math.pow(a,b)** **//求平方数**
a:底数
b:指数
返回值:a的b次幂
返回值类型:double类型
实例:

结果:

1. **Math.abs(a)** **//求绝对值**
a:数值
返回值:a的绝对值
返回值类型:根据a的类型而定
实例:

结果:

1. **Math.max(a,b)** **//返回最大值**
a:第一个数值
b:第二个数值
返回值:返回两个相同类型数值的最大值
返回值类型:根据a与b的类型而定
实例:

结果:

1. **Math.min(a,b)** **//返回最小值**
a:第一个数值
b:第二个数值
返回值:返回两个相同类型数值的最小值
返回值类型:根据a与b的类型而定
实例:

结果:

1. **Math.round(a)** **//四舍五入**
a:一个浮点数
返回值:返回最接近a的整数
返回值类型:整数(int)或长整型(long)
实例:

结果:

1. **Math.random()** **//生成随机数**
返回值:返回一个随机数
返回值类型:返回的随机数为双精度(double)类型
实例:

结果:

1. **Math.sqrt(a)** **//开平方**
a:被开方数
返回值:返回a的平方根
返回值类型:双精度(double)
实例:

结果:

-
JavaSE 常用类-LocalDateTime等 - 新时间API
http://flayerveo.com/index.php/archives/3146/
2020-11-19T05:12:31+00:00

**旧时间API-Date的缺点:**Data创建出来的对象可变的,然而时间应该是不可变的
# 新时间API:
**LocalDate:**对日期进行处理,只包含年月日
**LocalTime:**对时间进行处理,只包含时分秒
**LocalDateTime:**对日期与时间进行处理,格式为ISO-8601的完整的时间格式
**注意:**这三个时间API不提供公共构造方法,无法直接new,需要通过内部的静态方法创建对象。创建方法均为 类名 对象名 = 类名.now();

**LocalDate:**

结果:
**LocalTime:**

结果:
**LocalDateTime:**

结果:
**三个时间API间的转换:**

结果: 
-
JavaSE 常用类-Calendar类-日历类
http://flayerveo.com/index.php/archives/3126/
2020-11-19T05:04:27+00:00
# Calendar类:
**注意:**Calendar是个抽象类,不能通过new创建对象。Calendar中创建了一个静态方法getInstance(),这个静态方法调用了一个继承于Calendar的类,该类中实现了各种功能的具体方法。
**Calendar中getInstance()方法的解释:**
其中Demo可以看作Calendar类,Demo2可以看作实现具体方法的类。

**Calendar类创建对象:**
**格式:**Calendar 对象 = Calendar.getInstance()
**Calendar类的成员方法:**
**1. 获取当前毫秒值(时间戳):**
格式:对象.getTimeInMillis()
实例:
结果:
**2. 返回一个Date类对象的当前时间:**
格式:对象.getTime()
实例:
结果:
**3. 返回日历中的时间信息:**
格式:对象.get(Calendar静态成员变量)
**Calendar静态成员变量:**
Calendar.YEAR //日历中的年份
Calendar.MONTH //日历中的月份
Calendar.DAY\_OF\_MONTH //日历中的天
Calendar.HOUR //时
Calendar.MINUTE //分
Calendar.SECOND //秒
实例:
结果:
**4. 设置日历中的时间信息:**
格式:对象.set(Calendar静态成员变量, 新时间)
实例:
结果:
\5. 修改日历中的时间信息:
格式:对象.add(Calendar静态成员变量, 新时间)
实例:
结果: 当前年份为2020, 加5后为2025, 减5后又为2020。
-
JavaSE 常用类-Arrays类-数组处理
http://flayerveo.com/index.php/archives/3114/
2020-11-19T05:02:56+00:00
# Arrays类
java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法。
## 常用方法:
**1.数组排序: sort()**
功能:对数组进行排序,直接作用于被调用的数组
格式1:Arrays.sort(数组)
格式2:Arrays.sort(数组, 起索引, 尾索引) //对数组中从起索引到尾索引-1之间的所有元素排序

**2.查找数组中的元素:binarySearch()**
功能:使用二分法查找数组中对应的元素
注意:只能对排序后的数组操作,如果成功找到会返回int类型的索引位置,失败返回负数
格式1:Arrays.binarySearch(数组, 要查找的元素) //元素类型必须与数组类型对应
格式2:Arrays.binarySearch(数组, 要查找的元素, 起索引, 尾索引) //从数组中从起索引到尾索引-1之间的范围查找元素索引

结果:
1 2 3
**3.相等判断: deepEquals()**
功能:判断两个数组是否相同,和equals()的区别在于可以对多级数组进行判断。
格式:Arrays.deepEquals(数组1, 数组2)
返回值:布尔值

结果:true
**4. 转为字符串:deepToString()**
功能:将数组转为字符串类型,和toString()的区别在于可以对多级数组进行操作。
格式:Arrays.deepToString(数组)
返回值:字符串

结果:

-
JavaSE 14.XML&JSON-SAX解析
http://flayerveo.com/index.php/archives/3108/
2020-11-19T05:01:41+00:00
## SAX解析:
**介绍:**边读边解析不能停,读到特定标签时,自动调用相应方法进行操作
**优点:**由于是一个元素一个元素的解析,所以不会造成内存溢出
**缺点:**不能修改xml文件
**SAX解析XML:**
首先需要创建一个实现了contentHandler接口的类,但由于contentHandler里要实现的方法过多,所以我们只继承它默认的实现类DefaultHandler

**然后重写其中的一些方法:**文档开始处理、文档结束处理、标签开始处理、标签结束处理、文本处理。

**最后调用该类实现SAX解析:**

```java
//获取工厂
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = parserFactory.newSAXParser();
//获取xmlReader通过这个reader可以试着 ContentHandler
XMLReader xmlReader = saxParser.getXMLReader();
//给xmlReader设置contentHandler ,contentHandler是接口 里面太多的方法没实现
//不去直接实现contenthandler 而是继承它默认的实现 DefaultHandler
xmlReader.setContentHandler(new Myhandler());
//解析xml文档
xmlReader.parse("book.xml");
```
**运行结果:**

-
JavaSE 14.XML&JSON-PULL解析
http://flayerveo.com/index.php/archives/3102/
2020-11-19T05:00:27+00:00
## PULL解析:
**需要额外导入包:**

**PULL解析XML:**
**// 准备需要被解析的XML文件,目的是将该文件解析成ArrayList集合**

```java
// 步骤一:获取工厂
XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
// 步骤二:获取到xml的解析器
XmlPullParser parser = parserFactory.newPullParser();
// 步骤三:给解析器设置一个输入源 第1个参数为输入流,第2个参数为字符编码集
parser.setInput(new FileInputStream(new File("XML文件")), "字符集");
parser的常用方法:
parser.getEventType() 获取事件类型,事件类型如下:
int START_DOCUMENT = 0; 文档开始
int END_DOCUMENT = 1; 文档结束
int START_TAG = 2; 标签开始
int END_TAG = 3; 标签结束
int TEXT = 4; 文本内容
int CDSECT = 5;
int ENTITY_REF = 6;
int IGNORABLE_WHITESPACE = 7;
int PROCESSING_INSTRUCTION = 8;
int COMMENT = 9;
int DOCDECL = 10;
parser.next() 解析下一个节点元素
parser.getName() 获取当前的节点元素的名字
parser.nextText() 获取下一个节点元素的内容
```
**// 步骤四:根据事件类型机进行相应的操作**
创建集合存储的类:

```java
public class PullParserTest {
public static void main(String[] args) throws Exception {
ArrayList books = null;
Book book = null;
// 获取工厂
XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
// 获取到xml的解析器
XmlPullParser parser = parserFactory.newPullParser();
// 给解析器设置一个输入源: 第1个参数为输入流,第2个参数为文档用到的字符编码集
parser.setInput(new FileInputStream(new File("book.xml")), "utf-8");
// 获取当前事件类型
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) { // 当文档标签不为结束时
switch (eventType) {
case XmlPullParser.START_TAG: // 当文档标签为开始标签时
//parser.getName 获取当前事件对应的元素名字
if ("书架".equals(parser.getName())) { // 如果标签名为"书架"则创建一个集合
books = new ArrayList();
} else if ("书".equals(parser.getName())) { // 如果标签名为"书"则创建一个book对象
book = new Book();
} else if ("书名".equals(parser.getName())) { // 给book 对象设置书名的属性
// parser.nextText()获取当前节点的下一个文本内容
book.setTitle(parser.nextText());
} else if ("作者".equals(parser.getName())) { // 给book 对象设置作者的属性
book.setAuthor(parser.nextText());
} else if ("售价".equals(parser.getName())) { //给book 对象设置售价的属性
book.setPrice(parser.nextText());
}
break;
case XmlPullParser.END_TAG: // 当文档标签为结束标签时
if ("书".equals(parser.getName())) {
//把book 对象添加到集合中
books.add(book);
}
break;
}
// 调用parser.next方法解析下一个元素 用这个结果来更新eventType 如果解析到文档结束那么就会推出循环
// 如果不更新这个eventType 就是死循环
eventType = parser.next();
}
//遍历books集合
for (Book book1 : books) {
System.out.println(book1);
}
}
}
```