1. 程式人生 > >java基礎(一)基礎認識、資料型別

java基礎(一)基礎認識、資料型別

基礎知識

1.所有的java程式碼必須寫在類裡面,java的入口函式 main方法

public static void main(String[] args){ }

public ----訪問修飾符

static ----方法是靜態的

final 最終的修飾變數的時候需要賦初始值, 並且在修飾類的時候 該類是不能被繼承的;

main-----方法名

String[] args -----引數;

變數和常量

eg: a=1; a=2; 變數a --- 隨時可變 常量 12 ----不可變

2.宣告一個變數的方式為:

資料型別 變數名; 也可以一開始給以個變數賦值,

資料型別 變數名 = 常量(或者另一個變數);

3.class類:

通過類建立物件的方式: 資料型別 變數名=new 構造方法();

this關鍵詞 指向使用物件; 當引數名和屬性名相同的時候主要用來區分引數名和屬性名,加了this代表屬性名;

原則:屬性私有化,方法公開化;如果寫公共的方法與類沒關係的方法可以

使用static方法,缺點,靜態方法不能使用類當中的非靜態成員; 一檔被修飾靜態成員,可以直接用類名來呼叫;

4.JVM 分為堆 棧 方法區3部分

堆:以new關鍵詞建立的物件;JDK1.7開始 字串常量池也移到堆區中存放;

棧:以棧幀的形式存在,每呼叫一個方法,建立一個站幀,其中儲存臨時變數和引數;

方法區:儲存所有靜態成員,(static修飾的);所有類的資訊;如果引數是基本型別,那麼傳遞的是值,如果是引用型別,傳遞的是指向堆區中的記憶體地址;

5.陣列:在定義的時候必須宣告陣列的長度;陣列在使用中 可以使用for迴圈;

還可以使用 for(int i : a){ i一個一個便利陣列a中的值

}

對陣列中的值進行排序;氣泡排序:規則,相鄰元素兩兩比較交換位置;

選擇排序:先選出一個最小的或者最大的 放到邊界;

6.數學函式:Math.pow(a,b); a代表的是底數. b代表的是指數;

7.Scanner 掃描器 java.util包下;

Scanner scanner = new Scanner(System.in);從控制檯接收輸入的內容;

.next();接收下面一次要輸入的內容;(一行為單位)

.nextInt();接收輸入下面要輸入的一次數字;(以行為單位)

.nextLine();接收下一次輸入的一行內的資料;(以行為單位)

.next()和nextInt() 不能和nextLine()同時使用

每一行結束的時候,我們手動輸入了 換行"\r" 但是用next() 和nextInt()接收的時候,只會接收前面輸入的內容, 而把"\r"留下, 而nextLine() 只要見了"\r" 就會預設有一行(會接收);

8.異常:執行期出現的錯誤:觀察錯誤的名字和行號最重要;

java異常是java提供的處理程式中錯誤的一種機制,程式在執行過程中出現了異常事件,可以生成一個異常類物件,改異常物件封裝了異常事件的資訊並將被提交給java執行時系統這一過程成為丟擲(throw)異常;

當java執行時系統接收到異常物件時,會尋找能處理這一異常的程式碼,並吧當前的異常物件交給處理,這一過程稱為 捕獲(catch)異常;

.try{可能出現異常的程式碼;

}catch(cException ae){

一旦try中出現了異常,則執行catch

}finally{

無論怎麼都會執行final;

}

catch塊中必須有和try塊中相同的return();並且先finally之後 最後返回return;

異常分類(Throwable)

Error : 稱為錯誤,有JVM丟擲,包括動態連結失敗,虛擬機器錯誤等,程式不對其做處理;

Exception : 所異常類的父類,一般需要使用者顯式的宣告或者捕獲

RuntimeException:一類特殊的異常,如陣列下標超出等,產生比較頻繁,處理麻煩,(一般可以有系統自動檢測使用者可不必對其處理)

9.Math類 java.lang.Math;提供了一系列靜態方法用來科學計算,方法的引數和返回值一般為double型別;

abs()絕對值

acos,asin,atan,cos,sin,tan

sqrt()平方根;

pow(double a,double b)a 的b次冪;

log();自然對數;

max(double a,double b);

min(double a,double b);

random()返回0.0---1.0的隨機數;

toDegrees(double angrad);弧度-->角度;

toRadians(double angdeg);角度--->弧度;

10.Enum列舉型別

只能夠取待定值中的一個;

使用enum關鍵字;

是java.lang.Enum型別;

11.重寫equals()

來比較兩個物件是不是相同,其中判斷的規則可以根據需求自己定義;

12.Comparable 泛型介面

compareTo() 用來自定義排序規則; 大於 rerun 1 等於 return 0 小於 return-1;

資料型別

java的資料型別分兩種

1.基本型別:

byte 1位元組 8位

short 2位元組 16位

int 4位元組 32位

long 8位元組 64位

float 4位元組

double 8位元組

boolean 1位元組

char 2位元組

2.引用型別:

類 (string 屬於類)

陣列

介面

3.原始碼 反碼 補碼

原始碼-----原數本身;

反碼------符號位不變,其他位取反

補碼------反碼+1

補碼專門用來表示負數,負數的補碼為反碼+1, 正數的補碼就是自己本身;

4.運算子:

數學運算子:+ - * / % ++ --; a++先運算 後增加,++a 先加價再運算;

關係運算符:> < == <= >= != 計算出的結果是boolean型別

邏輯運算子: ! && || & | 對boolean型別進行計算

短路語: 只要前一個條件能計算出表示式的值後面都不會再進行;

全路語: | & 需要走完全部的路程;

位運算: & | ^ >> << >>> <<< 全部2進位制位數都移動

5.if條件語句/迴圈語句;(迴圈三要素:計數器 迴圈條件 計數器更新)

switch case: 迴圈,break;

迴圈

while() for(); do{程式碼塊} while{迴圈條件};

6.強制型別轉換;

int i=128;

byte j=(byte)i;

char a=(char)i; a計算出的為ASCII碼;

7.String(字串)型別

String name = new String(); 使用new 建立;

String name = "張三"; 直接賦值, String 的底層是字元陣列;

String 之間可以運算, 實現字串的拼接;

String a="asdf";

String b="ads";

方法:toUpperCase() 大寫轉換;

float 精確為小數點之後7位;

double

8.包裝類(在比較數字的時候一定要拆包裝, 使用)integer在進行比較的時候,如果在8位

以內(-128---127)預設有一個快取,物件會指向快取的地址;

通常情況下,類下的屬性都應該定義成包裝類;

包裝類都是引用型別;

byte 1位元組 Byte

short 2位元組 Shot

int 4位元組 Integer

long 8位元組 Long

float 4位元組 Float

double 8位元組 Double

boolean 1位元組 Boolean

char 2位元組 Character

Integer.paseInt(str); 將字串中數字轉換成Int資料型別的數字;

9.String字串:

底層是char陣列:

equals() 比較兩個字串的值是不是一致;

String.valueOf();強制型別轉換; 引數為Object;

陣列的長度length();

substring();擷取字串;一個引數的時候為開始擷取的位置到結束.當引數為兩個的時候,第一個為開始的位置,第二個引數為結束的位置;

replace();替換陣列中的元素;第一個引數傳要被替換的字元,第二個引數傳替換之後的字元;

replaceAll();替換陣列中全部選定的元素;第一個引數傳 匹配的正則表示式,第二個引數傳替換成什麼字串;

拼接字串:

StringBuilder(); 非執行緒安全; 單執行緒拼接的時候使用;

append(" ");追加字元;

StringBuffer(); 執行緒安全; 多執行緒拼接的時候使用;

append(" ");

String+=的拼接方式 在jdk1.8的時候已經被優化,效能已經等同於StringBuilder();但是在開發中禁止使用;

instanceof 判斷型別是否相同

陣列

1.定義:在堆區中建立一個連續的記憶體空間來儲存物件或者變數;

2.定義方式:

資料型別+[] 物件名=new 資料型別+[陣列長度] //定義的時候不賦值

資料型別+[] 物件名={元素,元素} //定義的時候賦值

訪問方式

物件名[陣列的下標] 下標從0開始;

陣列長度

陣列名.length

增強for

for(資料型別 變數 : 陣列物件){

方法體

}

3.排序:

氣泡排序,相鄰兩數互相比較,兩兩交換;

選擇排序:用第一個和後面每一個比較;

陣列的缺點:長度是固定的; 陣列在擴容的時候不方便;

用final 修飾的String 是不能被繼承的

4.集合

(1) ArrayList()------屬於java.util包;若要提升效能,可以在引數中直接寫出要新增的個數,固定size();的長度即可;

List ----------------

構造方法---如果不傳引數,預設底層陣列的長度是10;

如果有引數,底層陣列長度和所傳引數相同;

add()方法--代表向集合中新增元素,每新增一個 size 加1;

--當有兩個引數的時候第一個為索引值,第二個為資料值

remove()方法,引數為索引值,

list.contains()傳入一個元素,判斷是否存在這個元素;

size方法--返回集合的長度(新增才算) 一旦長度超過底層陣列長度 這自動擴充套件,每次擴充套件的容量為 原長度的1.5倍;

get方法--傳下標,

ArrayList---遍歷,

增強for

for(Object a:array){}

普通

for(int i=0;i<arr.size();i++ {}

迭代器迭代:

Iterator it = list.iterator();

while(it.hasNexe()){

Syso(it.next);

}

(2).HashSet(); 無序 去重複; 不能通過get()取出;

Set();

remove(); 引數傳遞的是數值;

(3).HashMap();

對映----鍵值對;

put( , )方法--存放---引數的型別為Object---存放的過程中(鍵)key不可重複; 值可以重複;

get(key)方法----獲取---獲取的過程引數為key;

containsKey();判斷是不是存在這個key;

containsValue(); 判斷是不是存在這個值value ;

hashMap()不支援增強for迴圈;

HashMap map = new HashMap();

5.二維陣列:看成以陣列為元素的陣列----多維陣列的宣告和初始化,應該從高維到低維的順序進 行;

靜態初始化: int intA[][] = {{1,2},{2,3},{3,4,5}};

動態初始化: int a[][] = new int[3][5];

int b[][] = new int[3][];

b[0] = new int[2];

b[1] = new int[3];

陣列的拷貝:

使用java.lang.System類的靜態方法;arraycopy

System.arraycopy(s,0,sbak,0,s.length)各引數分別代表 s為從哪個陣列複製,0代表從s的0號索引開始複製 , 然後複製到 sbak陣列的0號索引開始,長度為s.length;

6.泛型集合:

規範了資料型別的集合;再定義的時候型別後用<規定的型別> 注意.泛型中不能使用基本型別;(但是可以用包裝類替代)

例如 List <String> list = new ArrayList(); 規範了該物件只能存放String型別的元素,從Jdk1.7之後支援泛型推導,但是在在JKD1.7之前是不能被識別的,必須完整寫,例如:

List <String> list = new ArrayList<String>();

Set<String> set = new HsahSet<String>();

Map<Integer , String> map = new HashMap<Integer , String>();

7.二分查詢

前提條件:一個排序完整的陣列才可以使用;