一、常用类
1、Math类
(1)Math类提供了一系列基本数学运算和几何函数的方法。
(2)Math类是final类,并且它的所有成员变量和成员方法都是静态的。
Math类的常用属性和方法
静态常量----PI:圆周率的double值
静态方法
实例:
package common;
public class MathDemo {
public static void main(String[] args) {
double powResult = Math.pow(2,3);
System.out.println("2的3次方:" + powResult);
System.out.println("8的平方根:" + Math.sqrt(8));
System.out.println("-9的绝对值:" + Math.abs(-9));
System.out.println("8.000001向上取整:" + Math.ceil(8.000001));
System.out.println("9.999999向下取整:" + Math.floor(9.999999));
System.out.println("5.4999四舍五入的结果:" + Math.round(5.4999));
System.out.println("8.5001四舍五入的结果:" + Math.round(8.5001));
System.out.println("随机返回一个从0.0(包括)到1.0(不包括)的值:" + Math.random());
int ran = (int)(Math.random()*16)+3;
System.out.println("随机返回3到18的数字:" + ran);
System.out.println("圆周率是:" + Math.PI);
}
}
运行结果:
2的3次方:8.0
8的平方根:2.8284271247461903
-9的绝对值:9
8.000001向上取整:9.0
9.999999向下取整:9.0
5.4999四舍五入的结果:5
8.5001四舍五入的结果:9
随机返回一个从0.0(包括)到1.0(不包括)的值:0.8371580065823131
随机返回3到18的数字:5
圆周率是:3.141592653589793
2、Random类
Random类的对象可以生成“伪随机数”。
常用方法:
public int nextInt(int bound)
返回值0(包含0)到bound(不包含)的一个“伪随机整数值”
public boolean nextBoolean()
返回一个“伪随机”的boolean值
实例:
package common;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random ran = new Random();
int result = ran.nextInt(16) + 3;
System.out.println("随机返回3到18的数字:" + result);
System.out.println("随机返回boolean值:" + ran.nextBoolean());
}
}
运行结果:
随机返回3到18的数字:6
随机返回boolean值:false
3、System类
(1)成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
(2)成员方法
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
参数解释:
src:源数组 srcPos:指定在源数组中的开始位置
dest:目的数组 destPos:目标数组的指定位置 length:要复制的源数组元素的长度(即复制多少个元素)
exit()方法
a:public static void exit(int status)
b:该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面中实现程序的退出功能等。
gc()方法
a:public static void gc()
b:该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
currentTimeMillis方法
a:public static long currentTimeMillis()
b:以毫秒为单位返回从1970年1月1日午夜到当前时间的毫秒数
实例1:
package common;
public class SystemDemo {
public static void main(String[] args) {
System.out.println("正常输出信息...");
System.err.println("输出标准错误信息...");
int[] a = {1,2,3,4};
int[] b = new int[5];
System.arraycopy(a,1,b,3,2);//数组拷贝
for(int x : b) {
System.out.print(x + " ");
}
System.out.println();
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
}
long endTime = System.currentTimeMillis();
System.out.println("共用时:" + (endTime - startTime) + "毫秒");
System.exit(0);//正常退出程序
}
}
运行结果:
正常输出信息...
输出标准错误信息...
0 0 0 2 3
共用时:4毫秒
实例2:垃圾回收
package common;
public class Person {
//在对象被JVM的gc收回之前,会先调用这个办法
@Override
protected void finalize() throws Throwable {
System.out.println("对象被收回之前做的事情...");
}
}
package common;
public class FinalizeDemo {
public static void main(String[] args) {
Person per = new Person();
per = null;//将per引用置为null,使堆内存中的Person对象变为“垃圾”
System.gc();//显示请求JVM进行垃圾回收
}
}
运行结果:
对象被收回之前做的事情...
4、Runtime类
(1)作用:使应用程序与其运行的环境相关联
(2)通过使用getRuntime()静态方法获得实例。
exec(String command)在单独的进程中执行指定的字符串命令,该方法返回Process对象,使用Process对象的destory()方法可以杀掉进程
实例:
package common;
import java.io.IOException;
import java.util.Scanner;
public class RuntimeDemo {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
rt.gc();//显示请求JVM进行垃圾回收gc
System.out.println("当前JVM内存总量是:" + rt.totalMemory() + "字节");
System.out.println("JVM试图使用的最大内存量:" + rt.maxMemory() + "字节");
System.out.println("当前JVM的空闲内存量:" + rt.freeMemory() + "字节");
try {
rt.exec("notepad");//打开记事本
rt.exec("calc");//打开计算器
Process qq = rt.exec("D:\\QQ\\Bin\\QQ.exe");//打开QQ进程
Scanner input = new Scanner(System.in);
System.out.println("要关闭QQ吗?y/n");
String choice = input.next();
if("y".equals(choice)) {
qq.destroy();//销毁QQ进程
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
当前JVM内存总量是:64487424字节
JVM试图使用的最大内存量:937951232字节
当前JVM的空闲内存量:63505632字节
要关闭QQ吗?y/n
y
打开记事本、计算器和QQ的结果图在这里就不展示了
5、Date类与SimpleDateFormat类
(1)Date类:表示日期和时间
提供操作日期和时间各组成部分的方法
(2)SimpleDateFormat类
用于定制日期时间的格式
Date date = new Date();//创建日期对象
//定制日期格式
SimpleDateFormat adf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = sdf.format(date);
System.out.println(now);
实例:
package common;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
//传递日期模板,实例化SimpleDateFromat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss.SSS");
System.out.println("现在时刻:" + sdf.format(date));
}
}
运行结果:
Sat Mar 17 21:47:10 CST 2018
现在时刻:2018-03-17 21-47-10.244
6、Calendar类
抽象类
用于设置和获取日期/时间数据的特定部分
Calendar类提供了一些方法和静态字段来操作日历
实例:
package common;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println("第几个月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("当前月的第 几天:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("星期几:" + (cal.get(Calendar.DAY_OF_WEEK) - 1));
System.out.println("今年的第几天:" + cal.get(Calendar.DAY_OF_YEAR));
System.out.println("*************************");
cal.set(1937,6,7);//调整日历
System.out.println("第几个月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("当月的第几天:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("星期几:" + (cal.get(Calendar.DAY_OF_WEEK) - 1));
System.out.println("今年的第几天:" + cal.get(Calendar.DAY_OF_YEAR));
}
}
运行结果:
第几个月:3
当前月的第 几天:17
星期几:6
今年的第几天:76
*************************
第几个月:7
当月的第几天:7
星期几:3
今年的第几天:188
二、正则表达式
1、正则表达式(regex)是使用字符串来描述、匹配一系列符合某个句法规则的字符串
2、用途:
匹配、切割、替换、获取字符串
3、正则表达式由一些普通字符和一些元字符组成
元字符:指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(位于元字符前面的字符)在目标对象中的出现模式;是一个或一组代替一个或多个字符的字符,如元字符*用来匹配0个或多个的前一字符。
4、常见元字符
实例:
package regex;
import java.util.Scanner;
public class PhoneNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入手机号码:");
String phone = input.next();
if(phone.matches("1\\d{10}")) {
System.out.println("恭喜,手机号码符号要求");
}else {
System.out.println("不符合要求!");
}
}
}
运行结果:
不符合要求!
"\"到底是个啥?
在Java中反斜线"\"有三种含义:
1、反斜线后面可以加特定字符,组成所谓的“转义字符”。eg:\n \t
2、用于取消元字符的意义,使元字符变为普通字符。eg:"\\"代表"\"
3、用于组成正则表达式中的元字符。
eg:"\d"在正则表达式中代表“匹配一个数字字符”。
Pattern类与Matcher类
1、Pattern类与Matcher类都在java.util.regex包中定义。
2、Pattern类的对象代表正则表达式编译之后的对象;Matcher类主要用于执行验证。
3、Pattern类的主要方法:
public static Pattern compile(String regex);
public Matcher matcher(CharSequence input)
Matcher类的主要方法:
public boolean matches();
实例1:
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatch {
public static void main(String[] args) {
String birthday = "1996-02-25";
String regex = "\\d{4}-\\d{2}-\\d{2}";
Pattern pat = Pattern.compile(regex);//将正则表达式封装到Pattern对象中
//创建一个匹配器Matcher,该Matcher对象可以根据正则表达式判断传入的字符串是否符合要求
Matcher mat = pat.matcher(birthday);
if(mat.matches()) {
System.out.println("匹配成功!");
}else {
System.out.println("匹配失败...");
}
}
}
运行结果:
匹配成功!
实例2:
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GroupRegex {
public static void main(String[] args) {
String str = "abchello123regexhello56789javascriptsahhjhkhkhdhkdsadadhello99rhjbdsdms";
String regex = "\\w+(hello\\d+)\\w+(hello\\d+)";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(str);
System.out.println(mat.find());
System.out.println(mat.group(0));
System.out.println(mat.group(1));
System.out.println(mat.group(2));
}
}
运行结果:
true
abchello123regexhello56789javascriptsahhjhkhkhdhkdsadadhello99
hello56789
hello99
String类对正则表达式的支持
1、public boolean matches(String regex)
判断字符串是否与给定的正则表达式匹配。
2、public String replaceAll(String regex,String replacement)
字符串替换
3、public String[] split(String regex)
字符串拆分
实例:
package regex;
public class StringRegex {
public static void main(String[] args) {
String str = "hellojava22regex333python4444C55555";
if(str.matches("\\w+")) {//验证一个或多个非下划线的单个字符
System.out.println("匹配成功!");
}
//将字符串str中的重复数字用#替换
System.out.println("替换后的字符串为:" + str.replaceAll("\\d+","#"));
//将字符串拆分后输出
String country = "中国|美国|俄罗斯|德国";
String[] array = country.split("\\|");
for(String c : array) {
System.out.print(c + " ");
}
}
}
运行结果:
匹配成功!
替换后的字符串为:hellojava#regex#python#C#
中国 美国 俄罗斯 德国
补充:
1、正则表达式中的问号?有两种作用:
第一种作用:重复前面表达式0次或1次。
第二种作用:在表示次数的元字符后加上?代表取消默认的贪婪匹配模式,变为“非贪婪匹配模式”
贪婪匹配模式:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配,
如:String str = "abcfgh";
Pattern p = "ab*h";
贪婪匹配的结果就是:abcfgh(ab*h)
实例:
package regex;
public class GreedyRegex {
public static void main(String[] args) {
String str = "abbbbbbbb";
//"贪婪匹配"
System.out.println("贪婪模式匹配:" + str.replaceAll("ab+","#"));
System.out.println("非贪婪模式匹配:" + str.replaceAll("ab+?","#"));
}
}
运行结果:
贪婪模式匹配:#
非贪婪模式匹配:#bbbbbbb
三、枚举类型
1、枚举类型使用一组常量值来表示特定的数据集合,该集合中数据的数目确定(通常较少),且这些数据只能取预先定义的值。
2、java枚举类型均自动继承java.lang.Enum类(该类继承了Object类)
声明枚举类型:
[public] enum 枚举类型名称{
枚举对象1,枚举对象2,...,枚举对象n;
}
eg: public enum Color{
RED,GREEN,BLUE;
}
获取枚举对象的两种方法:
方法一:取得单个枚举对象
枚举.对象名
方法二:取得全部枚举对象
枚举.values()
注意:枚举.values()返回的是一个对象数组,可以通过遍历该对象数组获取所有枚举对象。
实例1:
package enumdemo;
public enum SexEnum {
MALE("我是男生", 1), FEMALE("我是女生", 2);
private String name;
private int id;
private SexEnum() {
}
// 枚举类型的构造方法必须是private
private SexEnum(String name, int id) {
this.name = name;
this.id = id;
}
// 自定义的方法,通过id查找枚举对象
public static SexEnum findSexById(int id) {
for (SexEnum sex : SexEnum.values()) {
if (sex.id == id) {
return sex;
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
package enumdemo;
public class TestSex {
public static void main(String[] args) {
SexEnum sex = SexEnum.findSexById(1);
System.out.println(sex);
}
}
运行结果:
MALE
实例2:
package enumdemo;
public enum ColorEnum {
RED,YELLOW,BLUE;
}
package enumdemo;
public class TestColor {
public static void main(String[] args) {
ColorEnum r = ColorEnum.RED;
System.out.println(r);
System.out.println("遍历所有枚举对象:");
for(ColorEnum c : ColorEnum.values()) {
System.out.print(c + " ");
}
}
}
运行结果:
RED
遍历所有枚举对象:
RED YELLOW BLUE