JAVA $ JSP

1. java中數據類型分爲兩種
   基本數據類型:數值型,字符型,布爾型
   引用數據類型:類,接口,數組
   
   

基本數據類型所佔空間固定,有別與C++,java中沒有無符號數
byte:1字節
short:2字節
char:2字節,java採用unicode編碼
int:4字節
long:8字節    long l = 3l;
float:4字節  申明浮點類型變量並複製  float f = 3.14f;  由於默認浮點數爲doble,整型數爲int
double:8字節
boolean:只能取值爲true或false,不能以0或非0的數值代替


2. 標識符
通常類名大寫,包名、方法名、變量名小寫,少用下劃線

3. 運算符
java中多了個無符號右移運算符 >>>  ,最高位爲在右移會補0
對於int型數據移位a>>b,系統先將b對32取模,獲得得結果纔是真正的移位的位數,long型則對64取模

+運算符中兩側的操做數只要有一個是字符串類型(String),系統就會自動將另一個操做數轉換爲字符串而後進行鏈接
int i = 9;
Srting s = "helo" + i + "號";

4. 語句
   java中沒有表達式語句這個概念:  x+y;這條語句是不合法的    
   java中switch 語句中的表達式可使字符,數字和 字符串 類型
   java中沒有goto,可是能夠break和continue後加標號實現相似功能,可是break只能從裏層循環跳到外層循環

   定義java數組 int [] a = new int[3];int a[] = new int[3]; int a[] = {1,2,4};
   int a[5];//非法,由於java中數組是引用類型,a在這裏只是一個引用
   Array.copy(source,0,dest,0,source.Length);提供了數組元素複製功能

   int [][]a = new int [3][];
   a[0] = new int[4];
   a[1] = new int[5];
   a[2] = new int[3];
   

5. 構造
   java中可使用this在構造函數中調用本身的另一個構造方法,或者super調用父類的構造方法,這條調用語句必須放在第一句,且只可以有一條,在C++中則不能
   若是沒有super,java類中構造函數內部會自動加上super調用相應的構造函數

   針對沒有相應構造函數,但又要賦值在java能夠用雙括號這樣寫
   Person p = new Person(){{age = 18;name = "李明"}};

6. 派生子類
   java中的繼承是使用extends關鍵字來實現的
   若是沒有extends子句,則該類默認爲java.lang.Object的子類,全部的類都是直接或者間接地繼承java.lang.Object獲得的
   class A extends B{};
   
   須要明確使用父類的屬性和方法時使用super關鍵字

7. 包
   包及子包的定義其實是爲了解決名字空間,名字衝突
 
   包有兩層含義:一是名字空間、存儲路徑(文件夾);一是可訪問性(同一包中的各個類,默認狀況下可相互訪問)
   
   包層次的根目錄是由環境變量CLASSPATH來肯定的
   
8. import語句
   import用來導入所須要的類
   例如:
   import java.util.Date;
   import java.awt.*
   import java.awt.event.*    //使用*號只能表示本層次的全部類,不包括子層次下的類


9. 訪問控制
   定義類時也可使用訪問控制符,若是使用public控制符,則該類能夠被其餘全部類訪問,若使用默認控制符,
   則只能夠被同包中的類訪問

10. final修飾符
    final類不能被繼承,無子類
    final方法不能被子類覆蓋
    final字段及final局部變量的值一旦給定就不能修改,是隻讀變量,只能被賦值一次
    一個字段被static final兩個修飾符限定時能夠表示常量

11. java中有抽象類和抽象方法,使用abstaact修飾
    抽象類能夠包含抽象方法,也能夠不包含,可是一旦某個類中包含了抽象方法,這個類必須申明爲抽象類
    抽象方法在子類中必須實現,不然子類仍然是抽象的。

12. 接口
    接口中定義的變量爲常量,省略了public,static,final
    默認接口中的方法爲public,在接口的實現中應該寫出來
    接口中的方法都是默認方法
    java8以上能夠有static方法就不是抽象了,還能夠有具備實現體的方法(默認方法)
    接口能夠多繼承其餘接口,類再實現接口,就能夠實現多繼承了

    //接口中的變量爲public static final類型,函數public abstract類型,無論你寫不寫
    interface Inter{
        public static final int AGE = 100;
        public abstract void tell();
    }

13. 原文件名必須與屬性爲public的類名徹底相同,在一個.java文件中package語句和public類最多隻有一個

14. 字段變量和局部變量
    java中屬性或者成員變量爲字段變量,方法中的變量或者參變量爲局部變量,字段變量屬於類。
    存儲位置:成員變量存儲在堆中的對象裏面,局部變量的數據存儲在棧類型中。
    初始值:字段變量能夠自動賦值,局部變量則能夠顯式賦值。
    局部變量必須初始化,通常的成員變量能夠不初始化。
    
14.1 java變量的存儲位置和區別
    寄存器:由編譯器根據需求分配,咱們沒法再程序中控制
    棧:存放基本類型的變量數據和對象引用,但對象自己不放在棧中,而是存放在堆中(new出來的對象)或者
        常量池中(字符串常量對象存放在常量池中)
    堆:存放左右new出來的對象
    靜態域:存放靜態成員(static定義的)
    常量池:存放基本類型常量和字符串常量
    
    棧中的數據大小和生命週期是能夠肯定的,當沒有引用指向數據時,這個數據就會消失。
    堆中的對象由垃圾回收器負責回收。
    棧和常量池中的對象能夠共享,堆中的對象不可共享。
    
    

15. 多態和虛方法調用
    java中的類類型是引用,裏面的普通方法都是虛方法,根據實例調用相應的方法實現多態,C++中必須加virtual關鍵字
    static與實例無關,private,final方法不會被虛化

    動態類型肯定運算符instanceof,返回值爲true,false
       for(int i = 0;i < objs.length;i++){
            if(objs[i] instanceof Integer){
                s += ((Integer)objs[i]).intValue();
            }
            else{
                if(objs[i] instanceof Double)
                    s += ((Double)objs[i]).doubleValue();
            }
        }


16. 垃圾回收
    System.gc()方法能夠請求系統進行垃圾回收
    java中finalize方法相似於其餘語言的析構方法,系統在回收時會自動調用對象的finalize方法


17. 內部類
    在內部類中能夠直接訪問外部類的字段和方法,即便private也能夠
    若是內部類中有與外部類同名的字段和方法,則能夠用  外部類名.this.字段或方法
    擁有內部類的外部類只能使用public修飾或者默認

    用static修飾內部類,代表該內部類實際是一種外部類,由於它與外部類實例無關,static類不能訪問其外部類的非static的字段及方法,只可以訪問static成員,static方法中也不能訪問非static的域及方法

內部類的使用方法
class A{
    class B{
        
    }
}

class C{
    static class D{
        
    }
}

public class mo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        A a = new A();
        A.B b = a.new B();
        A.B a_b = new A().new B();
        
        C.D d = new C.D();//right
//        C.D d = C.new D();//error
//        C.D d = new c().new d();//error
    }
}


18. 局部類
    同局部變量同樣,方法中的內部類,不能使用public,private,protected,static修飾,可是能夠被final或者abstract修飾
    能夠訪問其外部類成員,不可以訪問該方法的局部變量,除非是final局部變量

19. 匿名類
    不取名字,直接使用父類或者接口的名字
    也就是說該類是父類的子類,或者實現了一個接口
    編譯器生成XXXX$1之類的名字

    類定義的同時就建立實例,即類定義前面有一個new
    不使用關鍵詞class,extends,implements等

    在構造對象時使用父類的構造方法
    不可以定義構造方法,由於它沒有名字
    若是new對象時須要參數,則使用父類的構造方法

20. Lambda表達式
    能寫成Lanbda的接口要求包含且最多隻能有一個抽象函數


21. 裝箱和拆箱
    Integer I = 10;//裝箱,能夠直接賦值,將基本類型包裝爲Object(引用類型)
    等同於:
    Integer I = Integer.valueOf(10);
    int i = I;//拆箱,直接賦值,將引用類型轉換爲基本類型
    等同於:
    int i = I.intValue();

    Object []ary = {1, "aaa"};//其中1就被裝箱了

22. 自定義枚舉

23. 註解
    又稱爲註記、標記、標註、註釋(不一樣於commnets)
    是在各類語法要素上加上附加信息,以供編譯器或者其餘程序使用
    全部的註解都是java.lang.annotation.Annotation的子類
    
    經常使用註解
    @Override  表示覆蓋父類方法
    @Deprecated 表示過期的方法
    @SuppressWarnings  表示讓編譯器不產生警告
    
    自定義註解:


24. 裝箱是否相等
    使用 == 進行判斷時基本類型能夠直接判斷,引用類型得看引用得對象是否相同
    Integer i = new Integer(10);
    Integer j = new Integer(10);
    Sysytem.out.println(i == j);//false,,由於對象時是兩個

    Integer i = 10;//實際上使用了valueOf()函數,這個函數給-128-127的數進行了緩存
    Integer j = 10;
    Sysytem.out.println(i == j);//true,,由於對象有緩存

    Integer i = 220;
    Integer j = 220;
    Sysytem.out.println(i == j);//false,,由於對象是兩個

    基本類型緩存的範圍
    true,false,byte,char \u0000 - \u007f
    int,short -128-127
    在緩存範圍內裝箱的對象時相等的
 

25. 枚舉,引用對象是否相等
    枚舉類型內部進行了惟一實例化,因此能夠直接判斷

    引用對象:若是要判斷內容是否相等,則要重寫equals方法,若是重寫equals方法,則最好重寫hashCode方法
    
    String對象,判斷相等必定不要用==,要用equals
    字符串常量能夠直接用 == 比較,字符串常量被內部化了interned,有點像整數的包裝
    String hello = "Hello",lo = "lo";
    System.out.println(hello == "Hello");//true
    System.out.println(mo.ot == "Hello");//true
        
    System.out.println(hello == ("Hel"+"lo"));//true,編譯器已經把它合成爲「Hello"
    System.out.println(hello == ("Hel"+lo));//false,和變量相加不會合成字符串常量
        
    System.out.println(hello == new String("Hello"));//false
    System.out.println(hello == ("Hel"+lo).intern());//true

26. finally
    finally語句不管是否有異常都要執行,即便其中有break,return語句


27. Eclipse調試java
    F5 逐語句執行
    F6 逐過程執行
    F7 跳出函數
    Ctrl+R 運行到光標處

    監視
    即時監視:鼠標指向變量
    快速監視:點右鍵,Inspector
    添加監視:點右鍵,Watch

    還能夠看調用堆棧


28. 經常使用的方法(Object)
    equals()  //判斷內容是否相同, ==  是判斷引用是否相等,通常重載了 equals方法也會重載hashCode方法
    getClass() //final方法,返回一個對象在運行時所對應的類的表示
    toString()  //返回對象的字符串表示
    finalize() //對象清除
    
    與線程相關
    notify()
    notifyAll()
    wait()


29. 基本類型對應的包裝類
    Character,Byte,Short,Integer,Long,Float,Double,Boolean

    包裝類的特色
    1)提供了一些常數:
    如Integer.MAX_VALUE(整數),Double.NaN(非數字),Double.POSITIVE_INFINITY(正無窮)
    2)提供了valueOf(String),toString():用於從字符串轉換或轉換爲字符串
    3)經過xxxxValue方法能夠獲得所包裝的值:如Integer對象的intValue方法
    4)對象中包裝的值是不可改變的,要想改變對象的值的只能從新生成對象
    5)toString(),equals()方法進行了覆蓋
    除了以上特色有些類還提供了一些實用的方法以方便操做:如Double類提供了parseDouble(),max,min等
    

30. 建立線程的兩種方法
    1)經過繼承Thread類建立線程
    class MyThread extends Thread{
        public void run(){
        }
    }

    2)經過Thread()構造方法傳遞Runnable對象來建立線程
    class MyTask implements Runnable{
        public void run(){
        }
    }
    Thread thread = new Thread(mytask);
    thread.start();

    3)使用匿名類來實現Runnable
    new Thread(){
        public void run(){
        }
    }
   
    4)使用Lambda表達式
    (new Thread()->{}).start();

31. 線程相關的方法
    start()  //啓動線程
    run()    //run函數結束線程結束
    setPriority(int priority)  設定線程的優先級
    setDeamon(true)   //設置守護進程,主線程結束deamon線程也會結束

32. 同步
    互斥鎖
    關鍵字synchronized用來與對象的互斥鎖聯繫
    synchronized的用法
    1)對代碼片斷
    synchronized(對象){...}
    2)對某個方法
    放在方法申明中
    public synchronized void push(char c){...}

33. 輸入輸出流
    字節流與字符流
    字符流:Reader,Writer
    字節流:InputStream,OutputStream

    重要方法:    
    InputStream:read()  //讀取的是字節
    OutputStream:write(),flush() //刷新緩存,實際寫入到文件、網絡,close() //關閉流
    Reader:read() //讀取的是字符
    Writer:write() //寫入的是字符

34. 節點流和處理流
    節點流:能夠從一個特定的地方讀寫數據,如文件流FileInputStream,內存流ByteArrayInputStream
    處理流:是對一個已存在的流的鏈接和封裝,又稱爲過濾流,如緩衝處理流BufferedReader

35. 標準的輸入和輸出
    System.in 爲InputStream類型
    System.out 爲PrintStream類型
    System.err 爲PrintStream類型

    從標準輸入讀取數據:
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    br.readLine();

36. Scanner類從控制檯獲取數據
    String next()   //接收控制檯輸入的一個字符
    String nextLine()   //接收控制檯輸入的一個字符串
    int nextInt()    //接收控制檯輸入的一個int型數據
    double nextDouble()  //接收控制檯輸入的一個double數據
    boolean nextBoolean()   //接收控制檯輸入的一個boolean數據

    例子:
    Scanner scanner = new Scanner(SYstem.in);   //儘可能直接避免在控制檯輸入中文

37. 引用傳遞
    java裏面只有基本類型是按值傳遞,比較特殊是String類的對象由於沒法更改,出現更改時其實是生成了新的String對象,能夠把String類型當作按值傳遞


38. 泛型
    泛型做爲函數參數時有兩種方式,一種是不指定類型
    class Info<T>{};
    class Demo{
        public void fun(Info i){
        }
    }
    
    一種是使用通配符,且使用通配符比較多
   class Demo{
        public void fun(Info<?> i){
        }
    }

    除了類以外接口也能夠定義爲泛型




39. jsp註釋
    <%--    --%>


40. jsp編譯指令

50. JDBC編程的五個步驟
    加載驅動->打開鏈接->執行查詢->處理結果->清理環境


Eclipse快捷鍵及配置
Alt + /       //代碼提示,補全名稱

在項目代碼裏面右鍵進入preference是配置本項目選項,windows->preference是設置全局的
代碼提示設置
eclipse默認只有 . 號後有代碼提示,能夠在preference—>java->Editor->Content Assist中設置出現其餘字符時也提示
代碼字體設置
進入preference—>General->Appearence->color and Fonts,右邊選擇java->java Editor Text Font,能夠設置字體和大小,其餘以此類推

查看並修改eclipse預約義的快捷鍵
preference—>General->Editor->keys


ctrl + /      //註釋選中的代碼或者光標所在的行
輸入 /** 回車後能夠自動建立java doc註釋,若是下面是函數的話,能夠自動生成參數和返回值的java doc信息

輸入syso後 再用名稱補全 能夠獲得 System.out.println(); ,syse可得System.err.println();

ctrl + 1快捷修復
例如:int i = 100L;  //將鼠標放在出錯的行使用 ctrl + 1 能夠彈出修復選項,也能夠懸停在錯誤處直接彈出
F2 也能夠快捷修復

ctrl + d      //刪除選中的代碼或者光標所在的行
Shift + Enter   //在光標所在行的下一行迅速建立新的一行,對於某行代碼比較長鬚要換行是比較實用
tab           //將光標自動縮進到當前行代碼的正確位置
Ctrl + F11    //快速運行代碼
Alt + ↑或↓    //快速上下移動選中的代碼或者行
Ctrl + Alt + ↑或↓    //快速上下複製選中的代碼或者行
Ctrl + m      //將光標所在的eclipse視圖最大化,再按一次可還原
Shift + Ctrl + F  //自動排列選定的代碼格式



須要搞清楚的問題:
1. java裏面各類數據類型的數據的生命週期和初始化順序以及存儲位置

2. JNI (java Native Interface)

3. java中的比較,hashCode方法時怎麼回事

4. java成員函數中不能定義靜態變量

5. java的集合java

相關文章
相關標籤/搜索