1. 程式人生 > >黑馬程式設計師--java高新技術 25--列舉,反射

黑馬程式設計師--java高新技術 25--列舉,反射

---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ----------------------

/*1.5 新特性總結:
靜態匯入
可變引數
增強for(foreach)
基本資料的自動拆裝箱
列舉
泛型
*/

/*25-2
API: Application Programming Interface
java EE
IDE: Integrated development environment
jms
jmx
jndi
*/

/*25-3
preference--java--compiler  //javac 編譯器版本
				|--Installed JREs   //java 執行的版本
		  |--general--keys  //快捷鍵

file--switch workspace  //切換工作間



*/

/*25-4
debug 透檢視下:
	r變數--watch

*/

/*25-5
r--run as--run configuration--jre //執行環境
低版本的java不能執行高版本的javac編譯的程式,會出現 UnsupportedClassVersionError

r(一個工程)--properties--run/debug setting--edit--(edit configuration)  //該路徑也可開啟執行環境
*/

/*25-6
模板程式碼:
properties--java--editer-templates
*/

/*25-7
jar Libaray 更改jre庫,Libaray 就是很多的jar
r工程--build path--configure build path--java build path 
*/

/*25-8
1.5 新特性 
靜態匯入
*/

/*25-9
1.5 新特性 
可變引數

overload vs override
*/

/*25-10
1.5 新特性 
增強for
*/

/*25-11
1.5 新特性 
基本資料的自動拆裝箱

享元設計模式flyweight:
有很多個小的物件,它們有很多屬性相同,把它們變成一個物件,
那些不同的屬性變成方法的引數,稱之為外部狀態,那些相同的屬性稱之為內部狀態。
*/

/*25-12
1.5 新特性 
列舉
*/

/*25-14
列舉的基本應用:
name();
ordinal();//類似陣列的角標
valueOf("SUN").toString();
values(); 把列舉變成陣列
*/

/*25-17
Class cls = 位元組碼;

獲得位元組碼的三種方式:
	System.class;
	new Date().getClass();
	Class.forName("java.util.Date");//全名

預定義的實力物件://參照isPrimitive();
void.class;
int.class = Integer.Type;//還有其他的7種基本資料型別。
isArray();//是否是陣列。
*/

/*25-19
反射會導致程式的效能下降
*/

/*25-20
getField(pt1);
getDeclaredField(pt1);
setAccessible(true);//暴力反射
*/

/*25-22
誰有資料誰就是幹這個事的專家,方法就分配給誰。
*/

/*25-23
用反射呼叫 main 方法的原因是可以在沒有載入 類的前提下用 class.forName(name); 方法來載入類, 之後就可以執行main 方法了。

r--run as--run configuration--arguments   //用於給程式傳遞引數。
*/

/*25-24
getSuperclass();

可變引數:若滿足1.4 的條件就按照1.4的處理,不滿足就按照1.5的處理。
*/

/*25-26
存入HashSet 集合的元素(物件) 的 資料發生改變時,其hashcode 的值也會發生改變,因此在使用時應該注意其HashCode 值 是否有發生改變。否則會發生記憶體洩露。
*/

/*25-27
反射的作用:
實現框架
*/

/*25-28

getClass().getResourceAsStream(); //無法通過類載入器寫入資料
*/

/*25-29
內省:introspector
javaBean: 以set 或 get 開頭 的方法 的類
*/

//個人疑問:?1, ?2, ?3, ?4

import java.lang.reflect.Constructor;

public class Demo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//WeekDay
		Class clazz = WeekDay.MON.getClass();//@0  	用getClass()獲得的建構函式是一個  
		//?1: 為何是一個? 為何會少掉建構函式?少掉了哪些建構函式?
		Constructor[] cons = clazz.getDeclaredConstructors();
		System.out.println("共有 "+cons.length+" 個建構函式");
		for (Constructor con : cons) {
			System.out.println(con.toGenericString());
		}
		
		Class clazz1 = WeekDay.class;//@1  	與@0 相比 用 .class 的方法卻獲得3個。  
		//?2: 為何是3個 ,多出來的那個建構函式是什麼意思?   ?3: 為何與@0 不同?
		Constructor[] cons1 = clazz1.getDeclaredConstructors();
		System.out.println("共有 "+cons1.length+" 個建構函式");
		for (Constructor con : cons1) {
			System.out.println(con.toGenericString());
		}
		
		System.out.println();
		//Weekday1 
		Class clazz2 = Weekday1.MON.getClass();//@2  與@0 相比 該方法enum 沒有 abstract 方法, 獲得的建構函式卻是2個
		Constructor[] cons2 = clazz2.getDeclaredConstructors();
		System.out.println("共有 "+cons2.length+" 個建構函式");
		for (Constructor con : cons2) {
			System.out.println(con.toGenericString());
		}
		
		Class clazz3 = Weekday1.class;//@3  比較WeekDay 和 Weekday1,WeekDay僅多了一個abstract方法。
		//說明WeekDay 之所以會多出或少掉建構函式是因為 abstract 方法
		//?4:為何WeekDay 和 Weekday1 會有這樣的差異?或者為何abstract方法會造成這樣的差異
		Constructor[] cons3 = clazz3.getDeclaredConstructors();
		System.out.println("共有 "+cons3.length+" 個建構函式");
		for (Constructor con : cons3) {
			System.out.println(con.toGenericString());
		}
			
	}
}


enum WeekDay{
    SUN(){
            public WeekDay nextDay(){
                    return MON;
            }
    },MON(){
            public WeekDay nextDay(){
                    return SUN;
            }
    };
    
    WeekDay(){
            System.out.println("first");
    }
    WeekDay(int x){
            System.out.println("second");
    }
    
    public abstract WeekDay nextDay();
}

enum Weekday1{
    SUN,MON;
    
    Weekday1(){
            System.out.println("first");
    }
    Weekday1(int x){
            System.out.println("second");
    }
    
}


---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ---------------------- 

相關推薦

黑馬程式設計師--java高新技術 25--列舉反射

---------------------- ASP.Net+Android+IO開發S、.Net培訓、期待與您交流! ---------------------- /*1.5 新特性總結: 靜態匯入 可變引數 增強for(foreach) 基本資料的自動拆裝箱 列舉 泛

黑馬程式設計師——java高新技術列舉

------- android培訓、java培訓、期待與您交流! ---------- 列舉是java1.5版本的新特性。 1,列舉是什麼? 就是讓某個型別的變數的取值只能為若干個固定值中的一個。可以讓編譯器在編譯時就可控制,避免出錯。 2.列舉的應用 (1)定義列舉使用

黑馬程式設計師——Java高新技術列舉

-------android培訓、java培訓、期待與您交流! ---------- 列舉 列舉enum 列舉就是要讓某個型別的變數的取值,只能為若干個固定值中的一個,否則,編譯器報錯 列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通

黑馬程式設計師_java高新技術(1)列舉反射、內省

------- android培訓、java培訓、期待與您交流! ---------- JDK 5.0 靜態匯入,自動裝箱拆箱,增強for迴圈, 可變引數,列舉,泛型,元資料 day01***Eclipse/列舉 *Workspace與project     會切換工作間與

黑馬程式設計師 Java高新技術---列舉

 ---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ---------------------- 列舉概念: 列舉實際上就是限制了一個類的物件產生範圍。 假如要定義一個Color類,用於上色,而顏

黑馬程式設計師--java高新技術 26--javaBean,泛型類載入器代理spring小框架

---------------------- ASP.Net+Android+IO開發S、.Net培訓、期待與您交流! ---------------------- /*設計模式: Singleton: 單例模式 Factorty: 工廠模式 Iterator: 迭代器模

黑馬程式設計師-java高新技術反射

一、反射 1、定義: Java程式中的各個Java類屬於統一類事物,描述這類事物的Java類名就是Class。反射機制指的是程式在執行時能夠獲取自身的資訊。在java中,只要給定類的名字,那麼就可以通過反射機制來獲得類的所有資訊。 2、優點和缺

黑馬程式設計師--java基礎--String,StringBufferStringBuilde

------- android培訓、java培訓、期待與您交流! --------- String的兩種例項化方式: 方式1: String s1 = "abc"; //s1是一個類型別變數,"abc"是一個物件 //字串最大的特點:String一旦初始化

黑馬程式設計師--java高新技術--javaBean內省

------- android培訓、java培訓、期待與您交流! --------- 內省(IntroSpector) 主要對JavaBean進行操作。 JavaBean: 特殊的java類。JavaBean的屬性是根據其中的get和set來確定的, gettime--&g

黑馬程式設計師——Java高新技術_反射

反射技術: 其實就是動態載入一個指定的類,並獲取該類中的所有的內容。而且將位元組碼檔案封裝成物件,並將位元組碼檔案中的內容都封裝成物件,這樣便於操作這些成員。簡單說:反射技術可以對一個類進行解剖。 反射的好處:大大的增強了程式的擴充套件性。 反射的基本步驟: 1、獲得Class物件,就是獲取到指定的名稱的位

黑馬程式設計師_java高新技術(2)列舉

列舉是一種特殊的JAVA類,用來定義有限的數量級 public enum TrafficSignal(){    STOP,CAUTION,GO } 每一個類都是其所在列舉的子類 使用方法 類名.常量名 當使用列舉常量時,JVM會自動建立該常量的例項 TrafficSignal signal=Traffic

黑馬程式設計師——Java高新技術反射學習總結一

                                                                                    反射學習總結 基礎補充: Java程式中的各個Java類屬於同一類事務,描述這類事務的Java類名就是C

黑馬程式設計師_java高新技術列舉

---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ----------------------   列舉: 關鍵字 enum 列舉就是要讓某個型別的變數的取值只能為若干固定值之中的一個。 是一個特殊的類,其中的每一個元素都是該類的一個物件。 注

黑馬程式設計師 Java高新技術--反射和內省

1.框架與框架要解決的核心問題:比如:我做房子賣給使用者住,由使用者自己安裝門窗和空調,我做的房子就是框架,使用者需要使用我的框架,把門窗插入進我提供的框架中。框架和工具類有區別,工具類被使用者的類呼叫,而框架則是呼叫使用者提供的類。2.框架要解決的核心問題:我在寫框架(房子)時,你這個使用者可能還在上小學,

黑馬程式設計師 java高新技術 反射

---------- android培訓、java培訓、期待與您交流! ---------- 一、Class類     Class是Java程式中各個Java類的總稱;它是反射的基石,通過Class類來使用反射。    物件的建立和使用:       建立例項物件:

黑馬程式設計師--java高新技術----反射

---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ---------------------- 什麼是反射?         反射就是把一個類中的各種元素對映成一個類。 得到一個類中的元素都是從這個

黑馬程式設計師——Java高新技術反射

-------android培訓、java培訓、期待與您交流! ---------- 反射 JAVA反射機制是在執行狀態中,對於任意一個類 (class檔案),都能夠知道這個類的所有屬性和方法; 對於任意一個物件,都能夠呼叫它的任意一個方法和屬性

黑馬程式設計師--java基礎--多型內部類異常等

------- android培訓、java培訓、期待與您交流! --------- 多型: 允許不同類的物件對同一訊息作出響應 1.多型的體現 父類的引用指向自己的子類物件 父類的引用也可以接受自己的子類物件 2.多型的前提 類和類之間有關係。繼承。實現。 存在覆蓋。

黑馬程式設計師JAVA高新技術反射

反射 一、反射的基石   反射的基石是Class類。Java程式中的各個java類屬於同一類事物,描述這類事物的java類名就是Class. 1.1 Class類的分析   在程式執行時呼叫類的時候,首先將這個類在硬碟上的二進位制程式碼載入到記憶體中,才可以用這個類建立物件

黑馬程式設計師——java-幾個常用的類(ObjectScannerStringStringBuffer/StringBuilder)

1 Object類 Object類層次結構的根類,所有的類都直接或間接的繼承自該類 Object類中常用的方法 public String toString()---//返回該物件的字串表示 public final Class getCla