JAVA基礎之API高階應用
1、類 Object 是類層次結構的根類 1)構造方法:可以建立物件 2)方法: 1’:boolean equals(Object obj) : 看原始碼:Ctrl+shift+t -> 輸入類名 -> 回車:即為原始碼 Ctrl+O -> 檢索 使用雙等來比較兩個物件是否相等,引用型別則是比較地址值是否相等 若需要比較兩個字串是否相等,可以使用equals但是此方法需要重寫 2’:String toString():返回物件的字串表示。 return getClass().getName() + ‘@’ + Integer.toHexString(hashCode()) getClass():返回的是一個物件,位元組碼物件 getName():方法,返回位元組碼的名字,也即類名 Integer.toHexString:返回一個整數引數的字串表示形式(靜態方法) hashCode():返回該物件的雜湊碼值。一般是通過將該物件的內部地址轉換成一個整數來實現的。
2、System:使用final修飾,不能被繼承,不能被例項化(System的構造被私有了) 類欄位:被靜態修飾時 1)static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :賦值陣列 引數1:源陣列 引數2:源陣列的起始索引位置 引數3:目標陣列 引數4:目標陣列的起始索引位置 引數5:指定接受的元素個數 2)static long currentTimeMillis() :以毫秒值返回當前系統時間 這個毫秒時間是相對時間,相對於1970-1-1 00-00-00 1970-1-1 00-00-01:返回1000 3)static void exit(int status) :終止虛擬機器 4)static void gc() :執行垃圾回收器,盡最大努力去回收,虛擬機器會自動呼叫
public class ObjectConcept { public static void main(String[] args) { Student s = new Student(); s.age = 14; s.name = "Yinchen"; System.out.println(s.toString()); //[email protected]:包名.類名(全類名)@十六進位制數 System.out.println(s); //說明我們輸出一個物件就是預設輸出這個物件的toString()方法 //按住Ctrl鍵,點選toString即可以看到原始碼 //=============== equals =========== Person p = new Person("YIn",23); Person p2 = new Person("YIn",43); boolean flag = p.equals(p2); System.out.println(flag); //false 因為即使姓名年齡相同,但是引用比較的是地址值,但凡建立了物件,其地址值都會不一樣 //重寫 System.out.println(p.equals(p)); //如果地址值相等那麼就不用再繼續比較了 //向下轉型時無法從ArrayList轉成Person //提高程式碼的健壯性:比較位元組碼物件是否相同 System.out.println(p.equals(new ArrayList())); //醬紫就不會出錯,詳見Person //static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) method();//Alt+shift+M封裝成一個方法 //static long currentTimeMillis() System.out.println(System.currentTimeMillis()); //345001540560209391 //用於計算一段程式的效率 long start = System.currentTimeMillis(); for(int x = 0; x < 1000; x++) System.out.print(x); System.out.println(); long end = System.currentTimeMillis(); System.out.println(end - start); //static void exit(int status);終止虛擬機器 for(int i = 0; i < 100; i++){ System.out.println(i); if(i==100) System.exit(0); } //建立Demo物件 new Demo(); System.gc();//清理的工作,收尾的工作 } private static void method() { //static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :複製陣列 int[] stc = {1,2,3,4,5}; int[] dest = new int[5]; System.arraycopy(stc,2,dest,0,3); for(int x = 0; x < dest.length; x++) System.out.print(dest[x]); } } //=============== toString =========== class Student{ String name; int age; //重寫toString方法 // public String toString(){ // return name + "@" + age; // } //方法二:右鍵 -- Source -- generate toString()... @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } } //=============== equals =========== class Person{ String name; int age; public Person (String name, int age){ this.name = name; this.age = age; } //重寫 方法1 // @Override // public boolean equals(Object o){//equals的引數是Object,該方法定義在所有類的根類中,所以需要用所有類的父型別 // //提高效率:當前物件和傳遞進來的物件地址值一樣,則不用比較成員。 // if(this == o){ // return true; // } // //提高程式碼的健壯性 // if(this.getClass() != o.getClass()){ // return false; // } // //向下轉型 // Person other = (Person) o; //父型別看不見子類特有的型別 // if(!this.name.equals(other.name)){ //字串是引用型別,使用重寫後的equals // return false; // } // if(this.age != other.age){ // return false; // } // return true; // } //方法2:右鍵 -- Source -- generate hashCode() and equals @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { //提高效率 if (this == obj) return true; if (obj == null) return false; //提高健壯性 if (getClass() != obj.getClass()) return false; //向下轉型 Person other = (Person) obj; //判斷 if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } class Demo{ protected void finalize() throws Throwable{ System.out.println("我被回收了"); } }
1、Date類:java.util 包下:表示特定的瞬間,精確到毫秒。它可以通過方法來設定自己所表示的時間,可以表示任意時間 System.currentTimeMillis():返回是是當前系統時間,返回的是從1970.1.1到今天所經過的時間 1)構造方法:Date():建立的是一個表示當前系統時間的Date物件 Date(long date) :根據指定時間(不是具體時間,而是一個毫秒值)建立Date物件1970.1.1 + long date的時間點 2)常用的方法:毫秒值 – Date物件:設定,返回值是void;有引數,long ----- void setTime(long time) / Date(long date) Date – 毫秒值:獲取,有返回值,long;無引數 ------ long getTime()
2、simpleDateFormat類:格式化日期:java.text.Format包下(格式化) 1’:格式化:Date – String //String format(Date date) 解析:String – Date // Date parse(String source) 2’:構造方法:SimpleDateFormat() :用預設的模式進行物件的構建 SimpleDateFormat(String pattern) :用給定的模式進行物件的構建 3’:注意:Exception in thread “main” java.text.ParseException: Unparseable date: “49-3-23下午1:29” at java.text.DateFormat.parse(Unknown Source) at HeMai.DateConcept.main(DateConcept.java:53) 解析的字串,模式必須和構建物件的模式一樣
3、Calendar類:抽象類,不能建立物件 :找找子類物件,或者靜態方法 日曆:提供了一些操作年月日時的方法 1)static Calendar getInstance() 操作方法:修改,新增,獲取 int get(int field) :返回給定日曆欄位的值 void set(int field, int value) :把指定的欄位修改成指定的值 abstract void add(int field, int amount) :在指定的欄位上加上指定的值
public class DateConcept {
public static void main(String[] args) throws ParseException{
//Date()
Date d = new Date();
System.out.println(d);//Fri Oct 26 21:45:26 CST 2018(CST:時區),就是當前系統時間
System.out.println(d.toLocaleString()); //2018-10-26 21:47:45
//Date(long date)
Date d2 = new Date(0);
System.out.println(d2.toLocaleString()); //1970-1-1 8:00:00存在時差(此處是東八區)
Date d3 = new Date(3600000);
System.out.println(d3.toLocaleString()); //1970-1-1 9:00:00存在時差(此處是東八區)
//常用方法
Date cd = new Date();
cd.setTime(0);
System.out.println(cd.toLocaleString());
System.out.println(cd.getTime());
//用預設的模式進行物件的構建
SimpleDateFormat sdf = new SimpleDateFormat();
//建立一個日期物件
Date date = new Date();
//格式化:把日期物件轉換成字串
String s = sdf.format(date);
System.out.println(s);
//解析:把字串轉換成日期物件
Date d4 = sdf.parse("49-3-23 下午1:29");//注意格式
System.out.println(d4.toLocaleString());
//使用指定的模式進行物件的構建
//1999年1月1日
SimpleDateFormat ss = new SimpleDateFormat("yyyy年MM月dd日");
//格式化
Date dd = new Date();
String s1 = ss.format(dd);
System.out.println(s1);
//解析
Date d5 = ss.parse("2018年08月30日");
System.out.println(d5.toLocaleString());
//使用指定的模式進行物件的構建
//1999年1月1日 10:11:11
//四個小姨2個大美眉和2個小弟弟
SimpleDateFormat ss2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//格式化
Date dd2 = new Date();
String s12 = ss2.format(dd2);
System.out.println(s12);
//解析
Date d52 = ss2.parse("2018年08月30日 13:35:29");
System.out.println(d52.toLocaleString());
//static Calendar getInstance() :
Calendar ci = Calendar.getInstance();
//獲取:
//int get(int field) :返回給定日曆欄位的值
System.out.println(Calendar.YEAR); //1
int year = ci.get(Calendar.YEAR);
int month = ci.get(Calendar.MONTH);
int day = ci.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"."+(month+1)+"."+day); //1月是從0開始的
//修改:
//void set(int field, int value)
Calendar ci2 = Calendar.getInstance();
ci2.set(Calendar.DAY_OF_MONTH,20);
ci2.set(Calendar.YEAR,2020);
int year2 = ci2.get(Calendar.YEAR);
int month2 = ci2.get(Calendar.MONTH);
int day2 = ci2.get(Calendar.DAY_OF_MONTH);
System.out.println(year2+"."+(month2+1)+"."+day2);
//abstract void add(int field, int amount) :在指定的欄位上加上指定的值
Calendar ci3 = Calendar.getInstance();
ci3.add(Calendar.DAY_OF_MONTH,20);
ci3.add(Calendar.YEAR,2);
int year3 = ci3.get(Calendar.YEAR);
int month3 = ci3.get(Calendar.MONTH);
int day3 = ci3.get(Calendar.DAY_OF_MONTH);
System.out.println(year3+"."+(month3+1)+"."+day3);
}
}