張孝祥老師的jdk1.5高新技術筆記

 張孝祥老師的jdk1.5高新技術筆記

 

1.      靜態導入   import static java.lang.Math.*;

2.       可變參數   如: int add(int x,int … args)

3.      for循環增強功能   for(type x: array) { System.out.println(x+” ”)}

4.      自動裝箱 Integer  I = 10;  (保證是同一個對象 -128~127)    自動拆箱   Integer  I = 10;   int  x=  I;

 

package java高新技術;

public class TestInteger {

    public static void main(String[] args) { 

       int x1 = 1;

       int x2 = 1;

       Integer x3 = 1;

       Integer x4 = 1;

       Integer x5 = 128;

       Integer x6 = 128;

       int x7 = Integer.valueOf(128);

       int x8 = Integer.valueOf(128);

       System.out.println(x1==x2);

       //System.out.println(x2==x3);  

       System.out.println(x3==x4);

       System.out.println(x5==x6);

       System.out.println(x7==x8);

       }

}

 

5.      枚舉類  

一個枚舉類中的對象就是這個枚舉類的子類對象,枚舉類中可以有構造方法,但是必須要是private。

 

package java高新技術;

/**

 *  用枚舉可以簡單實現單例 ,一個枚舉中只有一個對象

 */

public class TestEnum {

 

    public  enum  Week

    {     

        SUN(1),MON(1),TUE(1),WED,THU,FRI,SAR;  //都是Week的子類對象  

        //構造方法

        private  Week(){System.out.println("this is first constructor");};

        private  Week(int day){System.out.println("this is second constructor");};

    }         

   

    public enum TrafficLamp{   

       RED (20){

           @Override

           public TrafficLamp nextLamp() {       

              return GREEN;

           }

       }, GREEN(30){

           @Override

           public TrafficLamp nextLamp() {

              // TODO Auto-generated method stub

              return YELLOW;

           }

       },YELLOW(40){

           @Override

           public TrafficLamp nextLamp() {

              // TODO Auto-generated method stub

              return RED;

           }

       };

       public  abstract TrafficLamp nextLamp();

       private int time;

       private TrafficLamp(int  time){

           this.time = time;

       }     

    }

    /**

     * @param args

     */

    public static void main(String[] args) {         

           System.out.println(Week.FRI);

           System.out.println(Week.FRI.ordinal());

           System.out.println(Week.valueOf("SUN"));

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

    }

}

 

 

6.       Class

         8個基本類型 + void  都屬於9 個預定義的Class對象,原始類。

package java高新技術;

 

public class TestClass {

 

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

            /**

             * 三種方法得到Class 字節碼,因爲是同一個字節碼 所以相同

             */

           String s = "test";

            Class c1 = s.getClass();

            Class c2 = String.class;

            Class c3 = Class.forName("java.lang.String");

            System.out.println(c1 == c2);

            System.out.println(c1 == c3);      

           

          System.out.println("int.class == Integer.class? "+(int.class == Integer.class));

          System.out.println("int.class == Integer.TYPE? "+(int.class == Integer.TYPE));

          System.out.println("int[].class is primitive? "+int[].class.isPrimitive());

          System.out.println("int[].class is primitive? "+int[].class.isArray());

          System.out.println("void.class is primitive?"+  void.class.isPrimitive());     

    }

   

}

 

 

7.      反射調用一個類中的域值

 package java高新技術;

 

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

 

class  B{

         private int x;

         public B(){};    

         public B(int i){this.x = i;};

         private int getX(){

                  return this.x;

         }      

}

public class TestReflect {

         /**

          * @param args

          */

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

        

 String s1 = new String(new StringBuffer("abc"));  

 

 Constructor<?> constructor = String.class.getConstructor(StringBuffer.class);

 

 String s2 =(String)constructor.newInstance(new StringBuffer("abc")); 

 

 String s3 = new String(new StringBuffer("abc"));  

 

 System.out.println(s1.equals(s2)+" "+(s1 == s2));

 System.out.println(s1.equals(s3));

 

     B b =  B.class.newInstance();

    //System.out.println(b.getX());   //getX()爲私有的  

     B b2 = new B(10);

     //Field  field = B.class.getField("x");

     Field  field = B.class.getDeclaredField("x");   

     field.setAccessible(true);//暴力反射

     System.out.println(field.get(b2) );    

}

}

 

 

 

8.      利用反射調用一個類中的私有方法

    package java高新技術;

import java.lang.reflect.Method;

/**

 * 利用反射改變 一個類中字符串的單個字符   把所有的b 改成  a

 * @author jzm

 */

class  TestMethodClass{

     

      private String x;

      private String y;

     

     

      public TestMethodClass(String x, String y) {

       super();

       this.x = x;

       this.y = y;

    }

 

      private  void  print(int i){       

          System.out.println("hello"+ i);

      }

 

      @Override

      public String toString() {   

       return  "x="+x+" y="+y;

      }

}

public class TestUserPrivateMethod {

    /**

     * @param args

     */

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

    TestMethodClass t2 = new TestMethodClass("1", "2");

    //t.print();

    Method method = TestMethodClass.class.getDeclaredMethod("print",new Class[]{int.class});

    method.setAccessible(true);

    method.invoke(t2,new Object[]{1});

}     

}

 

9.      註解 Annotation

JDK1.5的新特性

包括三個註解類型

 

可以自定義註解 如:

 

@Retention(RetentionPolicy.RUNTIME)

public @ interface  MyAnnotation {

        String   color() default "blue";

}

 

 

10.    泛型

 

 

 

 

 

   11 類加載器 

 

     JVM 提供了三個類加載器   BootStrap(C++編寫的) -à  ExtClassLoader(java類),  à AppClassLOader(java類)

 

     可以自己寫一個類加載器 。

 

 12 動態代理   參照我的另一篇文章

     

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章