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 ![](http://www.flayerveo.com/usr/uploads/2020/12/2928677720.png) # DateFormat类: **导入包:**import java.text.SimpleDateFormat; **介绍:**DateFormat类是日期/时间格式化子类的抽象类,因为是抽象类,所以不能实例化,所以我们要用它的子类SimpleDateFormat来实现**日期**与**字符串**的格式化和解析操作。 1、 Date>String>格式化 (指定的格式化转换) 2、 String>Date>解析 (日期格式的模板) **SimpleDateFormat的格式化符号:** ![](http://www.flayerveo.com/usr/uploads/2020/12/741281417.png) **格式化字符串为时间对象 String转Date:** ![](http://www.flayerveo.com/usr/uploads/2020/12/869993966.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/12/1001070121.png) **解析时间对象为字符串Date转String:** ![](http://www.flayerveo.com/usr/uploads/2020/12/2782133915.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/12/991667049.png) **注意:**在解析字符串的时候,这个字符串一定是和SimpleDateFormat的模板格式是匹配的 **将java.util.Date 转为 java.sql.Date:** java.util.Date使用getTime()方法获取当前毫秒值,然后再传给java.sql.Date ![](http://www.flayerveo.com/usr/uploads/2020/12/2280566421.png) 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() **例:** ![](http://www.flayerveo.com/usr/uploads/2020/11/3977625108.png) 注意:不要在程序中频繁的垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器,这回耗费更多的资源,会与正常运行的程序争夺资源,只有在执行大量的对象的释放时才调用垃圾回收。 **System.exit()方法:** **功能:**终止当前运行的Java虚拟机。 **格式:**System.exit(int status) //status为0时表示正常退出,非0时表示异常终止 **例:** ![](http://www.flayerveo.com/usr/uploads/2020/11/1980052397.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/2627090818.png) **System.currentTimeMillis()方法:** **功能:**返回long类型的当前时间戳 **格式:**System.currentTimeMillis() **例:** ![](http://www.flayerveo.com/usr/uploads/2020/11/829004890.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/2671814555.png) **System.arraycopy()方法:** **功能:**复制一个数组中的一个部分元素到另一个数组中去 **格式:**System.arraycopy(数组1, 数组1的起索引, 数组2, 数组2的起索引, 复制几个元素) **例:** ![](http://www.flayerveo.com/usr/uploads/2020/11/666123616.png) **System.getProperty()方法:** **功能:**获取命令行传入的参数 **格式:**System.getProperty("参数名") **例:**获取命令行传入的user,passwd参数 (注意要先打包成jar文件) ![](http://www.flayerveo.com/usr/uploads/2020/11/3825173629.png) JavaSE 常用类-Runtime类 http://flayerveo.com/index.php/archives/3175/ 2020-11-19T05:17:25+00:00 **功能:**主要用于统计内存对性能进行调整。 ![](http://www.flayerveo.com/usr/uploads/2020/11/2368204647.png) **方法实现:** ![](http://www.flayerveo.com/usr/uploads/2020/11/4235531430.png) **注意:**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(); ``` ![](http://www.flayerveo.com/usr/uploads/2020/11/4010140429.png) 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()默认种子 ![](http://www.flayerveo.com/usr/uploads/2020/11/3467379199.png) 三次运行结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/2590561103.png) 例2:指定种子 ![](http://www.flayerveo.com/usr/uploads/2020/11/3034158094.png) 三次运行结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/3430118258.png) **Random对象.nextInt(int n):** //返回指定范围n内的随机数(从0\~n,不包括n) ![](http://www.flayerveo.com/usr/uploads/2020/11/671032105.png) 三次运行结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/3968896589.png) **生成其它类型随机数的成员方法:** ![](http://www.flayerveo.com/usr/uploads/2020/11/2205219905.png) **生成区间随机数:** 生成从start到end-1之间的随机整数: Random对象.nextInt(end-start) + start; ![](http://www.flayerveo.com/usr/uploads/2020/11/2817052248.png) 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类型 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/2432659816.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/174633487.png) 1. **Math.abs(a)** **//求绝对值** a:数值 返回值:a的绝对值 返回值类型:根据a的类型而定 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/1598178643.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/3251508518.png) 1. **Math.max(a,b)** **//返回最大值** a:第一个数值 b:第二个数值 返回值:返回两个相同类型数值的最大值 返回值类型:根据a与b的类型而定 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/159395097.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/2200235363.png) 1. **Math.min(a,b)** **//返回最小值** a:第一个数值 b:第二个数值 返回值:返回两个相同类型数值的最小值 返回值类型:根据a与b的类型而定 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/2169458176.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/2839350367.png) 1. **Math.round(a)** **//四舍五入** a:一个浮点数 返回值:返回最接近a的整数 返回值类型:整数(int)或长整型(long) 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/3780344241.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/33745456.png) 1. **Math.random()** **//生成随机数** 返回值:返回一个随机数 返回值类型:返回的随机数为双精度(double)类型 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/1002056220.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/817169157.png) 1. **Math.sqrt(a)** **//开平方** a:被开方数 返回值:返回a的平方根 返回值类型:双精度(double) 实例: ![](http://www.flayerveo.com/usr/uploads/2020/11/3590373633.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/2589891201.png) JavaSE 常用类-LocalDateTime等 - 新时间API http://flayerveo.com/index.php/archives/3146/ 2020-11-19T05:12:31+00:00 ![](http://www.flayerveo.com/usr/uploads/2020/11/94595512.png) **旧时间API-Date的缺点:**Data创建出来的对象可变的,然而时间应该是不可变的 # 新时间API: **LocalDate:**对日期进行处理,只包含年月日 **LocalTime:**对时间进行处理,只包含时分秒 **LocalDateTime:**对日期与时间进行处理,格式为ISO-8601的完整的时间格式 **注意:**这三个时间API不提供公共构造方法,无法直接new,需要通过内部的静态方法创建对象。创建方法均为 类名 对象名 = 类名.now(); ![](http://www.flayerveo.com/usr/uploads/2020/11/2772280868.png) **LocalDate:** ![](http://www.flayerveo.com/usr/uploads/2020/11/559896295.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/3366073462.png) **LocalTime:** ![](http://www.flayerveo.com/usr/uploads/2020/11/2495559606.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/3052982833.png) **LocalDateTime:** ![](http://www.flayerveo.com/usr/uploads/2020/11/1159978868.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/2629424028.png) **三个时间API间的转换:** ![](http://www.flayerveo.com/usr/uploads/2020/11/1077047143.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/3498050799.png) 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可以看作实现具体方法的类。 ![](http://www.flayerveo.com/usr/uploads/2020/11/2431655726.png) **Calendar类创建对象:** **格式:**Calendar 对象 = Calendar.getInstance() **Calendar类的成员方法:** **1. 获取当前毫秒值(时间戳):** 格式:对象.getTimeInMillis() 实例:![](http://www.flayerveo.com/usr/uploads/2020/11/1305167663.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/2830201168.png) **2. 返回一个Date类对象的当前时间:** 格式:对象.getTime() 实例:![](http://www.flayerveo.com/usr/uploads/2020/11/1340085156.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/2965319272.png) **3. 返回日历中的时间信息:** 格式:对象.get(Calendar静态成员变量) **Calendar静态成员变量:** Calendar.YEAR //日历中的年份 Calendar.MONTH //日历中的月份 Calendar.DAY\_OF\_MONTH //日历中的天 Calendar.HOUR //时 Calendar.MINUTE //分 Calendar.SECOND //秒 实例:![](http://www.flayerveo.com/usr/uploads/2020/11/372737728.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/1403310222.png) **4. 设置日历中的时间信息:** 格式:对象.set(Calendar静态成员变量, 新时间) 实例:![](http://www.flayerveo.com/usr/uploads/2020/11/658560578.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/74670577.png) \5. 修改日历中的时间信息: 格式:对象.add(Calendar静态成员变量, 新时间) 实例:![](http://www.flayerveo.com/usr/uploads/2020/11/3672766857.png) 结果:![](http://www.flayerveo.com/usr/uploads/2020/11/3182603161.png) 当前年份为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之间的所有元素排序 ![](http://www.flayerveo.com/usr/uploads/2020/11/2476886287.png) **2.查找数组中的元素:binarySearch()** 功能:使用二分法查找数组中对应的元素 注意:只能对排序后的数组操作,如果成功找到会返回int类型的索引位置,失败返回负数 格式1:Arrays.binarySearch(数组, 要查找的元素) //元素类型必须与数组类型对应 格式2:Arrays.binarySearch(数组, 要查找的元素, 起索引, 尾索引) //从数组中从起索引到尾索引-1之间的范围查找元素索引 ![](http://www.flayerveo.com/usr/uploads/2020/11/1563781188.png) 结果: 1 2 3 **3.相等判断: deepEquals()** 功能:判断两个数组是否相同,和equals()的区别在于可以对多级数组进行判断。 格式:Arrays.deepEquals(数组1, 数组2) 返回值:布尔值 ![](http://www.flayerveo.com/usr/uploads/2020/11/4279342617.png) 结果:true **4. 转为字符串:deepToString()** 功能:将数组转为字符串类型,和toString()的区别在于可以对多级数组进行操作。 格式:Arrays.deepToString(数组) 返回值:字符串 ![](http://www.flayerveo.com/usr/uploads/2020/11/3224664465.png) 结果: ![](http://www.flayerveo.com/usr/uploads/2020/11/1985022579.png) 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 ![](http://www.flayerveo.com/usr/uploads/2020/11/3016614349.png) **然后重写其中的一些方法:**文档开始处理、文档结束处理、标签开始处理、标签结束处理、文本处理。 ![](http://www.flayerveo.com/usr/uploads/2020/11/562944235.png) **最后调用该类实现SAX解析:** ![](http://www.flayerveo.com/usr/uploads/2020/11/4148118530.png) ```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"); ``` **运行结果:** ![](http://www.flayerveo.com/usr/uploads/2020/11/2644077702.png) JavaSE 14.XML&JSON-PULL解析 http://flayerveo.com/index.php/archives/3102/ 2020-11-19T05:00:27+00:00 ## PULL解析: **需要额外导入包:** ![](http://www.flayerveo.com/usr/uploads/2020/11/2425315005.png) **PULL解析XML:** **// 准备需要被解析的XML文件,目的是将该文件解析成ArrayList集合** ![](http://www.flayerveo.com/usr/uploads/2020/11/3851868489.png) ```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() 获取下一个节点元素的内容 ``` **// 步骤四:根据事件类型机进行相应的操作** 创建集合存储的类:![](http://www.flayerveo.com/usr/uploads/2020/11/2882034914.png) ![](http://www.flayerveo.com/usr/uploads/2020/11/4184615103.png) ```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); } } } ```