黑馬程序員_高薪技術(一)

---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------


1、 常見縮寫:
        IDE -->Itegrity development environment 集成開發工具

        GUI -->Graphical User Interface 圖形化界面

        CLI -->Command Line Interface 命令行方式

        JVM -->Java Virtual Machine Java虛擬機

        JRE -->Java Runtime Environment Java運行環境

        JDK -->Java Development Kit Java開發工具包

        API -->Application Programming Interface 應用程序接口

        Awt -->Abstract Window ToolKit 抽象窗口工具包

        DNS  -->域名解析服務
        
        DOM  -->document object model 文檔對象模型

        TCP -->Tracsmission Control Protocol 傳輸控制協議

        UDP -->User Datagram Protocol 用戶數據報協議

        OSI -->Open System Interconnection 開放系統互聯參考模型

2、 面試經驗:
        a. 規範代碼,規範書寫變量
        b. 隨和做人,認真做事
        c. 答出別人答不出的兩點
            overlord與override
            特點之一:當父類的方法是私有時,子類寫了一個和父類一樣的方法,不叫覆蓋
        d. 升級的單個因素:
            1. 提高效率;
            2. 簡化書寫;
            3. 提高安全性;

3、 eclipse操作:
        a. myeclipse是eclipse的一個插件
        b. eclipse是基於JDK的
        c. 配置快捷鍵:window--->preferences--->General--->Keys--->contents
        d. 一個工作空間Workspace裏面有多個工程Project
        e. 視圖與透視圖
        f. 高版本的JDK開發的程序低版本的JRE不能運行,高版本的JRE能運行低版本JDK開發的程序
        g. 注意快捷鍵的使用和設置,在Template中設置快捷鍵
        h. 通過build path中設置庫版本
        i. 選中需要打印的語句Alt+/

4、 靜態導入:jdk1.5提供的
        (1)import語句可以導入一個類或某個包中的所有類
        (2)inport static 語句導入一個類中的某個靜態方法或所有靜態方法。

5、 JDK1.5新特性:
        a. 靜態導入類庫
        b. 可變參數:
            1. 只能出現在參數類表的最後;
            2. ...位於變量類型和變量名之間,前後有無空格都可以;
            3. 調用可變參數的方法時,編譯器爲該可變參數隱含創建一個數組,在方法體中以數組的形訪問可變參數。
        c. 增強for循環
            語法:
                for(type 變量名 : 集合變量名){...}    
            注意事項:
                迭代變量必須在()中定義;
                集合變量可以是數組或實現了Iterable接口的集合類;
        d. 基本數據類型的自動拆箱與裝箱:
            自動裝箱:Integer num=12;
            自動拆箱:System.out.println(num+12);

            Integer num1=12;//129;//Integer.valueof(12);
            Integer num2=13;//129;//Integer.valueof(12);
            System.out.println(num1==num2);true//false//true
            -128~127在一個字節內的數字,一旦被封裝成Integer對象後,就會緩存池中,下次有要把一個數封裝成Integer對象時,首先會在池中找
            這是一種設計模式:享元模式 flyweight

        e. 枚舉
        f. StringBuilder 1.5版本之後出現的
        g. invoke中傳的參數1.5版本中是可變數組的形式,1.4版本是把參數列表封裝成一個數組再傳進來
        i. Map[] map={name:"zss",age:18};java7新特性
        j. 註解
        k. 泛型
6、 享元模式:flyweight
        如果很多很小的對象,有很多相同的東西,可以把它變成一個對象,那些不同的屬性把他們變成方法的參數,稱之爲外部狀態,那些相同的屬性稱之爲內部狀態

7、 枚舉:
        a.爲什麼要有枚舉?
        枚舉就是要讓某個類型的變量的取值只能爲若干個固定值中的一個,否則,編譯器就會報錯。
        枚舉可以讓編譯器在編譯時就可以控制源程序中填寫的非法值,普通變量的方式在開發階段無法實現這一目標。
        
        b.擴展:枚舉類的value, valueof, name, toString, ordinal等方法
        c.總結:枚舉是一種特殊的類,其中的每個元素都是該類的一個實例對象
        一個枚舉類實例:

	public class EnumTest {

		public static void main(String[] args) {

			System.out.println(WeekDay.valueOf("SUN").toString());

			System.out.println(WeekDay.values().length);

			System.out.println(TrafficLamp.valueOf("RED").nextLamp());

		}

		public enum WeekDay {

			SUN(1), // 指定參數列表
			MON(), STU, WED, THT, FRI, SAT;// 後面有方法必須有“;”隔開,方法必須位於枚舉元素之後

			private WeekDay() {
				System.out.println("first");
			}// 構造方法必須是私有的

			private WeekDay(int day) {
				System.out.println("second");
			}
		}

		public enum TrafficLamp {
			RED(30) {
				public TrafficLamp nextLamp() {
					return GREEN;
				}
			},
			GREEN(45) {
				public TrafficLamp nextLamp() {
					return YELLOW;
				}
			},
			YELLOW(5) {
				public TrafficLamp nextLamp() {
					return RED;
				}
			};
			public abstract TrafficLamp nextLamp();

			private int time;

			private TrafficLamp(int time) {
				this.time = time;
			}
		}
	}
        d. 枚舉就相當於一個類,其中也可以定義構造方法、成員變量、普通方法和抽象方法。

        e. 枚舉元素必須位於枚舉體中的最開始部分,枚舉元素列表的最後要有分好與其他成員分隔。
           把枚舉中的成員方法或變量等放在枚舉元素的前面,編譯器報告錯誤。

        f. 帶構造方法的枚舉:
            構造方法必須定義成私有的
            如果有多個構造方法,該如何選擇哪個構造方法?
            枚舉元素MON和MON()的效果一樣,都是調用默認的構造方法。

        g. 帶方法的枚舉:
            定義枚舉TrafficLamp
            實現普通的next()方法
            實現抽象的next()方法:每個元素分別是由枚舉類的子類來生成實例對象,這些子類採用類似內部類的方式進行定義。
            增加上表示時間的構造方法
        h. 枚舉只有一個成員時,就可以作爲一種單利的實現方式。

8、反射的基石--->Class類

        Class--->代表一類什麼樣的事物
        Java程序中的各個Java類屬於同一類事物,描述這類事物的Java類名就是Class

        Person p1=new Person();
        Person p2=new Person();
        
        獲取字節碼對應的實例對象(Class類型)
        1. Class cls1= Person.class;//字節碼1;
        2. Class cls2= p2.getClass();//字節碼2;
        3. Class.forName("類名")//反射實用的主要是這一種

        九個預定義Class實例對象:
        Intclass==Integer.TYPE...
        
        數組類型的的Class實例對象
        Class.isArray();

        總之,只要是在源程序中出現的類型,都有各自的Class實例對象,例如:int[],void,

9、 反射就是把java類中的各種成分映射成相應的java類。

10、 Constructor類:
        Constructor類代表某個類中的一個構造方法
        得到某個類所有的構造方法:
        Constructor Constructors[]=Class.forName("java.lang.String").getConstructor(StringBuffer.class);

        創建一個實例對象:
        通常方式:String str=new String(new StringBuffer("abc"));
        反射方式:String str=(String)constructor.newInstance(new StringBuffer("abc"));

11、 Field類 字段
        Point pt1 = new Point(3, 5);

        Field fieldY=pt1.getClass().getField("y");
        //fieldY不代表具體的值,只是一個變量
        System.out.println(fieldY.get(pt1));
        
        Field fieldX=pt1.getClass().getDeclaredField("x");
        fieldX.setAccessible(true);//取消權限校驗,暴力訪問
        System.out.println(fieldX.get(pt1));

12、 Method類
        Method類代表某個類中的一個成員方法
        得到類中的某一個方法:
        Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);

        調用方法:
        通常方式;System.out.println(str.charAt(1));
        放射方式:System.out.println(charAt.invoke(str,1));
        如果傳遞給Method對象的invoke()方法的一個參數爲null,就就意味着什麼樣的意義呢?
        說明該Method對象對應的是一個靜態方法

13、 用放射方式去調用某個類中的main方法
        String startingClassName = args[0];
        Method mainMethod = Class.forName(startingClassName).getMethod("main",String[].class);
        mainMethod.invoke(null,new Object[]{new String[]{"123","456","789"}});

14、 數組反射:
        Object[]a=new Object[]{"a",1};
        a[0].getClass.getName();

15、 ArrayList、hashSet的比較及Hashcode分析
        注意內存泄漏,不用的東西,沒有被釋放,還一直佔用着內存空間

16、 類加載器
        配置文件的加載也是用類加載器
        RefectDemo.class.getClassLoader().getResourceAsStream(目錄);
        RefectDemo.class.getResourceAsStream(目錄);
        在classpath指定的目錄下逐一的查找需要加載的類文件

17、 內省(IntroSpector)---JavaBean
        JavaBean--->是一種特殊的Java類,他的方法的名字按照一定的規則起名字
        如:int getAge();
            void setAge(int age);
        
        當方法中有以set...,get...開頭的方法名,該類就可以當作JavaBean類使用。
        
        特點:去掉set,get,剩下的屬性名Age--->如果第二個字母是小寫的,則把第一個字母變成小寫的-->age
        gettime--->time
        setTime--->time
        setCPU--->CPU
        爲了好看考慮

        當作JavaBean類處理,比較方便
	public class JavaBeanDemo {

		public static void main(String[] args) throws Exception {

			Point p = new Point(3, 5);

			String propertyName = "x";
			// "x"-->"X"-->"getX"-->MethodGetX-->

			// 屬性描述類,獲取一個類中的某個屬性
			PropertyDescriptor pd = new PropertyDescriptor(propertyName,
					p.getClass());
			// 通過屬性獲取bean類型類的方法
			Method methodGetX = pd.getReadMethod();

			Object retVal = methodGetX.invoke(p);
			System.out.println(retVal);

			Method methodSetX = pd.getWriteMethod();
			methodSetX.invoke(p, 8);
			System.out.println(p.getX());
		}
	}
---------------------------------------------------------------------------
	public static void main(String[] args) throws Exception {

		Point p = new Point(3, 5);
		String propertyName = "x";
		BeanInfo beanInfo = Introspector.getBeanInfo(p.getClass());
		PropertyDescriptor[]pds=beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor pd : pds){
			if(pd.getName().equals(propertyName)){
				Method methodGetX=pd.getReadMethod();
			}
		}
	}

---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------
詳細請查看:www.itheima.com
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章