Java入門(mén)基礎(chǔ)知識(shí)

計(jì)算機(jī)基礎(chǔ)

二進(jìn)制

? 計(jì)算機(jī)中的數(shù)據(jù)不同于人們生活中的數(shù)據(jù),人們生活采用十進(jìn)制數(shù),而計(jì)算機(jī)中全部采用二進(jìn)制數(shù)表示,它只包含
0、1兩個(gè)數(shù),逢二進(jìn)一,1+1=10。每一個(gè)0或者每一個(gè)1,叫做一個(gè)bit(比特)。二進(jìn)制數(shù)系統(tǒng)中,每個(gè)0或1就是一個(gè)位,叫做bit(比特)。

進(jìn)制轉(zhuǎn)換

十進(jìn)制轉(zhuǎn)二進(jìn)制

使用除以2獲取余數(shù)的方式

十進(jìn)制轉(zhuǎn)二進(jìn)制

轉(zhuǎn)成Java代碼

    public static String covertBin(int num) {
        String binStr = "";
//        輾轉(zhuǎn)相除 余數(shù)倒序拼接 直到商為1時(shí)跳出循環(huán)
        while (num != 1) {
            binStr = num % 2 + binStr;
            num /= 2;
        }
        return "1" + binStr;
    }

二進(jìn)制數(shù)據(jù)轉(zhuǎn)成十進(jìn)制數(shù)據(jù)

使用8421編碼的方式 例如

二進(jìn)制數(shù)據(jù)1001011轉(zhuǎn)成十進(jìn)制
1   0   0   1   0   1   1
64  32  16  8   4   2   1

把有1的位上的十進(jìn)制數(shù)求和
64+8+2+1=75
其實(shí)也就是1*64+1*8+1*2+1*1=75

字節(jié)

計(jì)算機(jī)中最小儲(chǔ)存單元,打開(kāi)計(jì)算機(jī)文件屬性即可看到是多少字節(jié)。8個(gè)bit(二進(jìn)制位) 0000-0000表示為1個(gè)字節(jié),寫(xiě)成1 byte或者1 B。

也就是一個(gè)大B等于8個(gè)小b:

8 bit = 1 B
1024 B =1 KB
1024 KB =1 MB
1024 MB =1 GB
1024 GB = 1 TB

其實(shí)大家常見(jiàn)的例如100Mbps寬帶,換算成大B除以8,那其實(shí)也就12.5MB/s了

JAVA環(huán)境

JRE 和 JDK

JRE (Java Runtime Environment) :是Java程序的運(yùn)行時(shí)環(huán)境,包含JVM 和運(yùn)行時(shí)所需要的 核心類(lèi)庫(kù) 。
JDK (Java Development Kit):是Java程序開(kāi)發(fā)工具包,包含 JRE 和開(kāi)發(fā)人員使用的工具。
我們想要運(yùn)行一個(gè)已有的Java程序,那么只需安裝 JRE 即可。
我們想要開(kāi)發(fā)一個(gè)全新的Java程序,那么必須安裝 JDK 。

總結(jié):也就是說(shuō)jdk中包含jre與開(kāi)發(fā)工具包kit。然后jre中又包含jvm。

配置環(huán)境變量

  1. 計(jì)算機(jī)鼠標(biāo)右鍵,選擇 屬性
  2. 選擇 高級(jí)系統(tǒng)設(shè)置
  3. 高級(jí) 選項(xiàng)卡,點(diǎn)擊 環(huán)境變量
  4. 點(diǎn)擊 新建 ,創(chuàng)建新的環(huán)境變量
  5. 變量名輸入 JAVA_HOME ,變量值輸入JDK9的安裝目錄 c:\Java9\jdk-9.0.1(這里只是舉例 請(qǐng)?zhí)顚?xiě)真實(shí)路徑)
  6. 選中 Path 環(huán)境變量, 雙擊 或者 點(diǎn)擊編輯
  7. 在變量值的最前面,鍵入 %JAVA_HOME%\bin; 分號(hào)必須要寫(xiě),必須是英文格式
  8. 環(huán)境變量配置完成,重新開(kāi)啟DOS命令行,在任意目錄下輸入 javac或java -version 命令,運(yùn)行成功

基礎(chǔ)知識(shí)

第一個(gè)Java程序

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("極四維博客");
    }
}

記事本編輯如上,輸入命令

javac HelloWorld.java //編譯
java HelloWorld //運(yùn)行

編譯就是將Java代碼轉(zhuǎn)換成計(jì)算機(jī)能懂的文件,當(dāng)用javac編譯后你會(huì)發(fā)現(xiàn)實(shí)際生成了一個(gè)HelloWorld.class的文件。代碼錯(cuò)誤可能會(huì)導(dǎo)致編譯失敗。

Main方法寫(xiě)法固定格式不變,JVM在運(yùn)行的時(shí)候,都會(huì)從main方法這里開(kāi)始執(zhí)行。

運(yùn)行將jvm運(yùn)行編譯好的程序

關(guān)鍵字keywords

HelloWorld案例中,出現(xiàn)的關(guān)鍵字有 public 、 class 、 static 、 void 等,這些單詞已經(jīng)被Java定義好,全部都是小寫(xiě)字母,變量進(jìn)來(lái)別與關(guān)鍵字同名。

標(biāo)識(shí)符

是指在程序中,我們自己定義內(nèi)容。比如類(lèi)的名字、方法的名字和變量的名字等等,都是標(biāo)識(shí)符。
HelloWorld案例中,出現(xiàn)的標(biāo)識(shí)符有類(lèi)名字 HelloWorld 。

命名規(guī)則: 硬性要求
標(biāo)識(shí)符可以包含 英文字母26個(gè)(區(qū)分大小寫(xiě)) 、 0-9數(shù)字 、 $(美元符號(hào)) 和 _(下劃線) 。標(biāo)識(shí)符不能以數(shù)字開(kāi)頭。標(biāo)識(shí)符不能是關(guān)鍵字。
命名規(guī)范: 軟性建議
類(lèi)名規(guī)范:首字母大寫(xiě),后面每個(gè)單詞首字母大寫(xiě)(大駝峰式),例如HelloWorld。
方法名規(guī)范: 首字母小寫(xiě),后面每個(gè)單詞首字母大寫(xiě)(小駝峰式),例如helloWorld。
變量名規(guī)范:全部小寫(xiě)。

雖然不遵守上述規(guī)范可以編譯程序,但這些也都形成一種規(guī)范了,更詳細(xì)請(qǐng)參見(jiàn)阿里巴巴Java開(kāi)發(fā)規(guī)范

注釋

單行注釋以 //開(kāi)頭 換行結(jié)束
多行注釋以 /* 開(kāi)頭 以 */ 結(jié)束

數(shù)據(jù)類(lèi)型

基本數(shù)據(jù)類(lèi)型:包括 整數(shù) 、 浮點(diǎn)數(shù) 、 字符 、 布爾 。
引用數(shù)據(jù)類(lèi)型:包括 類(lèi) 、 數(shù)組 、 接口 。

類(lèi)型 字節(jié)長(zhǎng)度 取值范圍
int 4字節(jié) -2 147 483 648 ~ 2 147 483 647(即-231 ~ 231-1)
short 2字節(jié) -32 768 ~ 32 767
long 8字節(jié) -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807(即-263 ~ 263-1)
byte 1字節(jié) -128 ~ 127
float 4字節(jié) 大約±3.402 823 47E+38F(6~7位有效數(shù)字)
double 8字節(jié) 大約±1.797 693 134 862 315 70E+308(15位有效數(shù)字)

四類(lèi)八種基本數(shù)據(jù)類(lèi)型

整數(shù)類(lèi)型 byte short int(默認(rèn)) long

浮點(diǎn)型 float double(默認(rèn))

字符型 char

布爾型 boolean

變量賦值,例如:

int a=1;
//變量不賦值無(wú)法使用
int b;
System.out.println(b); //由于沒(méi)賦值會(huì)報(bào)錯(cuò)
int c;
c=2
System.out.println(c); //賦值后正常

類(lèi)型轉(zhuǎn)換

byte a = 2;
int b = a + 3; //范圍小與范圍大的運(yùn)算自動(dòng)轉(zhuǎn)換成范圍大的
byte c = (byte) (a + 3);//如果繼續(xù)使用范圍小的用括號(hào)填類(lèi)型 強(qiáng)制轉(zhuǎn)換
//強(qiáng)制轉(zhuǎn)換可能會(huì)造成精度丟失 例如pi 3.1415926...轉(zhuǎn)換成整型
int d = (int) Math.PI; //結(jié)果為3

特例,范圍相同運(yùn)算也自動(dòng)轉(zhuǎn)換為范圍大的

byte b1 = 1;
byte b2 = 2;
byte b3 = 1 + 2;
System.out.println(b3); //3 由于1、2常量值確定 因此編譯通過(guò)
//byte b4=b1 + b2;//編譯報(bào)錯(cuò) b1、b2為變量 值不確定,返回類(lèi)型實(shí)際為int
int b4 = b1 + b2;//int正常編譯
byte b5 = (byte) (b1 + b2);//加強(qiáng)轉(zhuǎn)正常
System.out.println(b4);

字符char運(yùn)算

char c = 'd';
//char運(yùn)算先根據(jù)ascii碼表轉(zhuǎn)換成數(shù)值再運(yùn)算
System.out.println(c + 0); //100+0=100

運(yùn)算符

算數(shù)運(yùn)算符

System.out.println(1 + 2 - 3 * 4 / 5);//1
// 加減乘除 除時(shí)由于時(shí)默認(rèn)是int類(lèi)型,因此沒(méi)保留整數(shù)部分
System.out.println(5 % 2);//1 取模 即取兩數(shù)的余數(shù)

賦值運(yùn)算符

int a=1; //= 最簡(jiǎn)單賦值運(yùn)算符
a+=2;//其實(shí)就是a=a+2的簡(jiǎn)寫(xiě) 其他 -=、*=等同理
System.out.println(a);//3

類(lèi)型強(qiáng)轉(zhuǎn)現(xiàn)象

short s = 1;
s+=1; //變量s類(lèi)型不變 實(shí)際執(zhí)行強(qiáng)轉(zhuǎn) s=(short)(s+1);
System.out.println(s);

比較運(yùn)算符

//>、<、 >=、 <=、 !=、 ==等,返回true與false
System.out.println(1==2); //false
System.out.println(1<=2); //true

邏輯運(yùn)算符

        System.out.println(1<2&&1==1); //true &&且 兩邊都滿(mǎn)足
        System.out.println(1<2&&1==2); //false
        System.out.println(1<2||1==2); //true ||或者 其中一個(gè)滿(mǎn)足即可
        System.out.println(1>2||1==2); //false
        System.out.println(!true);//false 取反
        System.out.println(1==1||1/0==1); //true 左邊滿(mǎn)足即右邊不會(huì)運(yùn)算
        System.out.println(1==1|1/0==1); //報(bào)錯(cuò) 左邊滿(mǎn)足 右邊繼續(xù)運(yùn)算
//        因此建議用雙與、雙或,它們具有短路的特點(diǎn),即一方滿(mǎn)足另一個(gè)將不再運(yùn)算

三元運(yùn)算符

int i = (1==2 ? 100 : 200);
System.out.println(i);//200

方法入門(mén)

基本格式

修飾符 返回值類(lèi)型 方法名 (參數(shù)列表){
    代碼...
    return ;
}

示例

    /*
    * 修飾符例如public、private、protected等代表訪問(wèn)權(quán)限
    * static加上表靜態(tài)方法 不加為非靜態(tài) 例如main方法就是靜態(tài)方法
    * 靜態(tài)方法中調(diào)用的方法也是靜態(tài)的,靜態(tài)方法先被加載且只會(huì)被加載一次
    * void為返回類(lèi)型為空 即無(wú)返回值
    * String[] args即為參數(shù),參數(shù)列表可有可無(wú) 有時(shí)可以傳遞參數(shù)
    * 注意 輸出語(yǔ)句調(diào)用的方法需有返回值 不能調(diào)用void方法
    * */
    public static void main(String[] args) {
        System.out.println(call(10086));
    }

    /**
     *這里返回值為String表示有返回值
     * int no為方法參數(shù)
     * return后為返回值
     */
    public static String call(int no) {
        return "撥號(hào):" + no;
    }

方法重載

指在同一個(gè)類(lèi)中,允許存在一個(gè)以上的同名方法,只要它們的參數(shù)列表不同即可,與修飾符和返
回值類(lèi)型無(wú)關(guān)。不論修飾詞、返回類(lèi)型咋樣,方法名相同且參數(shù)列表不同即可。

    public static void main(String[] args) {
        println(123);//123
        println("Hello");//Hello
        println("得分:", 100);//得分:100
        System.out.println(println("得分:", 100L));//得分:100
    }

    public static void println(int a) {
        System.out.println(a);
    }

    private static void println(String a) {
        System.out.println(a);
    }

    public static void println(String a, int b) {
        System.out.println(a + b);
    }

    static String println(String a, long b) {
        return a + b;
    }

方法重寫(xiě)

子類(lèi)中出現(xiàn)和父類(lèi)中一模一樣的方法(包括返回值類(lèi)型,方法名,參數(shù)列表)
例如:對(duì)接口方法進(jìn)行重寫(xiě)

class Test {
    public static void main(String[] args) {
        new Like() {
            @Override
            public void eat() {
                System.out.println("吃肉肉");
            }
        }.eat();
    }
}

interface Like{
    void eat();
}

不固定參數(shù)方法

類(lèi)型... 表多個(gè)該類(lèi)型參數(shù),此時(shí)的foods其實(shí)就是個(gè)數(shù)組,可以通過(guò)循環(huán)取出它的值

public static void main(String[] args) {
    //我喜歡吃:包子 燒賣(mài) 糯米雞 
    eat("包子","燒賣(mài)","糯米雞");
    eat(); //不固定參數(shù)方法 調(diào)用時(shí)可以為空
}

public static void eat(String... foods){
    System.out.print("我喜歡吃:");
    for (String food : foods) {
        System.out.print(food+" ");
    }
}

JShell

jdk9后新特征,cmd命令行中輸入jshell直接進(jìn)入命令行寫(xiě)java代碼,適合新手學(xué)習(xí)

  • /help intro查詢(xún)幫助
  • /exit退出

流程控制語(yǔ)句

簡(jiǎn)而言之:程序執(zhí)行順序影響執(zhí)行結(jié)果,通過(guò)控制執(zhí)行順序來(lái)控制執(zhí)行結(jié)果。

順序結(jié)構(gòu)

//順序執(zhí)行,根據(jù)編寫(xiě)的順序,從上到下運(yùn)行
System.out.println(1);
System.out.println(2);
System.out.println(3);
//依次輸出1、2、3

判斷語(yǔ)句

    int num = 90;
    if (num > 0 && num < 60) {
        System.out.println("不及格");
    } else if (num >= 60 && num < 80) {
        System.out.println("良好");
    } else {
        System.out.println("優(yōu)秀");
    }

選擇語(yǔ)句

    String type = "1";
    //選擇式
    switch (type){
        case "1":
            System.out.println("打開(kāi)");
            //這里剛好type為1,由于switch穿透性
            //break不寫(xiě)的話 其下面條件里的語(yǔ)句無(wú)論符不符合都會(huì)被執(zhí)行
            break;
        case "0":
            System.out.println("關(guān)閉");
            break;
        default:
            System.out.println("其他狀態(tài)");
    }

循環(huán)語(yǔ)句

for

//        循環(huán)十次 簡(jiǎn)析:i從0開(kāi)始,循環(huán)到大于等于10結(jié)束,每次循環(huán)i+1,稱(chēng)為步進(jìn)
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
//        步進(jìn)值為i = i + 2,這樣每次循環(huán)+2,循環(huán)次數(shù)由于步進(jìn)的變化也成了5次
        for (int i = 0; i < 10; i = i + 2) {
            System.out.println(i);
        }

增強(qiáng)for循環(huán)

        int[] num={1,2,3,4,5};
        for (int i : num) { //循環(huán)的對(duì)象可以是數(shù)組、集合等
            System.out.println(i); //輸出數(shù)組中值
        }

jdk8新增forEach .forEach適合遍歷list與map,對(duì)于數(shù)組無(wú)法遍歷

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.forEach(s->System.out.println(s));

while

        int i=0;
        while (i<10){   //i<10時(shí)執(zhí)行
            i++;    //由于i每次+1 因此會(huì)執(zhí)行10次
            System.out.println(i);
        }

do...while

        int i=0;
        do{
            i++;
            System.out.println(i);
        } while (i<10);

如上代碼也執(zhí)行10次,大致與while執(zhí)行一致,但兩個(gè)真一樣么?不是,當(dāng)while中條件不符合時(shí),while一次不會(huì)執(zhí)行,do...while仍然會(huì)執(zhí)行一次!

        int i=0;
        do{
            i++;
            System.out.println(i);
        }while (i>10);

如上代碼,雖然i不符合條件,但還是執(zhí)行了一次,由于條件在執(zhí)行代碼后,因此,這種情況也很容易被理解??偨Y(jié):while...do會(huì)先執(zhí)行,再判斷,如果符合再繼續(xù)執(zhí)行,如此往復(fù)。而while是先判斷,判斷不符合就直接不執(zhí)行

跳出語(yǔ)句

continue; //跳出本次循環(huán)

break;//跳出循環(huán)

return;//這算不上跳出循環(huán)語(yǔ)句,因?yàn)樵诜椒ɡ锛铀鼤?huì)直接跳出方法。

死循環(huán)

沒(méi)結(jié)束條件的循環(huán),例如

        while(true){
            System.out.println(System.currentTimeMillis());
        }

for死循環(huán)

        for (;;){
            System.out.println(System.currentTimeMillis());
        }

嵌套循環(huán)

例如輸出一個(gè)由*組成的5行10列的矩形

        for (int i = 0; i < 5; i++) {
            for (int i1 = 0; i1 < 10; i1++) {
                System.out.print("*");
            }
            System.out.println();
        }

數(shù)組

格式

        int[] arr = new int[3]; //固定長(zhǎng)度數(shù)組
        int[] arr1 = new int[]{1,2,3,4,5}; //固定內(nèi)容數(shù)組
        int[] arr2 = {1,2,3,4,5};   //同上 固定內(nèi)容
        arr[0]=100;//數(shù)組根據(jù)索引賦值
        System.out.println(arr2.length);//輸出數(shù)組的長(zhǎng)度
        System.out.println(arr2[0]);//1 取值索引為0的
        for (int i : arr2) {
//            for循環(huán)遍歷數(shù)組
            System.out.println(i);
        }
        for (int i = 0; i < arr1.length; i++) {
//            根據(jù)索引遍歷數(shù)組
            System.out.println(arr1[i]);
        }

這里注意數(shù)組跟集合的索引(下標(biāo))都是從0開(kāi)始的哦!

數(shù)組作為參數(shù)、返回值

其實(shí)main方法就是以數(shù)組為參數(shù)。當(dāng)然寫(xiě)這類(lèi)方法,例如

public void eat(String[] animals){
   //...代碼
}

當(dāng)然前面所介紹的 不固定參數(shù)方法其實(shí)用的也是數(shù)組,方法參數(shù)中foods雖然不是數(shù)組形式但當(dāng)數(shù)組來(lái)調(diào)用的

public static void main(String[] args) {
    //我喜歡吃:包子 燒賣(mài) 糯米雞 
    eat("包子","燒賣(mài)","糯米雞");
    eat(); //不固定參數(shù)方法 調(diào)用時(shí)可以為空
}

public static void eat(String... foods){
    System.out.print("我喜歡吃:");
    //這里foods其實(shí)就是數(shù)組
    for (String food : foods) {
        System.out.print(food+" ");
    }
}

數(shù)組操作案例

獲取最大值

以下變量max相當(dāng)于一個(gè)擂臺(tái)的頒獎(jiǎng)臺(tái),誰(shuí)大就往上放,然后它再繼續(xù)跟其它數(shù)比較

        int[] arr = {1, 2, 3, 4, 5};
        //定義變量,保存數(shù)組中0索引的元素
        int max = arr[0];
        //遍歷數(shù)組,取出每個(gè)元素
        for (int i = 0; i < arr.length; i++) {
        //遍歷到的元素和變量max比較
        //如果數(shù)組元素大于max
            if (arr[i] > max) {
        //max記錄住大值
                max = arr[i];
            }
        }
        System.out.println("數(shù)組最大值是: " + max);

數(shù)組反轉(zhuǎn)

建個(gè)臨時(shí)變量,小的復(fù)制給temp,然后大的復(fù)制給小的,temp再賦值給大的(其實(shí)也就是小的賦值給大的)

        int[] arr = { 1, 2, 3, 4, 5 };
        /*
        循環(huán)中定義變量min=0最小索引
        max=arr.length‐1最大索引
        min++,max‐‐
        */
        for (int min = 0, max = arr.length - 1; min <= max; min++, max--) {
        //利用第三方變量完成數(shù)組中的元素交換
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
        }
        // 反轉(zhuǎn)后,遍歷數(shù)組
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容