JAVA
開發環境:
- JDK---Java開發環境
- JDK中包含JRE JRE---Java的運行環境
- JRE中包含JVM虛擬機 JVM存在于JRE中bin目錄內
JVM虛擬機兩大特性:
- GC垃圾回收機制
- 通過new開辟的空間,不需要free釋放,自動的被JVM虛擬機釋放了 人為不可干涉
- 跨平臺 => 半編譯半解釋實現的
第一個Java代碼:
- 1.任何的代碼都應該寫在類中
- 2.通過關鍵字class來定義一個類
- 3.一個java文件可以寫多個類,但是應該有一個主類,通過public來定義一個主類,主類的名字需要和文件名相同
- 4.在Java中程序的入口也是Main方法
- 5.main方法有固定的格式,只有寫成固定的格式才能被JVM虛擬機識別并運行:
public static void mian(String[] args)
public修飾主類可以被JVM訪問到,主類中的main被public修飾可以被JVM訪問到這個方法
static修飾:靜態的成員會隨著類的加載而加載,當運行主類時,static修飾的main會立馬出現
編譯解釋運行Java代碼:
編譯:javac xxx.java
編譯之后生成字節碼文件,有幾個類就生成幾個字節碼文件
解釋執行:java xxx 解釋執行Java代碼
Java中特有的注釋方法---文檔化注釋:
/**
* @author farsight
*/
文檔化注釋可以在dos命令行通過javadoc生成注釋文檔
eclipse的使用:
alt+/ 補齊
ctrl+/ 注釋
ctrl+f11 運行
復制、剪切、粘貼
eclipse創建項目:
- 1.new JavaProject
- 2.new package 包名經常寫公司的域名倒寫 cn.com.farsight 在硬盤就行有cn目錄,目錄中又有com目錄。。。。
- 3.new class
- 4.運行Java代碼實質上就是在dos命令行執行了Javac 和 java 兩個指令
Java的命名規則:
規則 | 實例 | |
---|---|---|
類名 | 雙駝峰 | DayOne |
變量和方法名 | 單駝峰 | dayOne |
常量 | 全大寫 | COUNT |
關鍵字保留字:
- goto、const
- true和false是boolean的兩個值,并不是關鍵字
- Java中的關鍵字都是小寫的
數據類型:
- Java中有byte數據類型 -- 1個字節大小
- java中的char兩個字節 -- 因為Java中沒有能夠表示一個字節的數據類型了,所以造出一個byte數據類型
- 0b表示二進制,一堆的0/1看起來不便捷 --- “_”做分隔
- char類型表示65535個特殊符號,其中包含常用的漢字、日文等等 Java采用的編碼格式:unicode編碼
- boolean類型的表述范圍是0/1 一位。boolean類型的值只能是true/false,不能用0/非0代替
類型轉換:
- 浮點型字面值(如3.14)默認的是double數據類型,字面值3默認int數據類型
- 3.14f/F表示該字面值是float類型,或者,(float)3.14也可以轉為float類型
- 表達式的數據類型,以最大的為準,10+3.14該表達式就是double數據類型 --- 自動升級
- 根據圖,數據類型從左到右可以實現自動類型轉換(可以不加強轉),但是有虛線的類型之間轉換可能導致精度丟失
變量作用范圍:
- 方法內的是局部變量。局部變量在使用之前必須初始化,系統不會默認進行初始化
- 方法外的是全局變量,也稱為成員變量。成員變量,聲明時會自動進行初始化
語句:
- Java中for循環的第一條語句可以用來定義變量
- Java中有foreach語句,經常用來遍歷容器中的 數據
數組:
- 聲明的兩種方式
- 初始化的兩種方式:
- 靜態初始化:開辟空間時直接初始化
- int[] array = {1,2,3,4,5};是下面的一種省略
- int[] array = new int[]{1,2,3,4,5};
- 動態初始化:先開劈空間,然后自己實現初始化
- int[] array = new int[5];
- array[0] = 1;
- array[3] = 4;
- 靜態初始化:開辟空間時直接初始化
- 數組變量array引用了一塊內存空間,這塊空間才是真正的數組的內容 --- 引用數據類型
引用數據類型:
- String類型,可以表示字符串
類:
- 類是一種描述,描述什么樣的事物才屬于這個類 抽象的范圍
對象:
- 是屬于某個類,一個具體的,實實在在存在的實物 具體,獨一無二的實物
面向對象的編程語言:
- 針對一件事情,需要哪些對象,協助完成
- 方法相當于謂語,調用方法時,該方法都是依賴主語的(任何動作/謂語的發生都依賴主語調動)
面向對象解決需求:
- 1.抽取名詞/對象
- 2.描述對象所屬的類
- 3.創建對象
- 4.對象協作完成需求
封裝:
- 一個類中的成員,可以被外部的類直接用對象訪問,這樣不安全
- 為了提高代碼的安全性 --- 封裝
- 概念:對內隱藏細節,對外提供方法
- 對內隱藏細節:private修飾,外部的類就不能直接訪問這些成員了
- private:該修飾符修飾的成員只能在當前類中有效 public:共有的,任何類都可以訪問到 默認修飾符:同一個包中有效
對外提供接口(方法):通過public修飾的方法,外部的類通過訪問該方法實現對私有成員變量的設置年齡和獲取年齡
構造器:
- 對象一產生就應該帶著自己的屬性,并不應該后期添加設置
- 解密:new 類名();該處的類名()就是 構造器,我們可以借助于構造器實現對象初始化
- Student xm = new Student(參數1,參數2,參數3);匹配到對應的構造器,借助于對應構造器實現對成員變量的初始化
- 當類中不寫構造器時,系統會默認添加一個無參的構造器;當寫了有參數的構造器時,系統不會默認添加無參的構造器了
- 構造器和普通的方法很相似:(構造器就是特殊的方法)
- 方法體、有方法名、有參數、可以被public、private、默認修飾符修飾
- 構造器和方法的不同:
- 1.方法名必須和類名相同
- 2.不寫返回值類型
- 3.作用:專門用來創建對象初始化使用
重載:
- 構造器可以寫多個(多個名字相同的構造方法),參數不同,調用時根據參數進行匹配
- 普通的方法也可以寫多個方法名相同,參數不同的方法,調用這些方法時,就是根據參數不同進行匹配 --- 重載
this關鍵字---構造器之間調用:
- 方法之間可以相互調用,那構造器之間可以相互調用嗎?
- 構造器之間調用,不能通過 構造器名(參數) 來調用,應該通過this(參數)來匹配調用
- 調用其他構造器時,必須放在第一行
this關鍵字---區分成員變量和局部變量重名的現象:
- this.變量 => 該變量是全局變量
- 直接打印變量 => 就近原則
this的含義:
- this指代當前對象
static關鍵字語法規定:
- static修飾的方法(靜態方法)內只能訪問static修飾的成員
static修飾成員的加載時間:
- 隨著類的加載而加載
- 當靜態成員方法加載時,非靜態成員變量和方法還沒有加載(找不著),所以靜態方法內部不能調用非靜態成員
-
Test tt = new Test();
JVM執行到Test時:加載Test類,并將該類中的靜態成員一同加載
JVM執行到new Test()時:將Test中非靜態的成員加載到堆中的對象中