Java第九天學習
Math類是final類,並且它的所有成員變量和成員方法都是靜態的。
double pow (double a, double b) |
計算 a 的 b 次方 |
double sqrt (double a) |
計算給定值的平方根 |
int abs (int a) |
計算 int 類型值 a的絕對值,也接收 long、float 和 double 類型的參數 |
double ceil (double a) |
返回大於等於 a的最小整數的double值 |
double floor (double a) |
返回小於等於 a的最大整數的double值 |
int max(int a, int b) |
返回 int 型值 a 和 b 中的較大值,也接收 long、float 和 double 類型的參數 |
int min(int a, int b) |
返回 a 和 b 中的較小值,也可接收 long、float 和 double 類型的參數 |
int round(float a); |
四捨五入返回整數 |
double random() |
返回帶正號的double值,該值大於等於0.0且小於1.0 |
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("-7.35的絕對值是:"+Math.abs(-7.35));
System.out.println("8.1向上取整:"+Math.ceil(8.1));
System.out.println("9.9向下取整:"+Math.floor(9.9));
System.out.println("8.499四捨五入的結果:"+Math.round(8.499));
System.out.println("8.5四捨五入的結果:"+Math.round(8.5));
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);
}
}
常用方法:
(1). public int nextInt(int bound) (返回從0(包含)到bound(不包含)的一個“僞隨機” 整數值.)
(2).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(12)+3; System.out.println("隨機返回3到14的數字:"+result); System.out.println("隨機返回boolean值:"+ran.nextBoolean()); } }
1.3.System類
System類內部包含in、out和err三個成員變量,分別代表標準輸入流(鍵盤輸入),標準輸出流(顯示器)和標準錯誤輸出流(顯示器)。
(1)成員方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
int[] a = {1,2,3,4};
int[] b = new int[5];
System.arraycopy(a,1,b,3,2);
public static void exit(int status)
該方法的作用是退出程序。其中status的值爲0代表正常退出,非零代表異常退出。使用該方法可以在圖形界面編程中實現程序的退出功能等。
(3)gc()方法
public static void gc()
該方法的作用是請求系統進行垃圾回收。至於系統是否立刻回收,則取決於系統中垃圾回收算法的實現以及系統執行時的情況。
垃圾回收時,會先調用finalize()方法,釋放非java資源
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];//一創建一個長度爲5的新數組
System.arraycopy(a,1,b,3,2); // 數組拷貝,將A處索引爲1的(數字2)開始以後的元素copy到b中(從索引爲3中開始copy)
for(int x:b){
System.out.print(x+" ");
}
System.exit(0); // 退出程序 exit方法
}
}
gc方法:package common;
public class FinalizeDemo {
public static void main(String[] args) {
Person per=new Person();
per=null; // 將per引用置爲null,使堆內存中的Person對象變爲“垃圾”
System.gc(); // 顯式請求JVM進行垃圾回收gc
}
}
public static long currentTimeMillis()
以毫秒爲單位返回從1970年1月1日午夜到當前時間的毫秒數
package common;
public class CurrentTimeMillisDemo {
public static long currentTimeMillis(){
CurrentTimeMillis C=new CurrentTimeMillis();
System.out.println("以毫秒爲單位返回從1970年1月1日午夜到當前時間的毫秒數"+C.currentTimeMillis());
}
}
1.4.Runtime類通過使用getRuntime()靜態方法獲得實例。
exec(String command)在單獨的進程中執行指定的字符串命令,該方法返回Process對象,使用Process對象的 destroy()方法可以殺掉進程
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("E:\Program Files\TGP\tgp_daemon.exe"); // 打開TGP
Scanner scan=new Scanner(System.in);
System.out.print("要打開騰訊遊戲平臺麼?y/n");
String choice=scan.next();
if("y".equals(choice)){
qq.destroy(); // 銷燬進程
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
1.5.Date類與SimpleDateFormat類Date類:表示日期和時間:提供操作日期和時間各組成部分的方法
SimpleDateFormat類:用於定製日期時間的格式
方法:
SimpleDateFormat sdf= 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);
SimpleDateFormat sdf=new SimpleDateFormat("xxxx.xx.xx HH:mm:ss.SSS"); // 傳遞日期模版,實例化SimpleDateFormat對象
System.out.println("現在時刻:"+sdf.format(date));//調用方法
}
}
1.6.Calendar類用於設置和獲取日期/時間數據的特定部分
Calendar類提供一些方法和靜態字段來操作日曆
方法或屬性 |
說明 |
int get(int field) |
返回給定日曆字段的值 |
MONTH |
指示月 |
DAY_OF_MONTH |
指示一個月中的某天 |
DAY_OF_WEEK |
指示一個星期中的某天 |
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));
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));
System.out.println("今年的第幾天:"+cal.get(Calendar.DAY_OF_YEAR));
}
}
二:正則表達式用途:
匹配、切割、替換、獲取字符串
元字符 |
描述 |
^ |
匹配輸入字符串的開始位置 |
$ |
匹配輸入字符串的結束位置 |
\d |
匹配一個數字字符。等價於[0-9] |
\D |
匹配一個非數字字符。等價於[^0-9] |
\s |
匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[ \n\r\t\f] |
\S |
匹配任何非空白字符。等價於[^\n\r\t\f] |
\w |
匹配包括下劃線的任何單個字符。等價於"[A-Za-z0-9_]" |
\W |
匹配任何非單個字符。等價於“[^A-Za-z0-9_]” |
. |
匹配除“\r\n”之外的任何單個字符 |
{n} |
n是一個非負整數。匹配確定的n次 |
{n,} |
n是一個非負整數。至少匹配n次 |
{n,m} |
m和n均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次 |
* |
匹配前面的子表達式零次或多次(大於等於0次) |
?? |
匹配前面的子表達式零次或一次 |
+ |
匹配前面的子表達式一次或多次(大於等於1次) |
1. 反斜線後面可以加特定字符,組成所謂的“轉義字符”。eg: \n \t
2. 用於取消元字符的意義,使元字符變爲普通字符。eg: “\\” 代表”\”。
3. 用於組成正則表達式中的元字符。
eg: “\d” 在正則表達式中代表“匹配一個數字字符”。
2.1.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();
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatch {
public static void main(String[] args) {
String birthday="1994-02-25";
String regex="\\d{4}-\\d{2}-\\d{2}";
Pattern pat=Pattern.compile(regex); // 將正則表達式封裝到Pattern對象中
Matcher mat=pat.matcher(birthday); // 創建一個匹配器Matcher,該Matcher對象可以根據正則表達式判斷傳入的字符串是否符合要求
if(mat.matches()){
System.out.println("匹配成功!");
}else{
System.out.println("匹配失敗...");
}
}
}
2.2.String類對正則表達式的支持1. public boolean matches(String regex)
判斷字符串是否與給定的正則表達式匹配。
2. public String replaceAll(String regex,String replacement) 字符串替換
3. public String[] split(String regex) 字符串拆分
eg:
package regex;
public class StringRegex {
public static void main(String[] args) {
String str="hello1java22regex333python4444C55555";
if(str.matches("\\w+")){
System.out.println("匹配成功!");
}
System.out.println("替換後的字符串爲:"+str.replaceAll("\\d+","#")); //將數字字符替換爲#
String City="西安|綏德|四十鋪|薛家寺";
String[] array=City.split("\\|");
for(String c:array){ //數組拷貝
System.out.print(c+" ");
}
}
}
1. 正則表達式中的問號?有兩種作用:第一種作用:重複前面表達式0次或1次。
第二種作用:在表示次數的元字符後加上? 代表取消默認的貪婪匹配模 式,變爲“非貪婪匹配模式”。
package regex;
public class GreedyRegex {
public static void main(String[] args) {
String str="abbbbbbb";
System.out.println("貪婪模式匹配: "+str.replaceAll("ab+","#")); // "貪婪匹配"
System.out.println("非貪婪模式匹配: "+str.replaceAll("ab+?","#"));
}
}
輸出結果:貪婪模式匹配: #
非貪婪模式匹配: #bbbbbb
練習:中國的郵政編碼都是6位手機號碼都是11位,並且第1位都是1
Email驗證
package regex;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailRegex {
public static void main(String[] args) {
String emailRegex="\\w+@\\w+\\.\\w+\\.?\\w+";
Scanner scan=new Scanner(System.in);
System.out.print("請輸入郵箱:");
String email=scan.next();
Pattern pat=Pattern.compile(emailRegex); // 將正則表達式封裝到Pattern對象中
Matcher mat=pat.matcher(email); // 創建一個匹配器Matcher,該Matcher對象可以根據正則表達式判斷傳入的字符串是否符合要求
if(mat.matches()){
System.out.println("恭喜,郵箱格式正確!");
}else{
System.out.println("對不起,郵箱格式不正確!");
}
}
}
package regex;
import java.util.Scanner;
public class PhoneNumber {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("請輸入手機號碼:");
String phone=scan.next();
if(phone.matches("1\\d{10}")){
System.out.println("恭喜,手機號碼符合要求");
}else{
System.out.println("不符合要求!");
}
}
}
三. 枚舉類型1. 枚舉類型使用一組常量值來表示特定的數據集合,該集合中數據的數目確定(通常較少),且這些數據只能取預先定義的值。
2. Java枚舉類型均自動繼承java.lang.Enum類(該類繼承了Object類)。
聲明枚舉類型:
[public] enum 枚舉類型名稱{
枚舉對象1,枚舉對象2,…,枚舉對象n ;
}
eg: public enum Color{
RED,GREEN,BLUE;
}
方法一:取得單個枚舉對象
枚舉.對象名
方法二:取得全部枚舉對象
枚舉.values()
注意:枚舉.values()返回的是一個對象數組, 可以通過遍歷該對象數組獲取所有枚舉對象。
package enumdemo; public enum ColorEnum { RED,GREEN,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+" ");
}
}
}