idea快捷鍵
alt+enter:自動補全
ctrl+d:復制當前內容到下一行
ctrl+f5:程式再運行一次
100.for:自動生成回圈一百次的for回圈陳述句
fori+tab鍵:自動生成for回圈
注釋
Java中有三種注釋:
- 單行注釋://,快捷鍵Ctrl+/
- 多行注釋:/* */,快捷鍵Ctrl+shift+/
- 檔案注釋:/**
? *@Description Hello
? *@Author ***
? */
? 其中@是描述符
Java資料型別
Java是一門強型別語言,即變數的使用要嚴格符合規定,所有變數要先定義后才能使用
Java資料型別分為兩大類,基本型別和參考型別
1. 基本型別
-
整數型別
- byte:一位元組,-128--127
- short:兩位元組,-32768--32767
- int:四位元組
- long:八位元組
long a=30L;//long型別后面要加個L整數型別拓展:
二進制0b;八進制0;十六進制0x
//不同進制賦值 int i = 10; int i1 = 010;//八進制 int i2 = 0x10;//十六進制賦值 -
浮點型別
- float:四個位元組
float a=50.1F;//float型別后面要加個F- double:八個位元組
浮點數拓展:
//float和double型別的兩個值相同的數,他們的比較結果的布林值是false float a = 0.1; double b = 1.0/10; //變數a和b的比較結果是false //因此銀行業務中,表示錢不用float或者double,而是用BigDecimal(數學工具類)表示 -
字符型別
- char:兩個位元組
字符拓展:
//字符在記憶體中存放的都是相應字符的數值,ASCII碼或者Unicode碼(表示方式:'\u0061') -
boolean型別:占一位,只有true和false兩種
2. 參考型別
類、介面、陣列
型別轉換
低------------------------------------------------------------------------>高
byte,short,char->int->long->float->double
-
自動型別轉換:優先級由低到高會自動轉換
-
強制型別轉換:優先級從高到低需要前置型別轉換
double a = 1.5; int b = (int)a;//此時b為1
注意:
- 不能對布林值進行轉換
- 不能把物件型別轉換成不相干的型別
- 轉換后可能會丟失精度或者溢位
- JDK7新特性:數字之間可以用下劃線分割,即10_0000_0000
變數
Java變數是程式中最基本的存盤單元,包括變數名,變數型別和作用域,
type varname [=value][{,varname[=value]}];
//資料型別 變數名 = 值;可以用逗號隔開來宣告多個同型別變數
變數命名要滿足命名規則:字母、下劃線、$開頭,不能用識別符號命名
變數作用域
- 類變數
- 實體變數
- 區域變數
public class Variable{
static int allClicks=0; //類變數
int age;
String name;
//如果不進行初始化會有默認值,int的默認值為0,String的默認值為null
String str = "hello world";
public void method(){
int i = 0; //區域變數
}
}
常量
常量:初始化之后就不能再改變的值
final 常量名 = 值;(常量名一般為大寫字符)
final PI = 3.1415926;
變數的命名規范
運算子
- 自增、自減運算子
int a = 1;
int b = a++;//表示先把a的值賦給b,然后a再加一
/* 等同于
int b =a;
a = a+1;
*/
int c = ++a;//表示的a的值先加1,然后再把a的值賦給c
/* 等同于
a = a+1;
int c = a;
*/
- 邏輯運算子
注:該類運算子中存在一種短路現象,即如果運算子左邊的值就已經能決定該運算式的值了,那么就不再計算該運算子右邊的運算式了,
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);//輸出false
System.out.println(c);
//輸出5,表示并沒有執行(c++<4)這個運算式,因為邏輯運算子左邊的運算式已經可以決定整個運算式的值了
- 位運算子
-
^為異或
-
移位運算子的效率很高,因此有時可以通過以為操作來實作乘方運算,左移一位相當于乘2,右移一位相當于除2
- 三元運算子
-
運算式1?運算式2 :運算式3
表示如果運算式1的值為真,那么整個運算式的值為運算式2的值,否則為運算式3的值
包機制
//語法格式
package pkg1.[pkg2[.pkg3..];//必須寫在程式的最開頭
/*包的命名格式一般是公司域名倒置
如:com.baidu
*/
//匯入要使用的包
import package pkg1.[pkg2[.pkg3..];
JavaDoc
javadoc是用來生成api檔案的,需要在程式中寫好檔案注釋
在命令列執行:javac 引數 程式檔案名稱
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
#-encoding UTF-8 -charset UTF-8為引數,使中文字體可以展示出來
/**
*@author xxx
*version 1.0
*since 1.5
*/
public class Doc{
String name;
/**
*@author xxx
*@param name
*@return
*/
public String test(String name){
return name;
}
}
在idea中生成api檔案的方法:
- 點擊IntelliJIDEA頂部的Tools選單,選擇GenerateJavaDoc選項
- 接下來在底部的Locale輸入框配置語言和編碼集,語言用zh_CN,代表中文,其他的輸出和控制塔一致
-
接下來在底部的Locale輸入框配置語言和編碼集,語言用zh_CN,代表中文,其他的輸出和控制塔一致
-
注意:生成的檔案里面會有很多 .html 檔案 正常
用戶互動Scanner
Java提供了一個工具類,用來獲取用戶的輸入,java.util.Scanner
基本語法:
Scanner s = new Scanner(System.in);
s.close(); //用完關閉
通過Scanner類的next()和nextline()方法獲取輸入的字串,在讀取錢一般要使用hasNext()與hasNextline()判斷是否還有輸入的資料,
next():
- 一定要讀取到有效字符后才可以結束輸入
- 對輸入有效字符前遇到的空白,next()方法會自動將其去掉
- 只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結束符
- next()不能得到帶有空格的字串
nextline():
- 以Enter作為結束符,即回傳輸入回車前的所有字符
- 可以獲得空白
類似還有輸入整數或者其他型別的方法,如
nextInt()、nextFloat()
順序結構
程式按順序依次執行
選擇結構
if陳述句:
if(運算式){
//如果運算式為true要執行的陳述句
}else if(){
//反之執行的陳述句
}.....
switch陳述句:
switch case陳述句判斷一個變數與一系列值中某個值是否相等,每個值為一個分支
switch(expression){
case value:
//陳述句
break;//可選,用來表示結束
case value:
//陳述句
break;//可選
//可以有任意數量的case陳述句
default://可選,都不滿足時執行的陳述句
//陳述句
}//括號也表示結束
switch陳述句中的變數型別可以是:
- byte、short、int、char、String(通過轉換成哈希值實作的)
- case標簽必須為字串常量或者字面量
注:
? 在switch結構中的case分支下要寫break陳述句,如果運算式與case分支的標簽相匹配,但是該case分支里沒有break陳述句,那么程式會順序執行后面的case分支,直到遇到break陳述句或者到達default分支,或者遇到“}”才結束,
回圈結構
while回圈:
while(運算式){
//回圈陳述句
}
//運算式為真時一直回圈下去
do while回圈:
do{
//回圈陳述句
}while(布爾運算式)
while和do while的區別:
- while先判斷后執行,do while先執行后判斷
- do while至少被執行一次
for回圈:
for(初始化;布爾運算式;更新){
//回圈陳述句
}
//不寫布爾運算式,默認為真,也就是死回圈
增強for回圈:
主要用于陣列或集合的遍歷
for(宣告陳述句 : 運算式){
//代碼陳述句
}
//例
int[] nums = {1,2,3,4,5};
for(int x:nums){
System.out.println(x);
}
注:
? 宣告陳述句:宣告新的區域變數,該變數的型別必須和陣列型別匹配,其作用域限定在回圈陳述句塊,其值與此時陣列元素的值相等,
? 運算式:運算式是要訪問的陣列名,或者是回傳值維陣列的方法,
break continue
break用于強行退出回圈,不執行回圈中剩余的陳述句
continue陳述句,用于終止本次回圈,接著執行下一次回圈
帶標簽的break continue
break outer:中斷當前回圈并跳出標簽所指的回圈
continue outer:重新跳到標簽的位置,并開始標簽之后宣告的回圈
使用帶標簽的 break / continue 的原因是:為了跳出或重新開始多層嵌套回圈,
方法
Java方法是陳述句的集合,它們在一起執行一個功能,
- 方法是解決一類問題的步驟的有序組合
- 方法包含于類或物件中
- 方法在程式中被創建,在其他地方被參考
方法的定義和呼叫
方法包含一個方法頭和方法體:
- 修飾符:可選,告訴編譯器如何呼叫該方法,定義該方法的訪問型別
- 回傳值型別:方法可能會回傳值,用來說明回傳值的型別,沒有回傳值用void修飾
- 方法名:方法的實際名稱,和形參串列共同決定一個方法
- 引數型別:引數串列中的每個引數的型別
- 形參:方法定義時說明的,用來接收方法呼叫時傳遞的實參值
- 實參:呼叫方法時實際傳給方法的資料
- 方法體:方法體包含具體的陳述句,定義該方法的功能
修飾符 回傳值型別 方法名(引數型別 引數名,引數型別 引數名,...,...){
...
方法體
...
return 回傳值;
}
方法呼叫:
-
呼叫方法:物件名.方法名(實參串列)
-
Java支持兩種呼叫方法的方式,根據方法是否回傳值來選擇
- 當方法回傳一個值的時候,方法呼叫通常被當做一個值,例如:
int a = max(30,40);- 如果方法回傳值是void,方法呼叫一定是一條陳述句
System.out.println("Hello World");
注:Java中都是值傳遞,沒有參考傳遞
方法的多載
- 多載就是在一個類中,有相同的函式名稱,但形參不同的函式
- 方法多載的規則:
- 方法名必須相同
- 引數串列必須不同(個數不同、或型別不同、或引數排列順序不同等)
- 方法的回傳型別可以相同也可以不同
- 僅僅回傳型別不同不足以成為方法的多載
- 實作理論:
- 方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等逐個去匹配,如果匹配失敗,則編譯器報錯,
命令列傳遞引數
如果希望在運行程式時給程式傳遞訊息,需要考傳遞命令列引數給main()函式實作,
public class Demo{
public static void main(String[] args){
for(int i = 0; i < 10; i++){
System.out.println("args["+ i +"]:" + args[i] );
}
}
}
可變引數
- JDK1.5開始,Java支持傳遞同型別的可變引數給一個方法
- 在方法宣告中,在指定引數型別后加三個點(...)
- 一個方法中只能指定一個可變引數,他必須是方法的最后一個引數,任何普通引數必須在它之前宣告,
public static void printMax(double... numbers){
if(numbers.length == 0){
System.out.println("No argument passed!")
rutrun;
}
double result = numbers[0];
for(int i=1; i<numbers.length; i++){
if(numbers[i]>result){
result = numbers[i];
}
}
System.out.println("This max value is " + result);
}
陣列
陣列的定義
- 陣列是想同型別資料的有序組合
- 可以通過陣列的下標來訪問陣列中的每個元素
陣列宣告創建
宣告陣列的語法
dataType[] arrayRefVar;//首選的方式
dataType arrayRefVar[];//效果相同,但不是首選方式
用new運算子來創建陣列:
dataType[] arrayRefVar = new dataType[arraySize];
陣列元素是通過索引訪問的,陣列索引從0開始
獲取陣列長度:arrays.length
宣告在堆疊區,實體在堆區
陣列的初始化
- 靜態初始化
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
- 動態初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
- 默認初始化
陣列是參考型別,他的元素相當于累的實體變數,因此陣列一經分配空間,其中的每個元素也被按照實體變數的方式被隱式初始化
陣列的四個基本特點
- 其長度是確定的,陣列一旦被創建,他的大小就是不可以被改變的,
- 其元素必須是相同型別,不允許出現混合型別,
- 陣列中的元素可以是任何資料型別,包括基本型別和參考型別
- 陣列變數屬于參考型別,陣列可以看成是物件,陣列中的每個元素相當于該物件的成員變數,陣列本身就是物件,Java中物件是在堆中的,因此陣列無論保存原始型別還是其他物件型別,陣列物件本身是在堆中的,
陣列邊界
陣列的大小是固定的,因此超過陣列的大小會報錯
- 陣列下標的合法區間:[0,length-1],如果越界就會報錯
ArrayIndexOutOfBoundsException:陣列下標越界例外
陣列的使用
- For-Each回圈的方式來便利陣列
- 陣列當作方法的形參
- 陣列作為方法的回傳值型別
多維陣列
多維陣列可以看成是陣列的陣列,比如二維陣列就是一個特殊的一維陣列,其中的每個元素都是一個一維陣列
int a[][] = new int[2][5];//陣列a可以看成是一個2行5列的矩陣
Arrays類
-
陣列工具類java.util.Arrays,可以用其中的方法來操作陣列
-
Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫,從而可以不用使用物件來呼叫
-
常用的功能:
- 給陣列賦值:fill()方法
- 給陣列排序:sort()方法
- 比較陣列中的元素是否相等:equals()方法
- 查找陣列元素:通過binarySearch方法能對排序好的陣列進行二分查找
未完待續,,,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/498535.html
標籤:Java
下一篇:java有哪些基本物件型別呢?
