主頁 > 後端開發 > 一、Java基礎

一、Java基礎

2021-03-05 11:05:32 後端開發

以下內容學習于狂神說Java,b站學習視頻

一 、注釋

代碼編譯后不會被執行

  • 單行注釋:// 只能注釋一行文字
  • 多行注釋:/* 可以注釋多行文字 */
  • 檔案注釋:/** */

二、識別符號

  • Java所有的組成部分都需要名字,類名、變數名以及方法名哦都被稱為識別符號,

  • 關鍵字: java自身定義好的,例如:public、static、class等,

image-20210302224010282

  • 所有的識別符號都應該是以字母(A-Z或者a-z)、美元符號($)、下劃線(_)開始,不能以數字開頭
  • 首字符之后可以是字母、美元符號、下劃線或數字的任何字符組成
  • 關鍵字不能作為變數名或方法名
  • 識別符號大小寫敏感
  • 合法識別符號舉例:age、$salary、_value、__1_value
  • 非法識別符號:123abc、-salary、#abc
  • 可以使用中文命名,但不建議

三、資料型別

  • 強型別語言

    • 變數的使用必須嚴格符合規定,所有變數必須先定義才能使用
    • 安全性高,速度慢
  • 弱型別語言

    • 可以不必嚴格符合規定
  • Java的資料型別分為兩大類

    • 基本資料型別

      • 整數型別

        byte占1個位元組:-128–127

        short占2個位元組:-32768–32767

        int占4個位元組:-2147483648–2147483647

        long占8個位元組:-9223372036854775808–9223372036854775807

      • 浮點型

        float占4個位元組

        double占8個位元組

      • 字符型

        char占2個位元組

      • 布爾型別

        占1位,其值只有true和false兩個

    • 參考資料型別

      介面

      陣列

  • 什么是位元組

    • 位( bit ):是計算機內部資料儲存的最小單位,11001100是一個八位二進制數,
    • 位元組( byte ):是計算中資料處理的基本單位,習慣上用大寫B表示,
    • 1B( byte,位元組)= 8bit(位)
    • 字符:是指計算機中使用的字母、數字、字和符號
    • 1bit表示1位
    • 1Byte表示一個位元組 1B = 8b
    • 1024B = 1KB
    • 1024KB = 1M
    • 1024M = 1G

    拓展

    1. 進制

      public class Demo03 {
          public static void main(String[] args){
              //整數拓展: 進制  二進制0b   十進制   八進制0   十六進制0x
              int i = 10;
              int i2 = 010;//八進制0
              int i3 = 0x10;//十六進制0x 0~9 A~F
              System.out.println(i);
              System.out.println(i2);
              System.out.println(i3);
          }
      }
      

      image-20210303193400281

四、型別轉換

  • 由于Java是強型別語言,所以在進行某些運算的時候,需要進行型別轉換,

    ? 低---------------------------------------------------->高

    ? byte,short,char,int,long,float,double

  • 運算中,不同型別的資料先轉換為同一型別,然后進行運算

    • 強制型別轉換:高–>低

      public class Demo05 {
          public static void main(String[] args) {
              int i = 128;
              byte b = (byte)i;//記憶體溢位
              //強制轉換 (型別)變數名	高-->低
      
              System.out.println(i);
              System.out.println(b);
      
              System.out.println("======================");
              //精度問題
              System.out.println((int)23.7);
              System.out.println((int)-48.89f);
          }
      }
      

image-20210303193507066

  • 自動型別轉換:低–>高
  public class Demo05 {
      public static void main(String[] args) {
          int i = 128;
          double b = i;
          //自動型別轉換	低-->高
  
          System.out.println(i);
          System.out.println(b);
  
          System.out.println("================");
  
          char c = 'a';
          int d = c + 1; 
          System.out.println(d);
          System.out.println((char)d);
      }
  }

image-20210303193549578

注意

  1. 不能把布林值進行轉換

  2. 不能把物件型別轉換為不相干的型別

  3. 把高容量轉換為低容量時,需要強制轉換

  4. 轉換的時候可能存在記憶體溢位,或者精度問題

    溢位問題:

      public class Demo06 {
          public static void main(String[] args) {
              //操作比較大的數的時候,注意溢位問題
              //JDK7新特性,數字之間可以用下劃線分割
              int money = 10_0000_0000;
              int years = 20;
              int total = money*years;
              System.out.println("total = "+total);//輸出-1474836480,溢位
      
              long total2 = money*years;
              System.out.println("total2 = "+total2);//輸出-1474836480,還是溢位
              //注意:先計算money*years(此時已經溢位),再賦值給total2
      
              long total3 = money*((long)years);//先把其中一個數轉換為long
              System.out.println("total3 = "+total3);//輸出20000000000,此時溢位問題解決
          }
      }
    

    image-20210303193619263

五、變數

  • 變數是什么:就是可以變化的量!

  • Java是一種強型別語言,每個變數都必須宣告其型別

  • Java變數是程式中最基本的存盤單元,其要素包括變數名,變數型別和作用域

    type varName [=value] [{,varName[=value]}];
    //資料型別 變數名 = 值; 可以使用逗號隔開來宣告多個同型別變數
    
  • 注意事項:

    • 每個變數都有型別,型別可以是基本型別,也可以是參考型別
    • 變數名必須是合法的識別符號
    • 變數宣告必須是一條完整的陳述句,因此每一個宣告都必須以分號結束

六、變數作用域

  • 類變量

  • 實體變數

  • 區域變數

    public class Demo08 {
    
        //類變數 static
        static double salary = 2500;
    
        //屬性:變數
        /*實體變數:
        從屬于物件;若不進行初始化,則這個型別的默認值為 0 0.0
        布林值:默認值為false
        除了即便型別,其余的默認型別是null
        * */
        String name;
        int age;
    
        //main方法
        public static void main(String[] args) {
    
            //區域變數:必須宣告和初始化值
            int i = 10;
            System.out.println(i);
    
            //變數型別 變數名字 = new Demo08()
            Demo08 demo08 = new Demo08();
            System.out.println(demo08.age);
            System.out.println(demo08.name);
    
            //類變數 static
            System.out.println(salary);
        }
    
        //其他方法
        public void another(){
            
        }
    }
    

    image-20210303193637524

七、常量

  • 常量(Constant):初始化(initialize)后不能再改變的值!

  • 所謂常量就是一種特殊的變數,它的值一旦被設定,在程式運行程序中不允許被改變

    final 常量名=;
    final double PI = 3.14;
    
  • 常量名一般使用大寫字符

    public class Demo09 {
    
        //static final是修飾符,不存在先后順序
        static final double PI = 3.14;
    
        public static void main(String[] args) {
            System.out.println(PI);
        }
    }
    
    

    image-20210303193700199

八、變數的命名規范

  • 所有的變數、方法、類名:見名知意
  • 類成員變數:首字母小寫和駝峰原則
    • 駝峰原則:出第一個單詞外,后面的單詞首字母大寫 lastName
  • 區域變數:首字母小寫和駝峰原則
  • 常量:大寫字母和下劃線:MAX_VALUE
  • 類名:首字母大寫和駝峰原則
  • 方法名:首字母小寫和駝峰原則:run(),runRun()

九、運算子

  • Java語言支持下列運算子

    • 算術運算子:+,-,*,/,%,++,–

      public class Demo01 {
          public static void main(String[] args) {
              //二元運算子
              //Ctrl + D :復制當前行到下一行
              int a = 10;
              int b = 20;
              int c = 35;
              int d = 40;
      
              System.out.println("a+b = " + (a+b));
              System.out.println("a-b = " + (a-b));
              System.out.println("a*b = " + (a*b));
              System.out.println("a/b = " + (a/(double)b));
              System.out.println("===============");
              System.out.println("c/b = " + (c/(double)b));
              System.out.println("c/b = " + (c/b));//  /  取小數點前面的整數
              System.out.println("c%b = " + (c%b));//%取余數
      
              System.out.println("===============");
              long a1 = 123456789123123113L;
              int b1 = 123;
              short c1 = 10;
              byte d1 = 8;
      
              System.out.println(a1+b1+c1+d1);//不同型別的整數相加,如果有long同一轉換為long型別
              System.out.println(b1+c1+d1);//其余均為int
              System.out.println(c1+d1);//int
              
              System.out.println("====================");
              //++ --  自增,自減  一元運算子
              //++在前面,先自+1再賦值
              //++在后面,先賦值,在自加1
              int a2 = 3;
              System.out.println("a2 = "+ a2);
      
              int b2 = a2++;//a2++ 先將a2的值賦值給b2,再執行a2 = a2 + 1
              System.out.println("b2 = "+ b2);
              System.out.println("a2 = "+ a2);
      
              System.out.println("====================");
              int c2 = 3;
              System.out.println("c2 = "+ c2);
              int d2 = ++c2;//++c2 先執行c2 = c2 + 1,再把c2的值賦值給d2
              System.out.println("d2 = "+ d2);
              System.out.println("c2 = "+ c2);
          }
      }
      

      image-20210303193726306

    • 賦值運算子:=

    • 關系運算子:>,<,>=,<=,==,!=,instanceof

      public class Demo03 {
          public static void main(String[] args) {
              //關系運算子回傳的的結果:正確,錯誤     布林值
              int a = 10;
              int b = 20;
              System.out.println(a>b);
              System.out.println(a<b);
              System.out.println(a==b);
              System.out.println(a!=b);
          }
      }
      

      image-20210303193745454

    • 邏輯運算子:&&,||,!

      package operator;
      //邏輯運算子
        public class Demo05 {
            public static void main(String[] args) {
                //與(&&) 或(||) 非(!)
                boolean a = true;
                boolean b = false;
                 System.out.println("a && b: " + (a&&b) );//邏輯與運算:兩個變數都為真,結果為真
            System.out.println("a || b: " + (a||b) );//邏輯或運算:兩個變數有一個為真,結果為真
            System.out.println("!(a && b): " + !(a&&b) );//邏輯非運算:如果是真,則變為假;如果是假,則變為真
        
            //短路運算:前面條件為假,則后面的條件不被運行,直接輸入假
            int c = 5;
            boolean d = (c<4)&&(c++<4);
            System.out.println(d);
            System.out.println(c);
        }
      }
      

      image-20210303193802530

    • 位運算子:&,|,^,~,>>,<<,>>>(了解!!!)

      package operator;
      
      public class Demo06 {
          public static void main(String[] args){
              /* 位運算,與二進制有關
              A = 0011 1100
              B = 0000 1101
              --------------
              A&B = 0000 1100 與 比較對應位上的二進制,如果對應位同為1,則對應位輸出1,如果對應位有一個不為1或者全為0,則輸出0
              A|B = 0011 1101 或 對應位上有一個為1,則輸出1,全為0,則輸出0
              A^B = 0011 0001 異或 對應位同為1或同為0,則輸出0,對應位不同,則輸出1
              ~B = 1111 0010  取反 將每一位取相反值,是1則取0,是0則取1
              --------------------
              2*8 = 16 2*2*2*2
              << 左移 相當于乘法 *2
              >> 右移 相當于除法 /2
              2<<3 = 2*2*2*2
              因為 2的二進制在計算機中是 0000 0010
              而2<<3相當于2*2*2*2=16,16的二進制 0001 0000
              觀察2和16的二進制,可以看出是把1向左移動了3位
              同理 8>>3 = 8/2/2/2 = 1
              8 0000 1000
              1 0000 0001
              把1向右移動3位 實際上就是除以2(三次)
              0000 0000 0
              0000 0001 1
              0000 0010 2
              0000 0011 3
              0000 0100 4
              0000 1000 8
              0001 0000 16
              */
              System.out.println("2<<3 = "+(2<<3));
              System.out.println("8>>3 = "+(8>>3));
          }
      }
     
    

    image-20210303193816563

    • 條件運算子(三目運算子):? :

      • x ? y : z 如果x為真,則結果為y,否則結果為z
      package operator;
      
      //三元運算子
      public class Demo08 {
          public static void main(String[] args) {
              // x ? y : z
              //如果x為真,則結果為y,否則結果為z
      
              int score = 80;
              String type = score < 60 ? "不及格" : "及格";
              System.out.println(type);
          }
      }
      
      
    • 擴展賦值運算子:+=,-=,*=,/=

      package operator;
      
      public class Demo07 {
          public static void main(String[] args){
              int a = 10;
              int b = 20;
              int c = 30;
      
              a+=b; //a = a + b
              c-=b;//c = c - b
              System.out.println(a);
              System.out.println(c);
          }
      }
      
      
    • 字串拼接

      • “”+a+b 雙引號在開頭,則全以字串形式輸出

      • a+b+""+c 雙引號不在開頭,則雙引號前面的正常相加,后面拼接字串

        package operator;
        
        public class Demo07 {
            public static void main(String[] args){
                int a = 10;
                int b = 20;
                int c = 30;
                //字串拼接
                //""+a+b 雙引號在開頭,則全以字串形式輸出
                //a+b+""+c 雙引號不在開頭,則雙引號前面的正常相加,后面拼接字串
                System.out.println(" "+a+b);
                System.out.println(a+b+" "+a+b+c);
        
            }
        }
        
        

        image-20210303193835032

十、包機制

  • 包的本質就是一個檔案夾

  • 為了更好地組織類,Java提供了包機制,用于區別類名地命名空間,

  • 包陳述句地語法格式為

    package pkg1[.pkg2[pkg3...]];
    
  • 一般利用公司域名倒置作為包名:com.LinYIN.xxx

    image-20210301190420541-1614697131687

  • 為了能夠使用某一個包的成員,需要在Java程式中宣告匯入該包,使用import陳述句完成

    import packge1[.package2...].(classname|*);
    import com.LinYIN.xxx*匯入這個包下所有的類
    

十一、JavaDoc

  • javadoc命令是用來生成自己的API檔案的

  • 引數資訊

    • @author 作者名
    • @version 版本號
    • @since 指明需要最早使用的jdk版本
    • @param 引數名
    • @return 回傳值情況
    • @throws 例外拋出情況
  • IDEA生成一個JavaDoc檔案

    • 點擊IDEA頂部的Tools選單,選擇Generate JavaDoc

      image-20210301193744200

    • image-20210301194035030

    • image-20210301194232073

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266359.html

標籤:java

上一篇:Java復習------OOP

下一篇:JAVA SE基礎知識總結

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more