Java入門基礎(chǔ)知識

計算機基礎(chǔ)

二進制

? 計算機中的數(shù)據(jù)不同于人們生活中的數(shù)據(jù)断序,人們生活采用十進制數(shù)流纹,而計算機中全部采用二進制數(shù)表示,它只包含
0违诗、1兩個數(shù)漱凝,逢二進一,1+1=10诸迟。每一個0或者每一個1茸炒,叫做一個bit(比特)。二進制數(shù)系統(tǒng)中阵苇,每個0或1就是一個位壁公,叫做bit(比特)。

進制轉(zhuǎn)換

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

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

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

轉(zhuǎn)成Java代碼

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

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

使用8421編碼的方式 例如

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

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

字節(jié)

計算機中最小儲存單元绅项,打開計算機文件屬性即可看到是多少字節(jié)紊册。8個bit(二進制位) 0000-0000表示為1個字節(jié),寫成1 byte或者1 B趁怔。

也就是一個大B等于8個小b:

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

其實大家常見的例如100Mbps寬帶湿硝,換算成大B除以8薪前,那其實也就12.5MB/s了

JAVA環(huán)境

JRE 和 JDK

JRE (Java Runtime Environment) :是Java程序的運行時環(huán)境润努,包含JVM 和運行時所需要的 核心類庫 。
JDK (Java Development Kit):是Java程序開發(fā)工具包示括,包含 JRE 和開發(fā)人員使用的工具铺浇。
我們想要運行一個已有的Java程序,那么只需安裝 JRE 即可垛膝。
我們想要開發(fā)一個全新的Java程序鳍侣,那么必須安裝 JDK 。

總結(jié):也就是說jdk中包含jre與開發(fā)工具包kit吼拥。然后jre中又包含jvm倚聚。

配置環(huán)境變量

  1. 計算機鼠標右鍵,選擇 屬性
  2. 選擇 高級系統(tǒng)設(shè)置
  3. 高級 選項卡,點擊 環(huán)境變量
  4. 點擊 新建 凿可,創(chuàng)建新的環(huán)境變量
  5. 變量名輸入 JAVA_HOME 惑折,變量值輸入JDK9的安裝目錄 c:\Java9\jdk-9.0.1(這里只是舉例 請?zhí)顚懻鎸嵚窂剑?/li>
  6. 選中 Path 環(huán)境變量, 雙擊 或者 點擊編輯
  7. 在變量值的最前面枯跑,鍵入 %JAVA_HOME%\bin; 分號必須要寫惨驶,必須是英文格式
  8. 環(huán)境變量配置完成,重新開啟DOS命令行敛助,在任意目錄下輸入 javac或java -version 命令粗卜,運行成功

基礎(chǔ)知識

第一個Java程序

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

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

javac HelloWorld.java //編譯
java HelloWorld //運行

編譯就是將Java代碼轉(zhuǎn)換成計算機能懂的文件纳击,當用javac編譯后你會發(fā)現(xiàn)實際生成了一個HelloWorld.class的文件续扔。代碼錯誤可能會導致編譯失敗攻臀。

Main方法寫法固定格式不變,JVM在運行的時候测砂,都會從main方法這里開始執(zhí)行茵烈。

運行將jvm運行編譯好的程序

關(guān)鍵字keywords

HelloWorld案例中,出現(xiàn)的關(guān)鍵字有 public 砌些、 class 呜投、 static 、 void 等存璃,這些單詞已經(jīng)被Java定義好仑荐,全部都是小寫字母,變量進來別與關(guān)鍵字同名纵东。

標識符

是指在程序中粘招,我們自己定義內(nèi)容。比如類的名字偎球、方法的名字和變量的名字等等洒扎,都是標識符。
HelloWorld案例中衰絮,出現(xiàn)的標識符有類名字 HelloWorld 袍冷。

命名規(guī)則: 硬性要求
標識符可以包含 英文字母26個(區(qū)分大小寫) 、 0-9數(shù)字 猫牡、 $(美元符號) 和 _(下劃線) 胡诗。標識符不能以數(shù)字開頭。標識符不能是關(guān)鍵字淌友。
命名規(guī)范: 軟性建議
類名規(guī)范:首字母大寫煌恢,后面每個單詞首字母大寫(大駝峰式),例如HelloWorld震庭。
方法名規(guī)范: 首字母小寫瑰抵,后面每個單詞首字母大寫(小駝峰式),例如helloWorld器联。
變量名規(guī)范:全部小寫二汛。

雖然不遵守上述規(guī)范可以編譯程序,但這些也都形成一種規(guī)范了主籍,更詳細請參見阿里巴巴Java開發(fā)規(guī)范

注釋

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

數(shù)據(jù)類型

基本數(shù)據(jù)類型:包括 整數(shù) 习贫、 浮點數(shù) 、 字符 千元、 布爾 苫昌。
引用數(shù)據(jù)類型:包括 類 、 數(shù)組 幸海、 接口 祟身。

類型 字節(jié)長度 取值范圍
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ù)字)

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

整數(shù)類型 byte short int(默認) long

浮點型 float double(默認)

字符型 char

布爾型 boolean

變量賦值奥务,例如:

int a=1;
//變量不賦值無法使用
int b;
System.out.println(b); //由于沒賦值會報錯
int c;
c=2
System.out.println(c); //賦值后正常

類型轉(zhuǎn)換

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

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

byte b1 = 1;
byte b2 = 2;
byte b3 = 1 + 2;
System.out.println(b3); //3 由于1袜硫、2常量值確定 因此編譯通過
//byte b4=b1 + b2;//編譯報錯 b1氯葬、b2為變量 值不確定,返回類型實際為int
int b4 = b1 + b2;//int正常編譯
byte b5 = (byte) (b1 + b2);//加強轉(zhuǎn)正常
System.out.println(b4);

字符char運算

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

運算符

算數(shù)運算符

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

賦值運算符

int a=1; //= 最簡單賦值運算符
a+=2;//其實就是a=a+2的簡寫 其他 -=帚称、*=等同理
System.out.println(a);//3

類型強轉(zhuǎn)現(xiàn)象

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

比較運算符

//>、<秽澳、 >=闯睹、 <=、 !=担神、 ==等楼吃,返回true與false
System.out.println(1==2); //false
System.out.println(1<=2); //true

邏輯運算符

        System.out.println(1<2&&1==1); //true &&且 兩邊都滿足
        System.out.println(1<2&&1==2); //false
        System.out.println(1<2||1==2); //true ||或者 其中一個滿足即可
        System.out.println(1>2||1==2); //false
        System.out.println(!true);//false 取反
        System.out.println(1==1||1/0==1); //true 左邊滿足即右邊不會運算
        System.out.println(1==1|1/0==1); //報錯 左邊滿足 右邊繼續(xù)運算
//        因此建議用雙與、雙或妄讯,它們具有短路的特點孩锡,即一方滿足另一個將不再運算

三元運算符

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

方法入門

基本格式

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

示例

    /*
    * 修飾符例如public、private亥贸、protected等代表訪問權(quán)限
    * static加上表靜態(tài)方法 不加為非靜態(tài) 例如main方法就是靜態(tài)方法
    * 靜態(tài)方法中調(diào)用的方法也是靜態(tài)的,靜態(tài)方法先被加載且只會被加載一次
    * void為返回類型為空 即無返回值
    * String[] args即為參數(shù)躬窜,參數(shù)列表可有可無 有時可以傳遞參數(shù)
    * 注意 輸出語句調(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 "撥號:" + no;
    }

方法重載

指在同一個類中,允許存在一個以上的同名方法砌函,只要它們的參數(shù)列表不同即可斩披,與修飾符和返
回值類型無關(guān)溜族。不論修飾詞讹俊、返回類型咋樣,方法名相同且參數(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àn)和父類中一模一樣的方法(包括返回值類型,方法名,參數(shù)列表)
例如:對接口方法進行重寫

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

interface Like{
    void eat();
}

不固定參數(shù)方法

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

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

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

JShell

jdk9后新特征寡壮,cmd命令行中輸入jshell直接進入命令行寫java代碼贩疙,適合新手學習

  • /help intro查詢幫助
  • /exit退出

流程控制語句

簡而言之:程序執(zhí)行順序影響執(zhí)行結(jié)果,通過控制執(zhí)行順序來控制執(zhí)行結(jié)果况既。

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

//順序執(zhí)行这溅,根據(jù)編寫的順序,從上到下運行
System.out.println(1);
System.out.println(2);
System.out.println(3);
//依次輸出1棒仍、2悲靴、3

判斷語句

    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)秀");
    }

選擇語句

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

循環(huán)語句

for

//        循環(huán)十次 簡析:i從0開始莫其,循環(huán)到大于等于10結(jié)束癞尚,每次循環(huán)i+1耸三,稱為步進
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
//        步進值為i = i + 2,這樣每次循環(huán)+2浇揩,循環(huán)次數(shù)由于步進的變化也成了5次
        for (int i = 0; i < 10; i = i + 2) {
            System.out.println(i);
        }

增強for循環(huán)

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

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

        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時執(zhí)行
            i++;    //由于i每次+1 因此會執(zhí)行10次
            System.out.println(i);
        }

do...while

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

如上代碼也執(zhí)行10次胳徽,大致與while執(zhí)行一致积锅,但兩個真一樣么?不是养盗,當while中條件不符合時乏沸,while一次不會執(zhí)行,do...while仍然會執(zhí)行一次爪瓜!

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

如上代碼蹬跃,雖然i不符合條件,但還是執(zhí)行了一次铆铆,由于條件在執(zhí)行代碼后蝶缀,因此,這種情況也很容易被理解薄货∥潭迹總結(jié):while...do會先執(zhí)行,再判斷谅猾,如果符合再繼續(xù)執(zhí)行柄慰,如此往復。而while是先判斷税娜,判斷不符合就直接不執(zhí)行

跳出語句

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

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

return;//這算不上跳出循環(huán)語句坐搔,因為在方法里加它會直接跳出方法。

死循環(huán)

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

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

for死循環(huán)

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

嵌套循環(huán)

例如輸出一個由*組成的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]; //固定長度數(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ù)組的長度
        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ù)組跟集合的索引(下標)都是從0開始的哦概行!

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

其實main方法就是以數(shù)組為參數(shù)弧岳。當然寫這類方法凳忙,例如

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

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

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

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

數(shù)組操作案例

獲取最大值

以下變量max相當于一個擂臺的頒獎臺禽炬,誰大就往上放涧卵,然后它再繼續(xù)跟其它數(shù)比較

        int[] arr = {1, 2, 3, 4, 5};
        //定義變量,保存數(shù)組中0索引的元素
        int max = arr[0];
        //遍歷數(shù)組腹尖,取出每個元素
        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)

建個臨時變量柳恐,小的復制給temp,然后大的復制給小的,temp再賦值給大的(其實也就是小的賦值給大的)

        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)容合作請聯(lián)系作者
  • 序言:七十年代末晓殊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伤提,更是在濱河造成了極大的恐慌巫俺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肿男,死亡現(xiàn)場離奇詭異介汹,居然都是意外死亡,警方通過查閱死者的電腦和手機舶沛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門嘹承,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人如庭,你說我怎么就攤上這事叹卷。” “怎么了坪它?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵骤竹,是天一觀的道長。 經(jīng)常有香客問我往毡,道長蒙揣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任开瞭,我火速辦了婚禮懒震,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗤详。我一直安慰自己个扰,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布断楷。 她就那樣靜靜地躺著锨匆,像睡著了一般崭别。 火紅的嫁衣襯著肌膚如雪冬筒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天茅主,我揣著相機與錄音舞痰,去河邊找鬼。 笑死诀姚,一個胖子當著我的面吹牛响牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呀打,長吁一口氣:“原來是場噩夢啊……” “哼矢赁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贬丛,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撩银,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后豺憔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體额获,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年恭应,在試婚紗的時候發(fā)現(xiàn)自己被綠了抄邀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡昼榛,死狀恐怖境肾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胆屿,我是刑警寧澤准夷,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站莺掠,受9級特大地震影響衫嵌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彻秆,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一楔绞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唇兑,春花似錦酒朵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至留夜,卻和暖如春匙铡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碍粥。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工鳖眼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嚼摩。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓钦讳,卻偏偏與公主長得像矿瘦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愿卒,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355