隨筆 - 4, 文章 - 2, 評論 - 36, 引用 - 0
          數據加載中……

          一些JAVA學習筆記

          準備工作
          1、JDKjava develop kit java開發工具包;
          2、JREjava runtime environment, java 運行時環境;
          3、JDK 的三個版本:
          J2SEjava標準版,桌面程序和小應用程序的開發
          J2EEjava企業版,企業級的開發(WEB開發)
          J2ME:主要是手持移動設備程序的開發;
          4、JAVA的特性:
          a 簡單的
          java屏棄了c++中一些復雜的操作,如指針、結構等
          b 面向對象的
          java是完全面向對象的
          c 健壯的
          java通過檢查編譯和運行時的錯誤來保證程序的可靠性
          java提供的垃圾回收機制,保證了內存不會泄露
          d 安全的
          e 解釋的
          ? java是解釋執行的,而不是編譯執行的,通過生成java的字節碼,來解釋執行
          f 平臺無關的
          ? java生成字節碼,由java解釋器來解釋
          g 多線程的
          ? 在語言級上支持多線程
          h 動態的
          ? java將變量或方法的引用轉換成符號引用保存下來,傳遞給解釋器,由解釋器來動態決定其加載;
          5、java跨平臺的原理:
          ·java的跨平臺是通過JVM來實現的。Java的編譯器在編譯java的源代碼的時,并不是將變量和方法的引用編譯為數值引用,也不確定內存布局,而是將這些信息保存在字節碼中,由解釋器在運行時候確定內存布局。也就是說,java的編譯器生成的字節碼中,并不包含與特定硬件平臺相關的信息。
          ·java解釋器的執行過程分為:字節碼的裝載、校驗、執行。在裝載過程中,由裝載器裝載字節碼,所有本地代碼都被裝載到同一個內存命名空間里,而所有外部引用的代碼都有自己的內存命名空間,本地代碼只是保存了對其引用的符號信息。當所有字節碼都裝載完成后,java解釋器就確定了內存布局。
          ·通過實現不同平臺下的JVM,來實現字節碼的跨平臺;
          6、jdk\bin\jar.exe 可以對程序進行打包、發布;
          7、在java中,文件名必須與被聲明為public的類相同,所以在java文件中,最多只能有一個public的類;
          8、java解釋器加載的是類,因此,對類名的大小寫是敏感的;
          9、/** …..*/這種注釋可以自動生成一個注釋的文檔;
          10、當定義了classpath后,java解釋器就會按照classpath進行查找,而不查找當前目錄,若想查找當前,則在classpath中加入;
          11java提供了8種基本數據類型:
            byte 有符號的1字節的整數 (-128---127
          注 byte類型參與運算時,java會將其類型自動提升為int,
          如 byte a ; a= (byte)(a*2);

          ? ? short ? 有符號的2字節的整數  注 同上 
            ? int (4)
          ? long (8)    ? 注 默認1.3這樣的數,默認為double

          ? ? ? float (4)
          ? ? ? double (8) ? ? ? ? ? ? ? ? ? ? ? ?
          ? ? char ? ? 無符號的2個字節  unicode編碼,表示
          ? boolean
          12java數組在定義時,不能直接分配空間;
          Int[] array;
          Array={1,3}; //這種寫法是error
          13java中二維數組,列數可以不相同,實際上每一行都是一個一維數組;
          14int i=3 ,count;
          Count=(i++)+(i++)+(i++);
          Out: count=12;
          Count=(++i)+(++i)+(++i);
          Out: count=15;


          位運算



          1、計算機數據常用16進制表示;
          2、原碼:第一位為符號位,0表示正,1表示負;
          反碼:正數的反碼是原碼本身,負數的反碼是符號位不變,其他各位按原碼取反;
          補碼:正數的補碼是原碼本身,負數的補碼是符號位不變,其他各位取反加1;
          3、計算機采用補碼進行數據處理;
          4、位運算符:
          & 按位與    只有兩位都為1時,結果為1;
          | 按位或    兩位任意一位為1時,結果為1;
          ^ ? 按位異或   只有兩位不同時,結果才為1;
          ~ 按位取反   
          5、移位運算符:
          << 左移
          >> 帶符號右移   (負數:所有空位都補1)
          >>> 無符號右移
          6、API

          Java.lang.Integer. toHexString(int i);   //整型轉換為其對應的十六進制數
          7、移位運算的效率要高于存儲運算,在一些講求效率的程序中,應考慮使用移位運算;
          8、<<1 左移一位,相當于乘以2
          >>1 右移一位,相當于除以2






          Java的面向對象編程



          1、OOP:描述的是對象和對象之間的相互作用;
          2、面向過程和面向對象編程的區別:
          ·面向過程編程,一般是先確定算法,然后考慮數據結構,而面向對象編程,則是先確定數據結構,在設計算法;
          ·面向過程編程,往往是將數據保存到數據結構中,并通過方法來操作數據,而面向對象的編程中,則是將數據和方法組織到一個對象中;
          3、類是對象的摸板,對象是類的實例;
          4、面向對象編程思路:先將現實世界實體抽象成對象,然后考慮解決的方法;
          5、類的構造方法,沒有返回類型,名字與類名相同,構造函數用于對類對象定義初始化狀態,每個類必須有構造函數,若沒顯示定義,則java編譯器會自動生成一個不含參數的構造方法,若顯示定義,則java不會提供任何默認構造方法;
          6、new 關鍵字:
          ·為對象分配空間  ·引起構造函數的調用  ·返回一個對象的引用
          7、方法的重載(OverLoad
          ·構成重載的條件:方法名稱相同,參數個數或參數類型不同;
          8、this 關鍵字:
          ·this關鍵字代表著一個特定的類對象本身;
          ·this 只在方法內部使用,代表調用方法的對象本身;
          ·this 可以簡化構造方法的調用this();
          9、java的成員方法在內存中都只包含一份拷貝,被所有對象所共享;而成員變量則有多份拷貝,屬于不同對象所擁有。當特定對象調用一個成員方法的時候,this被表示為指代該對象,去調用成員方法,然后與該對象的成員變量進行關聯;
          10static 關鍵字
          ·被定義為static的方法或變量,是屬于一個類的,而不屬于某一個對象的;
          ·static的方法或變量,在類加載的時候,就分配了內存空間,并且在內存中只有一份拷貝;
          ·在static的方法中,不可以引用非static的方法和變量,而在非static的方法中,可以引用static的方法或變量;
          ·static的方法和變量可以通過類和對象來引用(實質還是通過類來引用)
          11final 關鍵字
          ? ·被聲明為final的常量,是不允許被修改的,并且在定義時,就必須對其進行初始化(實際也可以將初始化放到構造函數中);
          ·常把final的常量,同時聲明為static,可以節約空間;
          12java中通過extends 實現繼承,不允許多繼承;
          13override
          在子類中實現一個與父類中,具有相同名稱,返回類型,參數的方法,稱為方法的重寫;
          14super 關鍵字
          ·super 提供了子類中訪問被重寫或隱藏了的父類的方法或變量的方法;
          ·在子類的構造函數中,都會在第一句隱式地加入一句super(),如果父類中沒有這樣的構造函數,則會報錯;
          15、多態:
          java中根據傳遞參數所引用的對象的不同,來調用相應子類的方法;
          ·編譯時多態:方法的重載;
          ·運行時多態:根據傳遞對象的不同,來調用不同的方法;
          16instanceof
          用于判斷一個對象是否為一個類的實例;




          1、使用package關鍵字定義包,包層次對應目錄的層次;
          2、使用 javac –d 目錄 *.java 編譯,生成包
          ? 使用 java 包名.類名來執行文件;
          3、使用import 來導入一個包;


          類的修飾符

          1、·public公共類 ? ? ? ? ?
          ·default:包內可見
          2final被聲明為final的類,是最終類,不允許被繼承;
          ? ·java.lang.String類是個final類;
          3abstract:包含抽象方法的類;
          ? ? ? 不允許產生抽象類的對象;
          ? ? ? 可以將不包含任何抽象方法的類,聲明為abstract,以避免產生這個類的任何對象;
          4、方法訪問說明符
          ? public ? 公共的
          protected 同一包中或不同包中的子類可以訪問
          default ? 同一包內可以訪問
          private ? 同一個類內可以訪問
          5、其他方法說明符
          · static
          · final ?
          將方法定義為final,則在繼承過程中,子類將不能重寫該方法;
          privatestatic方法,自然都是final的;
          · abstract 不包含方法體的方法;
          · nativeJNIJava Native Interface
          ? ? ? ·JNI允許JVM中運行的java程序與其他語言編寫的應用程序進行互操作;
          ? ? ? ·JNI可以理解為java程序和本地應用程序的之間的中介;
          ? ? ? ·JNI程序編寫步驟:
          1、寫一段java代碼;
          ? ? ? ? 2、編譯java代碼
          ? ? ? ? 3、創建 .h文件(使用javah –jni 類名)
          ? ? ? ? 4、寫一個本地方法的實現
          ? ? ? ? 5、創建一個共享的庫
          ? ? ? ? 6、執行java程序;
          垃圾回收

          1、沒有任何引用的對象,成為垃圾內存,會被垃圾回收器回收;
          2、垃圾回收器是自動運行的,當JVM感覺到內存不夠的時,就會自動運行來處理垃圾內存;
          3、垃圾回收器在真正回收一個對象之前,會調用finalize()方法,子類重寫這個方法,來做一些配置系統資源或執行其他清除的工作;
          4API

          Java.lang.Object. finalize(); //垃圾回收前調用該方法
          Java.lang.System.gc()   ? //運行垃圾回收器


          接口

          1、接口中全部方法默認為public abstract,那么在實現接口的類中,也必須為public的;
          2、實現一個接口,若想去創建一個實現類的對象,那么就必須去實現接口中的所有方法;
          ? 否則,實現類必須聲明為abstract
          3、接口中允許有數據成員,這些成員默認為 Public static final
          4java中允許一個接口繼承另一個接口;
          5java 中不允許類的多繼承,但允許接口的多繼承;
          6、先繼承類,然后再實現接口;


          內部類

          1、在一個類中,定義一個類,這個類就叫做內部類;
          2、當我們建立一個內部類時,內部類的對象就會與外部類的對象之間產生某種聯系,這種聯系是通過this 引用形成的,從而使的內部類可以隨意訪問外部類的成員(包括private的)
          3、在內部類的方法中,通過this.x 引用內部類的成員變量;通過outer.this.x引用外部類的成員變量;
          4、使用外部類名.內部類名(outer.inner)的方式,在outer類外部引用內部類;
          5、在未產生一個外部類對象時,不能使用new來直接創建一個內部類對象,因為內部類對象都是和一個外部類對象想關聯的,使用 Inner in=outer.new Inner()可以創建(outer為已創建的外部類對象);
          6、內部類可以放到方法、條件語句體、語句塊中,但不管嵌套的層次有多深,內部類都可以隨意訪問外部類的成員;
          7、當內部類在一個方法內部定義的時候,那么方法的參數或局部變量,必須聲明為final,才可以被內部類調用;
          8、內部類可以被聲明為protected private的;
          9、內部類可以被聲明為static的類,這時,創建內部類對象就不需要必須首先產生一個外部類對象做為前提了,而這樣,內部類也不能隨意訪問外部類的非static的成員了;
          ? static切斷了外部類與內部類之間的關系)
          10、非static的內部類中,不能有靜態的方法或變量存在;
          11、內部類可以實現接口;
          12、將內部類聲明為private的,可以很好的隱藏實現的細節;
          13、匿名內部類可以用于實現適配器類,在AWT編程中,經常使用到;


          異常處理

          1Exception類:定義了程序中遇到的輕微錯誤條件,需要我們在程序中進行處理;
          2Error類:定義了程序中遇到的嚴重錯誤條件,內存溢出,文件格式錯誤等,不需要我們去處理,而由java 運行時系統來進行處理;
          3Java程序如果在運行的過程,發生了異常,就會自動生成一個異常對象,并將該異常對
          ? 象提交給java運行時系統(拋出異常throws),接受到異常對象,java運行時系統就會查找能夠處理該異常的代碼,并將該異常對象交給它進行處理(捕獲異常catch)。如果找不到能夠處理該異常的代碼,java程序就會終止運行;
          4try/catch/finally 來處理異常;
          5、在try中,發生異常的語句后的程序段,不會被執行,而是直接跳轉到catch語句里去;
          執行完catch里的語句,會繼續執行后面的語句;finally里的語句始終都要執行;
          6API
          ? Java.lang.Throwable. getMessage()
          ? Java.lang.Throwable. toString()
          Java.lang.Throwable. printStackTrace() ? //以上都是捕獲異常的信息
          6、在方法的參數列表后,跟上 throws Exception 用來聲明,該方法有可能會拋出異常。一旦,產生了異常,則異常會被拋給該方法的調用者。如果方法的調用者不做處理,依舊可以逐級向上拋,直到main函數也不做處理,將該異常拋給 java runtime system來處理;
          7、throw 實際拋出一個異常
          throws 聲明拋出一個異常
          8、RunTime 異常一般不需要我們去處理,而由運行時系統自己處理;
          9、子類在覆蓋父類方法的時候,不能拋出新的異常,而只能是相同的異常或該異常的子集;


          String



          1String 類是final類,不允許被繼承;
          2= = 是比較變量的值(引用對象的地址)是否相等
          ? equals()是比較變量的內容(引用的對象內容)是否相等;
          3+ 用于連接字符串;
          4+ +=java中唯一被重載的操作符;
          5String 變量是個常量,一旦被創建,就不能被改變;
          6、在處理大量字符串的程序中,常用 StringBuffer 來代替String
          7API
          ? Java.lang.StringBuffer.append() //
          8StringBuffer 創建的對象空間初始為16個字符,但當空間不夠的時候,會自動增加;
          9java中的傳遞參數,都是以傳值的方式,基本類型是傳遞值的拷貝,引用類型是傳遞的引用的拷貝;
          10、當打印一個對象的時候,會調用該對象的toString方法;


          克隆機制
          ·為了獲得對象的一份拷貝,我們可以使用Object類中的clone()方法,在派生類中重寫clone()方法,并聲名為public
          ·必須在繼承類中實現cloneable接口(標識接口),來告訴編譯器:該對象可以克隆了;
          ·在繼承類的clone()中調用 superClone();
          ·淺拷貝:當在類中沒有引用對象存在時,類中所有的變量都可以拷貝過去;
          深拷貝:當類中有存在引用對象時,將該引用對象一同克隆一份的克隆方法;(將引用對象所對應的類也重寫clone方法,并且實現cloneable接口,并且在引用類的clone方法中,將clone方法返回值賦值給引用的變量中);
          數組操作:

          1API
          java.lang.system.arraycopy //數組的拷貝
          ? java.util.Arrays.sort ? ? // 對數組進行排序
          ? java.util.Arrays.binarySearch // 對有序數組進行搜索
          2、排序對象數組,數組中的所有對象都必須實現Comparable接口;


          封裝類:



          1、針對八種基本類型,java中存在八個封裝類;
          2、數字字符串轉換為Integer類型: valueOf(String s);
          ? 數字字符串轉換為int 類型: ? parseInt(String s);


          反射API

          1java.lang.reflect


          單例模式:

          1、每一個類都只有一個實例;
          2、單例模式的構造方法是private
          3、主要用于:需要一個類只提供一個實例的時候,例如計數器;
          4、單例類的一個實現:
          ? class Singleton
          {
          ? private static Singleton st=new Singleton();
          ? private Singleton()
          ? {
          }
          public static Singleton getInstance()
          {
          return st;
          }
          }
          5、參考書java與模式》閻宏電子工業出版社





          多線程:

          1、程序:程序是一系列計算機指令的集合,以文件的形式存儲在計算機磁盤上;
          ? 進程:進程是一個程序在其自身地址空間內的一次執行活動,它可以申請系統資源,被調度、運行;
          ? 線稱:線程是一個進程中的一個單一連續控制流程,一個進程可以擁有多個線程,沒有獨立的內存空間,而是與其他線稱共享同一進程的地址空間;
          2、進程與進程切換上下文切換耗時,遠遠低于線程間切換的效率;
          3java在語言級支持多線程;
          4、實現多線程的方法:
          ? 一、繼承Thread 類;
          ? 二、實現Runnable接口;
          5、實現run()方法,并用start()啟動一個線程;
          6setDaemonboolean )設置一個線程為后臺線程,當程序的線程都為后抬線程時,程序就會退出;
          7yield()方法可以使一個線程放棄自己的時間片,而讓出執行機會給其他線程;
          8setPriority設置一個線程的優先級;
          9java的線程調度機制,不支持時間片輪換,而是支持搶占式的方式,對于具有相同級別的線程,如果操作系統支持時間片輪換,則java虛擬機也支持這種方式;
          10sleep():在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。該線程不丟失任何監視器的所屬權。
          11、線程同步:同步塊和同步方法;
          ? ·synchronizedobj)塊,一個線程進入synchronized塊前,先給obj對象監視器加鎖,其他線程則不能進入,等離開時,則對監視器解鎖;
          ? ·synchronized方法,使用synchronized聲明一個方法,這種方法的鎖是加到this對象上邊;
          12、線程的死鎖:
          13wait():導致當前的線程等待,直到其他線程調用此對象的 notify() 方法或 notifyAll() 方法
          notify():喚醒在此對象監視器上等待的單個線程。如果所有線程都在此對象上等待,則會選擇喚醒其中一個線程。選擇是任意性的,并在對實現做出決定時發生。線程通過調用其中一個wait方法,在對象的監視器上等待。
          14、終止線程:
          ·設置一個flag變量;
          ·Intrrupte() 中斷有一個線程;


          集合類:

          1、集合框架(Collections Framework):就是一個用來表示和操作集合的統一的架構,包含了實現集合的類和接口;
          2、集合框架中的接口:
          ? CollectionàSetàsortedSet ? ? ? ? ? MapàsortedMap
          ? ? ? ? à List
          ·collection:集合層次中的根接口,JDK中沒有提供這個接口的直接實現類;
          ·set:不能包含重復的元素。Sortedset是元素按照升序排列的set
          ·list:是一個有序的集合(不是指的排列順序),可以包含重復的元素,提供按索引訪問的方法;
          ·map:包含了key-value對。不能包含重復的元素。Sortedmap是一個將key值按升序排列的map
          3ArrayList
          ·arraylist可以看成是一個可以增長容量的數組;
          ·arraylist的實現是使用了一個對象數組,當容量不夠的時候,會重新分配一個數組,將原來數組中的元素拷貝到新數組中;
          ·數組à List (Arrays.asList())
          Listà數組 ? (arrayList.toArray())
          ·迭代器(Itertator):
          ·對于沒有提供get方法的集合類,可以使用iterator來返回集合中的元素;
          ·可以提供一個通用的方法來返回元素,如
          Pubilc static vid printElems(Collection c)
          {
          ? ? Iterator i=c.iterator();
          ? ? While(i.hasNext())
          ? ? {
          ? ? ? System.out.println(i.next());
          }
          }
          4collections
          ·collections類中所有的方法都是static
          ·自然排序
          ·使用比較器排序
          5LinkedList
          ? ·使用雙向循環鏈表實現的;
          ? ·可以實現棧、隊列、雙向隊列;
          ·ArrayListLinkedList的比較:

          ? ·arrayList的低層是采用數組來實現的,而linkedlist是采用雙向鏈表實現的,linkedlist的每一個對象中,都包含了除了自身數據元素外的,兩個值,一個指向前一個元素,一個指向后一個元素;
          ? ·如果經常要在list中的第一個位置插入數據或頻繁插入或刪除操作,則使用LinkedList
          ? 如果要經常地查找某一個元素,則使用ArrayList,它提供了按索引查找;
          6HashSet
          ? ·實現set接口的hash table,依靠hash map來實現的;
          ? ·hashset的默認負載因子是0.75
          ? ·每一個對象都有個hashCode,根據內存地址計算出來的;
          ·hashset中存儲元素,則元素的類必須實現hashCode()和equals()
          7ThreeSet
          ·ThreeSet是依靠threeMap來實現的;
          ·ThreeSet中的元素是有序的,缺省按照升序排列,因此threeset中的元素必須實現Comparable接口;
          ·HashSet TreeSet的比較:

          HashSet是基于hash算法來實現的,通常其性能都是優于TreeSet,通常都是使用hashset的;只有使用到排序功能的時候,才會使用TreeSet
          8HashMap
          9TreeMap
          ·按照key排序
          ·HashMapTreeMap的比較:

          ? set的一樣;




          I/O操作

          1、一個java中的File類,即可以表示一個文件,也可以表示一個目錄;
          2、在程序運行過程中,產生的運行時臨時程序,可以通過deleteOnEixt(),在程序結束的時候清除這些中間文件;
          3java中的讀取和寫入都是通過流來完成的;
          4、流:字節的源或目的;
          5、流分類:節點流和過濾流(需要一個存在的節點流對象)
          6InputStream
          ? Abstract int read()
          ? Int read(byte[])
          ? Int read(byte[],int off,int length)
          ? Void close()
          7outputStream:
          ? Abstract void write(int b)
          ? Void write(byte[] b)
          ? Void write(byte[] b,int off, int length)
          ? Void flush()
          ? Void close()
          8、基本流:
          ? ·FileInputStream FileOutputStream ? (節點流)
          ·BufferedInputStream BufferedOutputStream (過濾流)
          9、當使用bufferedoutputstream()的時候,只有當緩沖區滿的時候,才會輸出,可以使用flush()或關閉 close()方法強制輸出;
          10DataInputStream DataOutputStream (過濾流)
          ? ? 提供對基本數據類型的讀寫操作;
          11PipedInputStream PipedOutputStream (管道流)
          ? ? 用于線程之間的通信;
          12java的輸入\輸出,提供的是一種鏈結機制,可以把兩個流首尾相結,形成一個流管道。這種模式被稱為裝飾模型(Decorater)。
          13Reader Writer 是用來讀寫字符流;
          ? InputStream OutputStream 是用來讀寫字節流;

          posted on 2008-12-08 16:41 幽夢新影 閱讀(1805) 評論(4)  編輯  收藏

          評論

          # re: 一些JAVA學習筆記   回復  更多評論   

          是不是沒啥東西寫了?籠統的一些概念。
          2008-12-08 17:33 | T

          # re: 一些JAVA學習筆記   回復  更多評論   

          亂得沒法看。
          2008-12-08 20:29 | ww

          # re: 一些JAVA學習筆記   回復  更多評論   

          雖然有點雜,不過對付java考試還是很有用
          2008-12-10 14:23 | ...

          # re: 一些JAVA學習筆記   回復  更多評論   

          嗯,雖然有點亂,但是很多東西對我都有用,支持樓主!
          2008-12-11 11:46 | 小人物

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 肥东县| 扬中市| 宝应县| 山阳县| 锡林浩特市| 奉贤区| 千阳县| 陇川县| 宁南县| 简阳市| 宜都市| 贵阳市| 金山区| 顺义区| 沅江市| 临武县| 潢川县| 山阴县| 濮阳市| 塔城市| 武宁县| 鲜城| 肥东县| 卓尼县| 邢台县| 宁化县| 华蓥市| 布拖县| 凭祥市| 花莲县| 玉龙| 遵化市| 布尔津县| 略阳县| 绵竹市| 安阳市| 上思县| 虞城县| 彭泽县| 同心县| 壤塘县|