從零開始學習JAVA(入門基礎)


博主從零開始學習JAVA(入門基礎)

1、搭建JAVA開發環境

卸載JDK(未安裝的請忽略)

  • 將JDK的安裝目錄刪除
  • 刪除JAVA_HOME以及CLASS_PATH 環境變量
  • 刪除PATH下與JAVA_HOME以及CLASS_PATH有關的環境變量

安裝JDK

  • 去Oracle官網下載JDK或者去一些國內鏡像網站下載JDK安裝文件
  • 將JDK安裝到本機中
  • 新增環境變量JAVA_HOME,指定路徑為JDK的安裝目錄
  • 更新環境變量PATH,加入%JAVA_HOME\bin%、以及%JAVA_HOME\jre\bin%
  • 打開電腦DOS命令窗口,輸入java -version以及javac命令判斷java環境是否安裝完畢

2、編程語言中,何為編譯型與解釋型

編譯型

使用專門的編譯器,針對特定的平台,將高級語言源代碼一次性的編譯成可被該平台硬件執行的機器碼,並包裝成該平台所能識別的可執行性程序的格式。可以理解為有一個解釋器,將所有的源代碼編譯成了硬件可以執行的機械碼並直接執行,運行期間無需再次編譯(速度快)

解釋型

使用專門的解釋器對源代碼逐行編譯成特定的硬件可執行的機械碼並且直接執行

3、第一個JAVA應用程序

// 在dos命令行執行 javac HelloJava.java
// 執行 java HelloJava
// 輸出結果:Hello JAVA
public class HelloJava{
public static void main(String[] args){
     System.out.println("Hello JAVA");
  }
}

4、JAVA之中的關鍵字有哪些

abstract   assert   boolean   break   byte   case 
catch   char   class   const   continue   default 
do   double  else   enum   extends   final   finally 
float   for   goto   if   implements   import   instanceof
int   interface   long   native   new   package   private 
protected   public   return   short   static   strictfp 
super   switch   synchronized   this   throw   throws 
transient   try   void   volatile   while 

5、注釋的使用

// 這是一個單行注釋
/*
  這是一個多行注釋,我是第一行
  這是一個多行注釋,我是第二行
*/

/**
  這是一個DOC文檔注釋
*/

6、標識符的定義規則

  //JAVA中定義的標識符只能是 字母[a-z][A-Z]、下划線_、美元符號$ 開頭
  // 正確實例
  int name;
  int Name;
  String _str;
  String $str;

  // 錯誤示例
  int *1;
  int #1;

7、基礎數據類型規則

JAVA的8個基礎數據類型

  /**
    位bit是計算機最小的存儲單位
    1個字節byte 占據8位,也就是1byte = 8bit
  */
  // 整數類型 
  byte 占據1個字節,范圍為2^7 到 (2^7)-1
  short 占據2個字節
  int 占據4個字節
  long 占據8個字節
  // 浮點類型
  float 占據4個字節
  double 占據8個字節
  // 字符類型

  char 占據2個字節
  // 布爾類型,值只有true或false
  boolean 占據1位

數據類型面試題

  • 銀行金額需要使用什么數據類型
    BigDecimal 類來存儲金額
  • 為什么浮點數不能用來計算金額
    因為不夠精確,會損失精度

基礎數據類型轉換規則

  • 自動轉換規則
    向上轉型,意思就是精度小的會向着精度大的進行轉型,long與double進行運算后結果為double。
  • 強制轉換規則
  // 在需要強制轉換的變量前加入小括號 (數據類型)[變量名]
  // 只有向下轉型時需要使用強制轉換(意思就是精度大的轉換為精度小的需要強制轉換)
  // 強制轉換時要注意丟失精度問題
  long long1 = 10;
  int int1 = (int)a1;

變量、常量、作用域

  // 局部變量的作用域僅限於當前方法
  // 成員變量只有創建了該類的實例才能使用
  // 類變量用類即可調用,作用於當前類

  // 使用了final修飾的變量就會變成一個常量
  // 變量,顧名思義,可以被多次重新賦值的一個值

算數運算符

自增自減運算符

  int a = 10;
  int b = a++; // 先賦值再加1,值為10,該行結束后a為11
  int c = ++a; // 先加1再復制,值為12

與或非運算符

  // 與 &&,兩個都為true才為true, && 為斷路與,只要左邊為false,右邊則不進行判斷了
  // 或 ||,兩個都為false才為false,否則為true
  // 非 ! ,將false取反為true,將true取反為false

位運算符 & | ^ ~ << >> >>>

  & | ^ ~
  /*
    計算機底層在運算時,會將其轉換為補碼形式
    1、正數的補碼等於它的原碼
    2、負數的補碼等於它的原碼 (取反 +1) , 而負數的補碼轉換為原碼的時候則需要 (-1 取反)也就是逆運算
    3、補碼與原碼之間的轉換時,最高位符號位不用取反
    4、使用~進行取反的時候,符號也要取反
    5、左移右移時記住一點細節,5>>3 = 5/(2^3) ,5<<3 = 5*(2^3) 
  */
  // 位運算的應用1:判斷奇數偶數,一個數 &1,如果結果為1則是奇數,否則為偶數
  int num = 10;
  String result = (num & 1)==0 ? "偶數" : "奇數";
  /*
    位運算的應用2:使用異或^完成兩個數之間的值交換
    原理:一個數異或自己,再異或一個其他的數,就會變成那個其他的數,例如: 5 ^ 5 ^ 8 = 8,因為5^5之后結果得0,所以再^8時結果為8
    兩個數字a與b進行交換,a = a^a^b,b = b^b^a;可以看到一個規則,其中兩個等式右邊都有一個 a ^ b
 
  */
  int a = 10;
  int b = 20;
  // 由於等式右邊都有一個a ^ b
  a = a ^ b;
  // a 等於了 a^b時,b只需要用自己 ^ 一次a 就可以得到a的值
  b = b ^ a;
  // 而這個時候 a只需要再^一次自己當初的值即可得到b的值,自己的當初的值已經賦值給了b,所以再^ 一次b即可
  a = a ^ b;
  System.out.println("這時a的值等於:" + a + " b的值等於:" + b);

javadoc生成java文檔

  @author 作者名
  @version 版本號
  @since  指明最早使用的jdk版本
  @parram 參數名
  @return 返回值
  @throws 所拋出的異常

  生成javadoc時,需要使用的命令: javadoc -encoding utf-8 -charset utf-8

流程控制

switch

  // switch語句中只能編寫byte、short、int、char,在jdk1.7時可以使用String

遞歸思想

  遞歸就是方法自己調用自己,但是遞歸調用的空間復雜度較高,容易出現棧溢出
  例如使用遞歸編寫一個可以計算出階乘的
  
  public int factorial(int baseNum) {
    if (baseNum == 1){
      return 1;
    }else {
      return baseNum * factorial(baseNum - 1);
    }
  }

java內存 棧、堆、方法區、常量池

  • 存放對象的引用(地址)
  • 存放基本類型的變量(包括值)

  • 存放new出來的對象及數組

方法區

  • 存放所有的class文件
  • 存放static修飾的方法及其變量

數組的三種初始化及基本特點

靜態初始化

int[] arr1 = {1,2,3,4};
String[] arr2 = {new String("s1"),new String("s2")};

動態初始化(包含默認初始化,及對應的數據類型的默認值)

int[] arr2 = new int[10];

數組的基本特點

  • 數組長度一旦確定就不能夠改變
  • 數組只能是固定類型,不能為混合類型(數組中的每個元素都必須為相同類型)
  • 數組中的元素可以是基本類型,也可以是引用類型
  • 數組創建出的對象存放在堆中,引用存放在棧中
  • 並且數組本身即為一個對象

關於二維數組的理解

可以理解為一個數組里裝了多個一維數組

數組的選擇排序與冒泡排序

  // 冒泡排序
  public static void bubbleSort(int[] arr) {
        // 確定循環次數
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if(arr[i] < arr[j]){
                    // 交換
                    arr[i] = arr[j] ^ arr[i];
                    arr[j] = arr[j] ^ arr[i];
                    arr[i] = arr[j] ^ arr[i];
                }
            }
        }
    }

  // 選擇排序
  public static void selectSort(int[] arr) {
        // 確定循環次數
        for (int i = 0; i < arr.length - 1; i++) {
            // 每次循環都需要得到一個最大或最小的值
            for (int j = i + 1; j < arr.length; j++) {
                if(arr[i] < arr[j]){
                    // 交換
                    arr[i] = arr[j] ^ arr[i];
                    arr[j] = arr[j] ^ arr[i];
                    arr[i] = arr[j] ^ arr[i];
                }
            }
        }
    }

權限修飾符

  權限修飾符       本類       當前包      不同包下的子類      不同包
    private        √
  default(默認)     √           √
   protected       √           √              √
    public         √           √              √              √

多態中、方法的編譯看左邊,運行看右邊,變量的編譯與運行都看左邊

記住一點,static修飾的方法不能被重寫,所以調用static修飾的方法,編譯運行都看左邊,而變量無法被重寫,所以編譯運行也都看左邊

public class A {
    public static void main(String[] args) {
        Father father = new Son();
        System.out.println(father.a);
        System.out.println(father.b);
        father.show();
        father.staticShow2();
    }
}

class Father{
    int a = 10;
    static int b = 20;
    public void show(){
        System.out.println("父類的成員方法");
    }

    public static void staticShow2(){
        System.out.println("父類的靜態方法");
    }
}
class Son extends Father{
    int a = 100;
    static int b = 200;
    @Override
    public void show(){
        System.out.println("子類的成員方法");
    }
    public static void staticShow2(){
        System.out.println("子類的靜態方法");
    }
}

super關鍵字與this關鍵字的區別

super

  • super 調用父類的構造方法,必須放在構造方法的第一行
  • super 必須只能出現在子類的成員方法或者構造方法中
  • super和this不能同時調用構造方法!(因為會初始化多次,數據不安全)

this 與 super的區別

  • this為當前對象的引用
  • super為父類對象的引用


免責聲明!

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



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