淺談CoreJava基礎知識點之一


一、JDK JRE JVM 三者的區別

  JDK(Java Development Kit): 是太陽微系統針對Java開發人員發布的免費軟件開發工具包  是整個Java和音,包括了Java運行環境JRE(Java Runtime Environment),一堆Java工具javacJavajdb等)和Java基礎類庫(即JavaAPI包括rt.jar)

  JRE(Java Runtime Environment):JRE顧名思義是java運行時環境,包含了java虛擬機,java基礎類庫。是使用java語言編寫的程序運行所需要的軟件環境,是提供給想運行java程序的用戶使用的。

  JVM(java virtual machine):JVMJAVA虛擬機,它將.class字節碼文件編譯成機器語言,以便機器識別! JAVA程序就是在JVM里運行的。

二、Java常見數據類型

  1、引用型數據類型(四類八種)

    1)整形數據類型

      ①byte(8位字節)取值范圍-128~127

      ②short(16位字節)取值范圍215-1~-215

      ③int(32位字節)取值范圍231-1~-231

      ④long(64位字節)取值范圍263-1~-263

    2)浮點型數據類型

      ①float32位字節)取值范圍2-149~2128-1

      ②double64位字節)取值范圍2-1074~21024-1

    3)  字符型數據類型

      ①char(8位字節)

    4)布爾型數據類型

      ①boolean

三、運算符

  1i++++i的區別

    1i++是先賦值后+  ++i是先+后賦值,舉個栗子

      int i=0j=0

      System.out.println(i++)

      System.out.println(++j);

      顯而易見,輸出結果為1,2

      i++是先進行輸出然后再進行自增運算而++j是先進行自增運算再進行輸出的

  2、三目運算符

    1int i = 1>2?1:2;

      三目運算符分為3部分1>2為第一部分  條件表達式1

                1為第二部分  條件表達式2

                2位第三部分  條件表達式3

      三目運算符是由三個操作對象構成,一般結構為

        條件表達式1?條件表達式2:條件表達式3

        意思為當條件表達式1true的情況下返回條件表達式2否則返回條件表達式3

    2/%的用法及區別

      用法:都是數學運算符 都輸雙目運算符

      區別:/用於數字運算求商,就是單純的數學運算符號。舉個栗子:

          System.out.println(15/5)輸出結果為3

          %用於求余數,一般用來判斷X能否被Y整除

          System.out.println(15%5)輸出結果為0

    3)邏輯判斷 &  &&  的區別 || 用法

      ①& &&的用法及區別,& 等同於and 和  並且,舉個栗子:

        int o=1;

        if(o>1&&o++>0){
        }
        System.out.println(o);輸出結果為1

        if(o>1&o++>0){
        }
        System.out.println(o);輸出結果為2

        根據上面兩個栗子不難得出結論:&  不管左邊表達式時是否返回為true都會執行右邊的表達式

                       &&  當左邊的表達式返回為false時將不會執行右邊的表達式

      ②| ||的用法和區別,| ||等同於或者 or,舉個栗子:

        int i=1;
        if(0<i|1<(++i)){
            System.out.println(i);
        }

        if(0<i||1<(++i)){
            System.out.println(i);
        }

        根據上面的兩個栗子不難得出結論:| 不管左邊的表達式返回是否為true 都將執行右邊的表達式

                        || 當左邊表達式返回為true時將不會執行右邊的表達式

四、對象的加載過程,封裝,繼承(重寫與重載的區別),多態,抽象類,接口,訪問修飾符權限大小

  1)對象的初始化過程:

       包含繼承的子類初始化過程為:(父)靜態對象(子)--非靜態對象(父)--構造方法(父)--非靜態對象(子)--構造方法(子)

        。舉個栗子:

            測試類

          

            父類

            

            子類

           

          運行結果

            

          從運行結果上可以看出:包含繼承的子類初始化過程為:(父)靜態對象(子)--非靜態對象(父)--構造方法(父)--非靜態對象(子)--構造方法(子)

          在不包含繼承情況下對象的初始化過程是靜態對象--非靜態對象--構造器

          對象

           

          測試類

          

  2)封裝

      封裝:將屬性或者方法私有化,設置公有的set get 方法;我個人理解就是將屬性和方法統一提取到一個私密的空間里 

       然后給這個空間訂上訪問它的坐標,不能直接訪問這些屬性和方法,只能通過坐標來獲取

  3)繼承

      繼承 是面向對象軟件技術當中的一個概念,與多態、封裝共為面向對象的三個基本特征。

      繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等。

      優點是:去除代碼重復,提高代碼復用性,便於維護。

      在Java中類只支持單繼承,接口支持多繼承,接口不能被類繼承,普通類繼承抽象類得重寫抽象類里邊的所有抽象方法

  4)抽象類

      一個被abstract修飾的特殊的類,此類中可以有抽象方法和常量,也可以有非抽象方法和變量

      抽象類不能被實例化,只能被繼承

  5)接口

      一個被interface修飾的特殊的類,在此類中只允許有常量和抽象方法,在JDK1.8以后(包含1.8可以有普通方法和變量),

      接口不能被實例化,只能被實現(implements)

      實現一個接口就得重寫它里邊的所有抽象方法  接口支持多繼承

  6)訪問修飾符權限大小

      private(本類)<-default(本包)<-protected(不同包的子類)<-Public(公有)

      private:私密的,故只能在本類中使用,封裝就是將此類里所有的方法和屬性的訪問修飾符全部設定成private

      default:默認的,在普通類中,默認的訪問修飾符就是這個,它的訪問權限僅僅比private大一級,僅限同一個包中使用

      protected:這個訪問修飾符又比default大一級,可以在不同包中訪問,但前提是兩者必須是繼承關系

      public:公開的,顧名思義,用這個訪問修飾符修飾的所有屬性和方法,在所有的類中都可以隨意調用

五、數組的聲明三種,如何遍歷取值賦值  for循環執行順序,選擇排序,冒泡排序 Continue break的區別  switch語句用法

  1)數組的聲明方式及遍歷取值 賦值

    ①數組的三種創建方式,話不多說,上代碼:

      int []a=new int[6];
       int[] b = {1,2,3};
       int[] c=new int[]{1,2,3};

    ②數組的遍歷取值方式共4種:

      第一種,使用for循環,話不多說看代碼:

      

      第二種,使用while循環,繼續放代碼:

      

      第三種,使用增強for循環,還是放代碼:

      

      第四種,使用do...while循環,最后一次放代碼:

      

     ③數組的賦值

        數組賦值可以在聲明數組的時候就賦值,也可以通過下標賦值,上代碼:

        聲明時賦值

        

        運行結果

        

        通過下標賦值

        

        運行結果

        

        數組的下標是從0開始,0是第一個元素,如果沒賦值的話它默認為0;

   2)for循環的執行順序

      要知道for循環的執行順序,首先得了解for循環總體分為幾部分

      for(初始化語句int i=0;條件語句i<20;迭代語句i++){

          System.out.println("方法體")

        }

       如上所述,for循環總體分為4部分,1初始化語句,2條件語句,3迭代語句,4方法體

      for循環剛開始第一次循環會首先執行初始化語句,也就是int i=0;然后執行條件判斷語句  i<20,如果它返回false則不會進入下一步,

        如果返回true則執行方法體System.out.println("方法體"),執行完方法體后,再執行迭代語句也就是1 2 4 3

        當首次循環完畢之后進行第二次循環的時候將不會執行初始化語句,而是直接開始執行第二步,也就是條件語句,

        返回true的情況下再執行方法體,然后繼續迭代,直到條件語句返回為false為止;

 

   3)選擇排序

    選擇排序,顧名思義,有選擇的進行排序,話不多說先看代碼:

     for (int i = 0; i < a.length-1; i++) {外層循環,確定的是要比較的次數
              b=i;
              for (int j = b+1; j < a.length; j++) {里層循環,將未比較的元素拿出來與外層循環的元素一一比較
                  if(a[b]>a[j]){判斷兩個元素的大小
                      b=j;記住值為小的一方的下標
                  }
              }
              if(b!=i){判斷一次循環結束后值為小的下標是否為當前元素下標,如果是則跳過此段代碼,如果不是則將當前元素與此次比較的最小元素進行更換位置
                  int c=a[i];
                  System.out.println(c);
                  a[i]=a[b];
                  a[b]=c;
              }
          }

    上圖:

 

   4)冒泡排序

      冒泡排序:原理是每次比較兩個相鄰的元素,將較大的元素交換至右端。

      思路拓展:每次冒泡排序操作都會將相鄰的兩個元素進行比較,看是否滿足大小關系要求,如果不滿足,就交換這兩個相鄰元素的次序,一次冒泡至少讓一個元素移動到它應該排列的位置,重復N次,就完成了冒泡排序。
           通過一個圖來簡單理解一下一次冒泡的過程【注意:圖中每一豎列是一次比較交換】:
             
           圖中可以看出,經過一次冒泡,6這個當前數組中最大的元素飄到了最上面,如果進行N次這樣操作,那么數組中所有元素也就到飄到了它本身該在的位置,就像水泡從水中飄上來,所以叫冒泡排序。
           下圖就是整個飄的過程:

            
           以上,第五第六次可以看到,其實第五次冒泡的時候,數組已經是有序的了,因此,還可以優化,即如果當次冒泡操作沒有數據交換時,那么就已經達到了有序狀態

           思路理清楚了那就上代碼:

                      for (int i = 0; i <a.length-1; i++) {
                                for (int j = i+1; j < a.length-i-1; j++) {
                                      System.out.println(a[i]+"---"+a[j]);
                                      if(a[i]<a[j]){
                                            b=a[i];
                                            a[i]=a[j];
                                            a[j]=b;
                                      }
                                }
                                for (int i1 = 0; i1 < a.length; i1++) {
                                      System.out.print(a[i1]+",");
                                }
                            }

            通過代碼的輸出可以看出來,每次都是兩個相林的數進行比較,如果外層循環的數小於里層循環的數則進行互換位置

            這樣第一輪比較出的結果就是最大的數換到了第一個,第二輪比較就開始從第二個數比較,第三輪是第三個數,直至結束;

  5)Continue break的區別  switch語句用法

    ①Continue與break的用法和區別:

      Continue是跳出本次循環進行下一次循環,break是直接跳出,結束循環,看代碼:

    

      運行結果

                          

      break的運行結果

        

        由上圖可以看出不論是break還是Continue都具有跳出循環的功能,它們下面的輸出語句都沒執行,但是Continue的循環循環了5次,break只循環了一次。

        由此可以得出結論,Continue具有跳出循環的功能,但是它只是跳出了本次循環,下一次循環還是會繼續執行,直到循環結束。而break是直接結束了循環,讓循環終止。

  6)switch語句的用法  

    能用於switch判斷的類型有:byte、short、int、char(JDK1.6),還有枚舉類型,但是在JDK1.7后添加了對String類型的判斷

    case語句中少寫了break,編譯不會報錯,但是會一直執行之后所有case條件下的語句而不再判斷,直到default語句

    若果沒有符合條件的case就執行default下的代碼塊,default並不是必須的,也可以不寫。廢話不多說,看代碼:

      int i=0;
            switch (i) {
            case 0:
                System.out.println(0);
                break;
            case 1:
                System.out.println(1);
                break;
            default:
                System.out.println("負數");
                break;
         }

    switch只能判斷相等。case語句后邊一定要加break,不然一旦匹配到某個case之后,它后面的所有case都會默認執行,而不管是否匹配;

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM