1、System类
- (1)System:该类没有构造方法,所以字段和成员方法都用静态修饰
(2) 常用的两个字段: in ,out。
(3)常用的成员方法:
public static void gc():运行垃圾回收器。
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存,最终调用的就是重写之后finalize()回收不用的对象!
public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
public static long currentTimeMillis():返回当前的时间毫秒值
public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length):指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
2. Calendar:日历类:
1、Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
2、创建对象
* public static Calendar getInstance()
* public int get(int field):返回给定日历字段的值
* public static final int YEAR :表示日历中 的年
* public static final int MONTH :月份:是0开始计算的
* public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天
3、Date类:日期类:
表示特定的瞬间,精确到毫秒。
1、常用的构造方式:
public Date():表示分配的一个Date对象:无参: 通过无参构造获取当前系统的具体的时间
public Date(long date):指定一个时间毫秒值 和它1970-1-1 00:00:00有时间差
2、Date中的两个成员方法
public long getTime():获取当前时间毫秒值
如果知道Date对象,可以通过getTime()获取时间毫秒值
public void setTime(long time): 设置时间
3、将Date对象—>String类型的日期的”文本格式”:格式化
* public final String format(Date date)
* String类型日期的”文本格式”—->Date日期对象:解析
* public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)
*
* 要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
* 日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化,但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化:SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
* 常用的构造方法:
* Date—格式化—>String文本格式
*
* public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
*
* 日期和时间模式
* y 年 比如:2017—->yyyy
* M 年中的月份:2——>MM
* d 月份中的天数 :—–>dd
* H 小时 HH
* m 小时中的分钟数 mm
* s 分钟中的秒数 ss
4、选择排序
数组的0索引依次和后面的索引进行比较,对应的元素小的往前方法,依次比较,就可以得到一个排好序的数组
package org.westos.homework;
/**
* 现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1
*/
import java.util.Arrays;
public class HomeWork02 {
public static int search(int[] arr,int key) {
Arrays.sort(arr);
//System.out.println(Arrays.toString(arr));
int start = 0;
int end = arr.length-1;
while(start <= end) {
int middle = (start + end)/2;
if(key < arr[middle]) {
end = middle-1;
}else if(key > arr[middle]) {
start = middle+1;
}else{
return middle;
}
}
return -1;
}
public static void main(String[] args) {
int [] arr = {80,40,50,45,90,120,30,20,100};
System.out.println(search(arr, 40));
System.out.println(search(arr, 30));
System.out.println(search(arr, 100));
}
}
运行结果:[19, 20, 50, 56, 79]
5、正则表达式
正则表达式常用的语法:
A:字符
x 字符 x :任意的字符
\ 反斜线字符 在代码中书写正则表达式:——>用两个\代表一个反斜线
\t 制表符 (‘\u0009’)
\n 新行(换行)符 (‘\u000A’) IO流中要写入换行符号:windows “\r\n”
\r 回车符 (‘\u000D’)
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) :当前字母大小均可
C:预定义字符类
. 任何字符 邮箱里面:如果本身就是.,那么在写正在表达式的时候,\.将当前.转义
\d 数字:[0-9] \d在正则表达式应用的时候:[0-9]--->\\d
\w 单词字符:[a-zA-Z_0-9]:简单一些字符串,单词字符(规则:数字或者字母)
javascript:[a-zA-Z0-9]
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界 :
hello;world:haha:xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
6、集合
集合的由来:
* 我们学习java的语言,是一种面向对象语言,面向对象语言对事物的描述是通过对象体现出来的,那么存储很多个学生,就需要使用容器变量进行存储
* 目前:学习过哪些容器变量呢?
* 数组,StringBuffer/StringBuilder,对于数组来说,数组的长度是固定的,不符合实际需求(长度不可变);对于StringBuffer来说始终在内存中返回
* 的是字符串类型,也不满足元素类型变化的要求;所以,Java就提供了一个技术:集合!
*
* 面试题:
* 集合和数组的区别?
* 1)长度的区别:
* 数组:长度是固定的;
* 集合:长度是可变的
* 2)存储数据类型的区别:
* 数组:可以存储引用类型,可以存储基本数据类型
* 集合:只能存储引用类型
* 3)存储元素的区别
* 数组:在同一个数组中,只能存储同一种数据类型的元素;举例 数组:杯子:只能装水
* 集合:可以 存储多种数据类型的元素; 举例:集合:杯子:装水,其他饮料…
*
* 集合是可以存储多种类型的元素,但是,需求如果变化,针对集合来说,Java提供了很多集合类,每一种集合类的数据结构不一样,所以,将他们之间的共性内容抽取出来,就行了
* 一个集合的继承体系图!
*
* 数据结构:存储数据的方式
*
* Collection: 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。
* 一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现
*
* Collection的一些功能
* 添加功能:
* boolean add(Object e):给集合中添加指定的元素
* boolean addAll(Collection c):添加一个集合中的所有元素
* 删除功能:
* void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)
* boolean remove(Object o):删除一个集合中的指定元素
* boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
* 判断功能:
* boolean contains(Object o):判断一个集合中是否包含指定的单个元素
* boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有.
* boolean isEmpty():判断集合是否为空,如果为空,则返回true
*
* 交集功能:
* boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
* 获取功能;
* int size():获取集合中的元素数
* Iterator iterator():迭代器
* 转换功能:
* Object[] toArray():将集合转换成数组
*
* 面试题:
* 数组中有没有length(),String类中有没有length(),集合中有没有length()?
* 数组:length属性
* String:length()
* 集合中:size()
集合的专有遍历方式:
*使用集合自己本身迭代功能遍历集合中的元素
* Iterator iterator():迭代器
* Iterator:迭代器:接口
* 成员方法:Object next()返回迭代的下一个元素:获取功能
* boolean hasNext():判断一个集合中是否有下一个可以迭代的元素:判断功能
//boolean addAll(Collection c):添加一个集合中的所有元素
System.out.println("addAll:"+c1.addAll(c2));
//boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
//删除一个算是删除
//System.out.println("removeAll:"+c1.removeAll(c2));
// boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有
System.out.println("containsAll:"+c1.containsAll(c2));//包含所有算是包含
//boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
/**
* 面试题:
* A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false
*/
System.out.println("retianAll:"+c1.retainAll(c2));