qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          一些關于Java的瑣碎知識點

          1、對于類中的final類型屬性,一般在聲明的時候直接寫final int a =1;

            但也可以在構造函數中進行賦值,如:

          final int a;
          A{}( a =1;)

            但要注意:需要每一個構造函數都賦值,且不能嵌套。

            而如果想寫static final int a;則必須在聲明時進行初始化,static final int a = 1;因為靜態的也是不屬于類。

            2、繼承中要注意的問題:子類對父類中構造方法的問題。

            父類的中構造方法不能被繼承,故

          class A{}
          class B extends A{ A();} //是錯的,只能用super關鍵字

            如果子類中沒有顯示的調用super,則系統會加上,super();注意即是找父類中無參數的構造方法,所以,如果父類自己寫了構造方法而導致無參數的已經不存在了,則會出錯.

            3、靜態方法:只屬于類本身,而不是某個對象。它是在類加載的時候,就已經為之分配好內存了。這時,并沒有產生這個的對象。而對象只有在new時候才會出現。所以只能把這個變量加個static.這也叫做類變量,與之對應的叫做實例變量。

            4、main是靜態的,因為它不是屬于某個類的,而是全局的。因此在執行時直接找到main,而不是針對某個類的對象。如果不是static,則會先產生類的對象。

            public:由于其是虛擬機調用,因此必須是public的。

            static:由于其不必產生對象,因此是static的。

            5、對于主類的修飾符是default時:表示在同一個包中可以被訪問。

            6、final類不能被繼承。

            7、private的方法,只要出了類就不能被訪問,不管是在同一個包中,還是繼承關系。默認的訪問權限都是在這個包中,被繼承也不能被訪問。

            protected方法對以上均適用,但和public方法也有區別

            在于:對于不同包中,沒有繼承關系的兩個類而言,在一個類中使用了另一個類的對象,則只有public方法可以被訪問,而protected方法不能被訪問。

            8、抽象方法的聲明:abstract void proMethod(); //不要加大括號

            看一個類是否被實現,不是看{}里面有沒有代碼,而是看有沒有{}

            9、JNI(Java Native Interface),它允許Java虛擬機(JVM)內部運行的Java代碼能夠與用其它編程語言(如c、c++、匯編語言)編寫的應用程序和庫進行互操作。

            JNI可以理解為Java和本地應用程序之間的中介。

            它最大的好處是沒有對底層Java虛擬機的實現施加任何限制。

            寫一個native的方法:

            1)寫java代碼段,如HelloWorld.java。

            2)用javac來編譯之,得到.class文件。

            3)用javah -jni 來生成HelloWorld頭文件,得到HelloWorld.h

            4)用HelloWorld.h來生成本地方法,得到HelloWorldImp.c

            5)編譯本地代碼,加載共享庫,生成Hello.so(so文件是linux,或unix下動態連接庫的文件,相當于windows下的.dll)

            10、對于接口中的方法,默認情況下就是public abstract的,因此不用再寫,也因此,實現接口時必須用public來修飾。

            接口中的數據成員默認都是public static final.

           11、

          以下是代碼片段:
           class Z extends A implements B,C
            {
            }
            //注意這個順序先派生類,再實現接口。

            12、有關內部類:當我們產生一個派生類的對象的時候,它會調用基類的構造函數,產生一個基類的對象。因此

          以下是代碼片段:
           class Car
            {
            class Wheel
            {
            }
            }
            class PlaneWheel extends Car.Wheel
            {
            public static void main(String[] args)
            {
            PlaneWheel pw = new PlaneWheel();
            }
            }

            這是不能通過編譯的,因為我們要產生pw,就必須先產生Car.Wheel的對象,而它是內部類,所以要產生它的對象,就必須先產生外部類的對象,才能建立起內部與外部的引用關系。

            因此作出改變:

          以下是代碼片段:
            class PlaneWheel extends Car.Wheel
            {
            PlaneWheel(Car car)
            {
            car.super();
            }
            public static void main(String[] args)
            {
            Car car = new Car();
            PlaneWheel pw = new PlaneWheel(car);
            }
            }

            21、javac A.java可以生成B.class,前提是classB在A.java中被聲明為一個類,且不是Public的。

            22、finally的問題:不是在try,catch之后的語句就相當于finally,因為如果在try中有return語句,則其后的是不會被執行的。而如果放在finally中,則一定會執行。

            如果在代碼中會有一個嚴重錯誤,而不想讓finally中的語句執行,則寫

            System.exit(-1);來避免其執行。//不是0就可以。

            23、c++中允許程序員重載操作符,但java中不允許。針對String的"+"和"+=",是java中唯一被重載的操作符。

            24、StringBuffer的應用:

            StringBuffer sb = new StringBuffer().append("a").append("bc").append("123");

            可用toString()方法,將其轉化為toString();

            由于在打印時會自動調用toString方法,因此,打印時不必顯示加上。

            25、java中的索引是從0開始,而且,對于一個區間的數值,是大于等于,小于的關系。即前面的數字是包含的,而后面的是不包含的。

           26、java中,傳參時:對于基本數據類型,傳遞的是數據的拷貝;對于引用類型,傳遞的引用的拷貝。但是對于引用的拷貝,是淺拷貝,即指向了堆中同一處內存。

            因此在改變值的時結果不一樣,對于基本類型,其回到傳參者時沒有改變其值,而對于引用,其值則改變了。

            27、有的接口中沒有任何抽象方法,如cloneable,叫作標識接口。它僅僅是告訴編譯器自己可以被克隆。

            如果類中的成員有引用,則涉及到淺拷貝還是深拷貝的問題。

            淺拷貝就是把除了引用成員的全都拷貝一份,而對于引用部分則指向同一處。而深拷貝就是把所有的都拷貝一份。

            調用super.clone()方法,它可以在運行時刻,object中的clone()識別出你要復制的哪一個對象,然后為此對象分配空間,并進行對象復制,將原始對象的內容一一復制到新對象的存儲空間中。

            28、Integer的

            valueOf(String s) //把s轉化成一個包裝類對象返回

            parseInt(String s) //把s轉化成一個int型數據返回

            封裝類的對象的值是不能被修改的,只能是讀。

            29、java中,每個class都有一個相應的Class對象。也就是說,當我們編寫一個類,編譯完成后,在生成的.class文件中,就會產生一個Class對象,用于表示這個類的類型信息。

            獲取class實例的三種方式:

            a)利用對象調用getClass()方法獲取該對象的class實例;

            b)使用class類的靜態方法forName(),用類的名字獲取一個class實例

            c)運用.class的方式來獲取class實例,對于基本數據類型的封裝類,還可以用.type來獲取相對應的基本數據類型的class類型。如:

          以下是代碼片段:
          Point pt = new Point();
            Class c1 = pt.getClass();
            System.out.println(c1.getName());
            try{
            Class c2 = Class.forName("Point");
            System.out.println(c2.getName());
            }
            catch{……}
            Class c3 = Point.class;
            System.out.println(c3.getName());
            Class c4 = int.class;
            System.out.println(c4.getName());
            Class c5 = Integer.TYPE;
            System.out.println(c5.getName());

            30、java中的反射api:主要用于:對于某個不知道名字的類,通過反射機制調用他們的構造函數,為構造函數及其他函數進行傳參,調用。

            31、runtime這個類提供了應用程序與環境之間的接口。可以獲取jvm的總共內存,已占有的內存。用getRuntime()方法獲取其實例。

          Runtime rt = Runtime.getRuntime();
          System.out.println(rt.freeMemory());
          System.out.println(rt.totalMemory());

            另可以有執行命令,返回一個process. 為應用程序做準備。

          try{rt.exec("notepad");}
          try{rt.exec(javac ArrayTest.java);};

            要獲得其具體輸出的信息,可以用process類。

          try{
          Process p = rt.exec("java ArrayTest");
          InputStream is = p.getInputStream();//此時,其輸出全在了 InputStream中
          int data;
          while((data=is.read())!=-1)
          {
          System.out.print((char)data);
          }
          }

            Runtime類是使用單例模式的一個例子。

            32、單例模式:

            a)一個類只有一個實例,而且自行實例化并向整個系統提供這個實例,這個類稱為單例類。

            b)單例類的一個最重要特點:它是類的構造方法是私有的,從而避免了外部利用構造方法直接創建多個實例。

          以下是代碼片段:
          class Singleton
            {
            private static final Singleton st = new Singleton();
            private Singleton(){}
            public static Singleton getInstance()
            {
            return st;
            }
            }


          posted on 2011-10-28 10:25 順其自然EVO 閱讀(240) 評論(0)  編輯  收藏

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 靖江市| 化州市| 班玛县| 武川县| 永和县| 长白| 昌都县| 沈丘县| 富蕴县| 翁牛特旗| 新龙县| 苍南县| 西畴县| 关岭| 亚东县| 鲁山县| 天镇县| 平阳县| 杨浦区| 富蕴县| 晴隆县| 西贡区| 府谷县| 民乐县| 穆棱市| 广平县| 运城市| 天台县| 平顺县| 红原县| 常州市| 高邮市| 高邑县| 宣汉县| 兴安县| 滁州市| 长葛市| 昌图县| 恩施市| 申扎县| 深州市|