狂神說Java筆記-Java基礎


Java基礎

狂神說JAVA視頻課筆記,狂神說JAVA

1. 注釋

  • 單行注釋://
  • 多行注釋:/* 注釋 */
  • JavaDoc文檔注釋注釋:/** */
    • /**開頭
    • */結尾
    • 每行開頭一個*
    • 有關鍵字,自定義的關鍵字在幫助文檔中是不顯示的(如@Description,加了@反而不能在幫助文檔顯示,不如不加@)
    • JavaDoc標記
    • JavaDoc注釋規范
public class Hello {
    public static void main(String[] args) {
        //單行注釋
        System.out.println("Hello,World!");
        /*
        多行注釋
        多行注釋
         */

        //JavaDoc:文檔注釋 /**   */
        /**
         * Hello, world!
         * @author Dong
         */
    }
}

2. 數據類型

  • 強數據類型:要求變量的使用要嚴格符合規定,所有變量必須先定義后使用。
    • 定義后不經過類型轉換無法轉換成其他數據類型。
    • 安全性高,速度慢。
  • 弱類型語言

Java數據類型:

  • 基本類型(primitive type)
  • 引用類型(reference type)

基本類型

Long類型要在數字后加L:long num=10L;lL都可以標識長整型,但l容易看成數字1,所以用L比較規范。

float類型要在數字后加F:float num=10.1F;

字符串String不是關鍵字,是類

引用數據類型

  • 接口
  • 數組

數據類型拓展及面試題

1. 整數拓展:

  • 二進制:0b開頭

  • 八進制:0開頭

  • 十六進制:0x開頭

    public class Demo1 {
        public static void main(String[] args) {
            int i=10;
            int i_2=0b10;//二進制 0b 開頭
            int i_8=010;//八進制 0 開頭
            int i_16=0x10;//十六進制 0x 開頭
            System.out.println(i);
            System.out.println(i_2);
            System.out.println(i_8);
            System.out.println(i_16);
        }
    }
    

整數拓展

2. 浮點數拓展

銀行業務中,錢怎么表示?

避免使用浮點數進行比較

浮點數是不精確的(有限的;離散的;有舍入誤差的;大約;接近但不等於)

例子:

public class DataTypeDemo {
    public static void main(String[] args) 
        //浮點數
        float f=0.1f; //0.1
        double d=1.0/10; //0.1
        System.out.println(f==d);
        //期望輸出true,但實際輸出false

        float d1=1234424234523422342343421f;//這里數小了會輸出false
        float d2=d1+1;
        System.out.println(d1==d2);
        //期望輸出false,但實際輸出true
    }
}

所以在遇到銀行業務這類需要比較浮點數的情況,使用BigDecimal類(數學工具類)

3. 轉義字符

  • \t:制表符tab
  • \n:換行

轉義字符

3. 類型轉換

在進行運算前,需要先將不同類型的數據轉換成統一的數據類型

數據類型強度

  • 從高到低需要進行強制類型轉換
    • 強制類型轉換:(類型名)變量名
  • 從低到高進行自動類型轉換

注意⚠️

  1. 不能對布爾值進行轉換

  2. 不能把對象類型轉換為不相干的類型

  3. 在把高容量轉換為低容量時,需要使用強制類型轉換

  4. 轉換時可能出現內存溢出問題和精度問題

  5. 字符型轉換成整型時,轉換成的是該字符的ascii碼

    數字字符轉換成整型時,要用該字符-‘0’:int number=‘4’-‘0’

public class TypeConversion {
    public static void main(String[] args) {
        //強制轉換  高-》低
        int i=128;
        byte b=(byte)i;
        //內存溢出,byte存儲范圍[-128,127]

        System.out.println(i);
        System.out.println(b);//輸出-128
        System.out.println("======================================");

        //======================================
        //自動轉換  低-》高
        int ii=128;
        double bb=ii;

        System.out.println(ii);
        System.out.println(bb);//輸出128.0
        System.out.println("======================================");

    }
}

溢出問題

  在進行數據的計算時,得到的數可能會出現溢出的問題。這時要先把進行計算的其中一個數轉換為高容量的數據類型,然后在進行計算。

  • 不能先計算再進行數據類型轉換,因為計算完后的數的默認數據類型是原數據的數據類型,這樣在進行數據類型轉換前就已經溢出了
public class Overflow {
    public static void main(String[] args) {
        //操作比較大的數的時候,注意溢出問題
        int money = 10_0000_0000;//JDK7新特性,數字之間可以用下划線分割
        int year = 20;
        int total = money * year;//輸出一個負數,計算的時候溢出的
        long totalLong = money * year;//先用原始的int類型計算完再轉為long類型,所以轉換之前已經出錯

        //正確做法是在計算前先把一個數的數據類型轉化為long類,再計算乘法
        long totalLongRight = money * ((long) year);
        System.out.println("用int儲存的:" + total);//輸出-1474836480
        System.out.println("用long儲存但先計算的:" + totalLong);//輸出-1474836480
        System.out.println("用long儲存且先類型轉換的:" + totalLongRight);//輸出期望結果20000000000
    }
}

4. 變量、常量和作用域

變量

作用域

  • 類變量(修飾符static):static+數據類型+變量名
    • 可以不初始化
    • 可以在方法中直接調用
  • 實例變量
    • 從屬於對象,需要聲明不需要初始化
    • 在方法中調用前,需要先將類實例化(新建一個對象)
  • 局部變量
    • 必須聲明和初始化值,只在方法內有效
public class Scope {
    //屬性:變量

    //類變量 static,可以不初始化
    static double salary = 2500;

    //實例變量:從屬於對象,需要聲明不需要初始化
    // 實例變量不初始化的話,默認值為0  0.0
    //布爾值默認是false
    //除了基本類型,其余默認值都是null
    String name;
    int age;

    //main方法
    public static void main(String[] args) {
        //局部變量:必須聲明和初始化值,只在方法內有效
        int i = 10;

        Scope s = new Scope();
        System.out.println(s.age);//age沒有初始化,但可以輸出,輸出為0

        System.out.println(salary);//類變量可以直接輸出,輸出2500

    }
    //其他方法
}

常量

 常量被初始化后不能再改變值

 修飾符為final(修飾符不去分前后)

 常量名一般全為大寫

final 數據類型 常量名 = 值;
final double PI = 3.14;

4. 運算符

算術運算符

對於longintshortbyte

  • 當進行運算的變量有long類型,則運算結果的數據類型為long
  • 否則全部為int,即使是shortbyte類型的變量,運算結果也是in

b=++ab=a++

  • ++a:先自增,再給b賦值
  • a++:先給b賦值,再自增

冪運算:

  • Math.pow(底數,指數);

邏輯運算符

短路運算:

 當根據邏輯運算符前面的表達式就可以得出邏輯運算的結果時,邏輯運算符后面的表達式不再執行。

int c=5;
boolean d=(c<4) && (c++<4);
System.out.println(d);//輸出false
System.out.println(d);//輸出5

位運算

 位運算效率高

  • &:與
  • |:或
  • ^:異或
  • ~:非,取反
  • <<:左移,相當於乘2
  • >>:右移,相當於除以2

面試題:2*8=16,怎樣運算最快

​ 答:用位運算最快

​ 0000 0001 1

​ 0000 0010 2

​ 0000 0100 4

​ 0000 1000 8

​ 0001 0000 16

​ 所以把2左移3,就可以得到16

System.out.printlin(2<<3);//輸出16

擴展賦值運算符

  • a+=b:a=a+b
  • a-=b:a=a-b

字符串連接符 +

  • 當+一邊出現字符串類型時,運算返回的是字符串類型。運算符優先級不變,還是從左到右
System.out.printlin(""+1+2);//12
System.out.printlin(1+2+"");//3,先進行加法運算,再與字符串連接

三元運算符

  • x ? y : z(掌握,常見)
    • 如果x==true,則返回y,否則返回z

5. 包機制

 包的本質就是文件夾

一般利用公司域名倒置作為包名

​ 防止命名空間重復

  1. 在src里新建一個包

新建包

  1. 取消compact middle packages

  1. 可以在域名下加屬於他的功能

包的導入

 為了使用其他包的成員,需要在java程序中使用import導入改包(idea可以設置自動導入包),導入的其他包的方法名不能和程序中的方法名一樣。

​ .*為通配符,可以導入包下所有的類

import java.util.*

6. JavaDoc

​ 將注釋信息生成自己的幫助文檔/API文檔

使用命令行生成幫助文檔

  1. 使用文檔注釋 /** */

  2. 打開代碼所在位置(mac:右鍵.java文件,點擊Reveal in Finder)

  3. 打開命令行,cd到代碼所在文件夾,運行:

    javadoc -encoding UTF-8 -charset UTF-8 程序名.java

    -encoding utf-8 -charset utf-8 為了能夠顯示中文

  4. 生成幫助文檔

幫助文檔

使用IDEA生成幫助文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM