System:
----------------------------------------分割線----------------------------------------------
System:
package com.anonymous.javase.day04;
public class Demo3 {
protected void finalize() {
System.out.println("我被回收了");
}
//System
public static void main(String[] args) {
//返回當前系統時間(毫秒數)
/**
* 一般使用在數據庫中的某個文件的創建時間和保存時間
*/
long times = System.currentTimeMillis();
System.out.println(times);
//垃圾收集器運行(表示強制回收)(用的很少)
new Demo3();
new Demo3();
System.gc();
//底層默認調用Runtime中的gc()方法
/**
* 底層Runtime對象不可以創建對象,這說明一個問題,只要是某個類中,沒有提供
* 給我們創建的,說明一定採用單利模式,
* 那麼該類中一定有一個靜態的實例可以返回對象,
* 實例的命名一般是get....();
*/
//終止當前的虛擬機
/**
* 很少用,一般用於一些程序運行不了,就終止該程序運行
*/
//System.exit(-1);(避免影響後面的程序)
}
}
Math/BigDecimal/BigInteger(這裏不演示BigInteger)(很少很少用到一般的long就足夠處理了)
package com.anonymous.javase.day04;
import java.math.BigDecimal;
public class Demo4 {
/* 和數學常用三個相關的常用類:
1.Math:Math 類包含用於執行基本數學運算的方法,
如初等指數、對數、平方根和三角函數。
2.BigDecimal:float和double都不能表示精確的小數,
此時使用BigDecimal,用於處理金錢的精確度來表示
3.BigInteger:表示大型整數,當兩個long相加時,
long儲存不了數據此時使用BigInteger來儲存
加減乘除和BigDecimal來表示*/
public static void main(String[] args) {
//Math:
//返回絕對值:
int abs = Math.abs(-34);
System.out.println(abs);//34
//返回n次冪
/**
* 如果出現數據過大,而double無法裝載,
* 將包裝數據之後再進行輸出
*/
double pow = Math.pow(4, 4);
System.out.println(pow);//256.0
//最大數&最小數
int max = Math.max(34, 45);
System.out.println(max);//45
int min = Math.min(34, 11);
System.out.println(min);//11
//隨機數
double random = Math.random()*10;//範圍[0-1]
double floor = Math.floor(random+1);
System.out.println(floor);
//向下取整
/**
* 去掉小數點
*/
double floor2 = Math.floor(23.9);
double floor3 = Math.floor(23.1);
System.out.println(floor2);//23
System.out.println(floor3);//23
//向上取整
/**
* 去掉小數點+1
*/
double ceil = Math.ceil(34.1);
double ceil2 = Math.ceil(34.9);
System.out.println(ceil);//34
System.out.println(ceil2);//34
//四捨五入
long round = Math.round(34.1);
long round2 = Math.round(34.9);
System.out.println(round);//34
System.out.println(round2);//35
/*-----------------------------------------------*/
double d1 = 0.01;
double d2 = 0.09;
System.out.println(d1+d2);
//0.09999999999999999
//可以利用BigDecimal解決數據混亂問題
BigDecimal b1 = new BigDecimal(0.01);
BigDecimal b2 = new BigDecimal(0.09);
BigDecimal add = b1.add(b2);
System.out.println(add);
//0.09999999999999999687749774324174723005853593349456787109375
/**
* 怎麼數據還是出現錯誤,難道這個類有問題?
* 其實是使用錯誤.
* BigDecimal中有一句:
* 此構造方法的結果有一定的不可預知性。
* 有人可能認爲在 Java 中寫入 new BigDecimal(0.1)
* 所創建的 BigDecimal 正好等於 0.1(非標度值 1,其標度爲 1),
* 但是它實際上等於 0.1000000000000000055511151231257827021181583404541015625。
* 這是因爲 0.1 無法準確地表示爲 double(或者說對於該情況,
* 不能表示爲任何有限長度的二進制小數)。這樣,
* 傳入 到構造方法的值不會正好等於 0.1(雖然表面上等於該值)。
另一方面,String 構造方法是完全可預知的:
寫入 new BigDecimal("0.1") 將創建一個 BigDecimal,
它正好 等於預期的 0.1。因此,比較而言,
通常建議優先使用 String 構造方法。
*/
/*上面說的就是直接傳入duoble或者float類型的數據,就會出現數據不能預知的效果,
* 需要將數據轉換爲字符串之後,在將數據進行運算
*/
BigDecimal b3 = new BigDecimal("0.01");
BigDecimal b4 = new BigDecimal("0.09");
//相加
BigDecimal add2 = b3.add(b4);
System.out.println(add2);//0.10
//相乘
BigDecimal multiply = b3.multiply(b4);
System.out.println(multiply);//0.0009
//相除
BigDecimal divide = b4.divide(b3);
//如果使用b3除b4.會出現無限循環小數,計算機不可控制,就會報錯(可以將數據處理在輸出)
System.out.println(divide);//9
//相減
BigDecimal subtract = b3.subtract(b4);
System.out.println(subtract);//-0.08
}
}
package com.anonymous.javase.day04;
public class Demo5 {
public static void main(String[] args) {
//String轉換爲byte
System.out.println("String-->byte".getBytes());//[B@5c3eeab3
//String轉換爲char
System.out.println("String-->char".toCharArray());//String-->char
//byte轉換爲String
System.out.println(new String("String-->byte".getBytes()));//String-->byte
//char轉換爲String
System.out.println(new String("String-->char".toCharArray()));//String-->char
/*--------------------------------*/
String str = "AStringABCD";
//字符串的長度
System.out.println(str.length());//10
//獲取指定位置的的字符
System.out.println(str.charAt(3));//i
//獲取指定字符第一次出現的位置(從左往右)
System.out.println(str.indexOf("A"));//0
//獲取字符最後一次出現的位置(從右往左)
System.out.println(str.lastIndexOf("A"));
/*字符串的判斷*/
//比較字符是否相等
/**
* ==是比較地址是否相同
* equals是比較字符串的內容
*/
System.out.println("str".equals("str"));//true
//忽略大小寫,比較字符串內容是否相同
System.out.println("STR".equalsIgnoreCase("str"));//true
/*大小寫轉換*/
//大轉小
System.out.println("STRING".toLowerCase());//string
//小轉大
System.out.println("string".toUpperCase());//STRING
//trim的使用忽略前後空格
System.out.println(" String ");// String
System.out.println(" String ".trim());//String
String str2 = "";
boolean trim = isTrim(str2);
System.out.println(trim);
System.out.println(isNull(str2));
}
//判斷不爲空
private static boolean isTrim(String str) {
if(str!=null&&!"".equals(str.trim())){
return true;
}
return false;
}
//判斷爲空
private static boolean isNull(String str){
return !isTrim(str);
}
}
package com.anonymous.javase.day04;
abstract class TestTime{
final public void getTime(){
long start= System.currentTimeMillis();
this.getwork();
System.out.println(System.currentTimeMillis()-start);
}
abstract public void getwork();
}
//String
class StringTest extends TestTime{
public void getwork(){
String str = "1";
for (int i = 0; i < 100000; i++) {
str +="23";
}
}
}
//StringBuffer
class StringBufferTest extends TestTime{
@Override
public void getwork() {
StringBuffer stringBuffer = new StringBuffer("123");
for (int i = 0; i < 100000; i++) {
stringBuffer.append("23");
}
}
}
//StringBuilder
class StringBuilderTest extends TestTime{
@Override
public void getwork() {
StringBuilder stringBuffer = new StringBuilder("123");
for (int i = 0; i < 100000; i++) {
stringBuffer.append("23");
}
}
}
public class Demo6 {
public static void main(String[] args) {
new StringTest().getTime();//5457
new StringBufferTest().getTime();//5
new StringBuilderTest().getTime();//3
}
}
package com.anonymous.javase.day04;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
public class Demo7 {
public static void main(String[] args) {
//Random
Random random = new Random();
//獲取[-2147483648,2147483647]的隨機數
int nextInt = random.nextInt();
System.out.println(nextInt);
//獲取[0,1000]隨機數
int nextInt2 = random.nextInt(1000);
System.out.println(nextInt2);
//獲取[true,false]隨機值
boolean nextBoolean = random.nextBoolean();
System.out.println(nextBoolean);
/**
* 其他用法差不多
*/
/*ThreadLocalRandom(java1.7)*/
ThreadLocalRandom current = ThreadLocalRandom.current();
int nextInt3 = current.nextInt();
//獲取[-2147483648,2147483647]的隨機數
System.out.println(nextInt3);
//獲取[20,40]的值
System.out.println(current.nextInt(20, 40));
/*UUID(java1.8)*/
UUID randomUUID = UUID.randomUUID();
System.out.println(randomUUID);
}
}
日期:
package com.anonymous.javase.day04;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
//Date日期類使用
//DateFormat日期的格式化操作.(固定格式)
/**
*
* Date中的大部分方法已經被禁用,不做詳細解釋
*
*/
public class Demo8 {
public static void main(String[] args) throws ParseException {
//Date
dateTest();
//DateFormat
dateFormatTest();
//SimpleDateFormat
simpleDateFormatTest();
//Calendar
calendarTest();
}
public static void dateTest(){
Date date = new Date();
//測試給出的日期是否在當前日期之後
System.out.println(date.after(new Date(344234213L)));
//測試給出的日期是否在當前日期之前
System.out.println(date.before(new Date(345092452L)));
System.out.println(date);
}
public static void dateFormatTest() throws ParseException{
//如果不設置參數(按照本機環境來格式化日期)
/**getDateInstance()
* 默認本機格式化--->表示自己所在的地區來設置
*/
DateFormat format = DateFormat.getDateInstance();
String format2 = format.format(new Date());
System.out.println(format2);//2018-5-4
//DateFormat設置參數
//只顯示日期,不顯示時間
DateFormat format3 = DateFormat.getDateInstance(DateFormat.LONG,//表示日期是長風格(DateFormat.LONG)還是短風格(DateFormat.SHORT)
Locale.US//表示設置當前日期的所在地區的
//CHINA--->2018年5月4日
//US--->May 4, 2018
);
String format4 = format3.format(new Date());
System.out.println(format4);
//顯示日期和時間
/**getDateTimeInstance()
* 默認是按照本地環境來轉換時間格式,同樣是
*/
DateFormat dateTimeInstance = DateFormat.getDateTimeInstance();
String format5 = dateTimeInstance.format(new Date());
System.out.println(format5);//2018-5-4 11:49:34
DateFormat dateTimeInstance2 = DateFormat.getDateTimeInstance(
DateFormat.LONG,//日期的長風格
DateFormat.LONG,//時間的長風格
Locale.US);//設置區域
String format6 = dateTimeInstance2.format(new Date());
System.out.println(format6);//May 4, 2018 11:53:06 AM CST
DateFormat dateTimeInstance3 = DateFormat.getDateTimeInstance(
DateFormat.SHORT,//日期短風格
DateFormat.SHORT,//日期短風格
Locale.CHINA);//設置區域
String format7 = dateTimeInstance3.format(new Date());
System.out.println(format7);//18-5-4 上午11:55
}
public static void simpleDateFormatTest() throws ParseException{
/*SimpleDateFormat*/
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
String pattern = "yyyy/MM/dd HH:mm:ss:SSSS";
//申請格式化方式
simpleDateFormat.applyPattern(pattern);
//格式化
String format8 = simpleDateFormat.format(new Date());
System.out.println(format8);
//解析
Date parse = simpleDateFormat.parse(format8);
System.out.println(parse);
}
/*Calendar*/
/**
*
*/
public static void calendarTest(){
Calendar instance = Calendar.getInstance(Locale.CHINA);
Date time = instance.getTime();
System.out.println(time);
System.out.println("年:"+instance.get(Calendar.YEAR));
System.out.println("月:"+(instance.get(Calendar.MONTH)+1));
System.out.println("日:"+instance.get(Calendar.DATE));
System.out.println("時:"+instance.get(Calendar.HOUR_OF_DAY));
System.out.println("分:"+instance.get(Calendar.MINUTE));
System.out.println("秒:"+instance.get(Calendar.SECOND));
int week = instance.get(Calendar.DAY_OF_WEEK)-1;
String weekDay = null;
switch(week){
case 1: weekDay = "一";break;
case 2: weekDay = "二";break;
case 3: weekDay = "三";break;
case 4: weekDay = "四";break;
case 5: weekDay = "五";break;
case 6: weekDay = "六";break;
default: weekDay = "天";
}
System.out.println("星期"+weekDay);
}
}
日期的格式化和解析:
package com.anonymous.javase.day04;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo9 {
private static final String DEFAUL_DATE = "yyyy-MM-dd HH-mm-ss";
public static String getDefaulDate() {
return DEFAUL_DATE;
}
public static void main(String[] args) {
/*日期的練習操作(String和Date的相互轉換)*/
//格式化操作
//Date---->String
String dateString = DateString("asdfs",new Date());
System.out.println(dateString);
//String---->Date
}
public static String DateString(String parse,Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
if(parse==null||"".equals(parse.trim())){
parse = getDefaulDate();
}
try{
simpleDateFormat.applyPattern(parse);
}catch(Exception e){
throw new IllegalArgumentException("格式不正確");
}
String format = simpleDateFormat.format(date);
return format;
}
public static Date StringDate(String parse,String disDate) throws ParseException{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(disDate);
if(parse==null||"".equals(parse.trim())){
parse = getDefaulDate();
}
Date parse2 = simpleDateFormat.parse(parse);
return parse2;
}
}
案例:
package com.anonymous.javase.day04;
import java.util.Calendar;
import java.util.Date;
public class Demo10 {
public static void main(String[] args){
Calendar instance = Calendar.getInstance();
//開始時間
instance.add(Calendar.YEAR, -3);
instance.set(Calendar.HOUR_OF_DAY, 00);
instance.set(Calendar.MINUTE, 00);
instance.set(Calendar.SECOND, 00);
Date time = instance.getTime();
instance.add(Calendar.DAY_OF_MONTH, 7);
Date time2 = instance.getTime();
System.out.println("開始時間"+time.toLocaleString());
System.out.println("結束時間"+time2.toLocaleString());
}
}