1. 程式人生 > >JAVA基礎之API高階應用

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);	
	}
}