天天看點

day021,常見的進制2,在Java中如何表示二進制,十進制,八進制,十六進制3,進制之間的轉換4,計算機的存儲機關5,變量6,Java中的資料類型7,不同類型的範圍8,變量的總結注意點:9,辨別符10,辨別符的硬性規定11,辨別符的軟性建議12,隐式轉換13,強制轉換14,整數的常量優化機制15,小結16,字元的運算

1,常見的進制

學習程度:

知道什麼是二進制?什麼是十進制?什麼是八進制?什麼是十六進制就可以了。

十進制:

​ 現實生活中是十進制。每一位由0123456789組成,逢十進一。

二進制:

​ 計算機中是二進制。每一位由0和1組成,逢二進一。

八進制:(了解)

​ 每一位由01234567組成。逢八進一。

十六進制:(了解)

​ 每一位由0123456789abcdef組成。逢十六進一。

2,在Java中如何表示二進制,十進制,八進制,十六進制

學習程度:

​ 我給你一個數字,你能判斷出來他是幾進制的,而且能說出是否報錯即可。

二進制:

​ 是以0b開頭的。b可以大寫也可以小寫。

System.out.println(0b10);//0b相當于就是一個标記。
						//标記着後面的數字是二進制下的。
           
十進制:

​ 預設前面什麼都沒有

八進制:

​ 是以0開頭的。

System.out.println(010);//前面的0相當于就是一個标記。
						//标記着後面的數字是八進制下的。
           
十六進制:

​ 是以0x開頭的。x可以大寫也可以小寫。

System.out.println(0x10);//前面的0x相當于就是一個标記。
						//标記着後面的數字是十六進制下的。
           
案例1:
System.out.println(0b123);//報錯。
							//因為0b表示着後面的數字是二進制。而二進制由0和1組成。沒有其他數字
							//在本案例當中出現了2和3,就是錯誤的。
           
案例2:
System.out.println(090);//報錯
							//因為以0開頭的,表示後面的數字是八進制的。而八進制由01234567組成。
							//在本案例中出現了9,是以錯誤。
           
案例3:
System.out.println(0x123);//正确沒有問題,十六進制
							//因為以0x開頭,表示是十六進制,十六進制由0123456789abcdef組成。
							//本案例中所有的數字沒有超出範圍。
           

3,進制之間的轉換

手動計算不需要掌握。

咱們隻需要掌握使用電腦來求出進制就可以了。

4,計算機的存儲機關

一個數字如何存儲到硬碟當中?

先把這個數字轉成二進制,然後把二進制存到硬碟當中。

舉例:99 ----> 0110 0011 —> 在把二進制存儲到硬碟當中

知道計算機中最小的存儲單元是什麼?

是byte.

bit:在二進制中的一個0或者一個1。(比特位)

但是一個bit表示的内容太少了。是以我們會把8個bit分為一組。這一組就叫做byte。(位元組)

而這個位元組(byte)才是計算機中最小的存儲機關。

知道bit,位元組,KB,MB,GB,TB之間的轉換關系?

8個bit = 1個位元組

1024位元組 = 1KB

1024KB = 1MB

1024MB = 1GB

1024GB = 1TB

5,變量

什麼是變量?

​ 就是在代碼中,臨時存儲資料一個容器,也可以把他了解為一個箱子。但是這個容器當中隻能存一個值。

變量的定義格式?

​ 資料類型 變量名 = 資料值;

​ 資料類型:表示這個變量以後隻能存什麼類型的資料。

​ 變量名:就是這個容器的名字。以後想使用容器裡面的内容時,直接使用變量名就可以了。

​ = :就是把右邊的數值指派給左邊的變量。

​ 簡單了解就是把這個資料放到容器當中進行存儲。

​ 資料值:真實的存到容器中的資料。

​ 分号:表示語句的結束,就跟寫作文時候用到的句号是一模一樣的。

變量的命名規範

  1. 所有變量 、 方法 類名:**見名知意 **
  2. 類成員變量:首字母小寫和駝峰原則 monthSalary
  3. 局部變量:首字母小寫和駝峰原則
  4. 常量:大寫字母和下劃線:MAX_VALUE
  5. 類名:首字母大寫和駝峰原則:Man,GoodMan
  6. 方法名:首字母小寫和駝峰原則:run(),runRun()

舉例1:

//定義一個整數類型的變量
//資料類型 變量名 = 資料值;
整數類型 a = 10;
//此時在代碼當中,就會出現了一個容器。這個容器名字叫做a。這個容器隻能存整數,現在這個容器裡面已經有值了。值為10.
           

舉例2:

//定義一個小數類型的變量
//資料類型 變量名 = 資料值;
小數類型 b = 10.2;
//此時在代碼中,就會出現了一個容器,這個容器名字叫做b。這個容器隻能存小數,現在這個容器裡面已經有值了。值為10.2
           

6,Java中的資料類型

四類八種:

public class Demo01 {
    public static void main(String[] args) {
        //java分基本類型和引用類型
        //八大基本資料類型
        //整數4中資料類型
        int num1= 10;
        byte num2=20;
        short num3=30;
        long  num4=30L;//Long類型後面要加L

        //小數; 浮點數
        float num5= 50.1F;//float類型後加F
        double num6=3.66666566666666;

        //字元
        char name ='A';//字元隻能一個
        //字元串,String不是關鍵字,類
        //String namea="yuweikang"

        //布爾值;是/非
        boolean flag=true;
        //boolean flag=false;
    }
}

           

整數類型: byte short int long

浮點類型:(小數) float double

字元類型: char

布爾類型: boolean

定義變量的案例:

//定義一個整數類型的變量
byte a = 10;
short b = 20;
int c = 30;
long d = 40L;//如果要定義long類型的變量,在數字的後面需要加L字尾。
           
//定義一個小數類型的變量
float  e = 10.1F;//如果要定義float類型的變量,在數字的後面需要加F字尾。
double f = 20.2;
           
//定義一個字元類型的變量
char g = '我';
           
//定義一個布爾類型的變量
boolean h = true;
           

字元串的詳細知識我們在就業班會學習。

目前,我們暫時隻要知道如何定義字元串類型的變量即可。

public class Demo3 {
    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);
        System.out.println("------------------------------------");

        //------------------------------------
        //浮點數拓展? 銀行業務怎麼表示? 錢
        // BigDecimal 數學工具類
        //------------------------------------
        //float  有限  離散  有誤差 大約  接近但不等于
        //double
        //最好完全避免使用浮點數進行比較
        //最好完全避免使用浮點數進行比較
        //最好完全避免使用浮點數進行比較

        float f = 0.1f; //0.1
        double d = 1.0/10;//0.1

        System.out.println(f==d);//false 不一樣
        System.out.println(f);
        System.out.println(d);

        float d1 = 232323232323f;
        float d2 = d1+1;

        System.out.println(d1==d2);//trule 等于說明浮點數有問題
        System.out.println("------------------------------------");

        //------------------------------------
        //字元拓展?
        //------------------------------------
        char c1 = 'a';
        char c2 = '中';

        System.out.println(c1);
        System.out.println((int)c1);//強制轉換
        System.out.println(c2);
        System.out.println((int)c2);//強制轉換\
        //所有字元本質還是數字
        //編碼 Unicode 表:(97=a  65= A)  2個位元組    0~65536 Excel   2的16次方=65536


        //U0000  uFFFF

        char c3 ='\u0061';
        // \u0000 轉譯

        System.out.println(c3); //a


        //轉譯字元
        // \t  空格
        // \n   換行
        //...

        System.out.println("你\t好");

        //布爾值擴充
        boolean flag = true;
        if (flag==true){}//新手
        if (flag){}//老手
        //代碼要精簡易讀

    }
}
           

7,不同類型的範圍

知道byte的取值範圍:

​ -128 ~ 127

知道一下int的大概範圍:

​ 負21億多 ~ 21億多

預設使用的資料類型:

​ 整數:int

​ 小數:double

​ 字元:char

​ 布爾:boolean

​ 字元串:String

取值範圍由大到小的關系:

​ double > float > long > int > short > byte (包含了整數和小數)

四類八種在記憶體中所占用的位元組個數:

​ byte : 1

​ short : 2

​ int : 4

​ long : 8

​ float : 4

​ double : 8

​ char: 2

​ boolean: 1 //因為隻有兩個值,true,false。是以一般不會考慮布爾類型在記憶體中占用位元組個數。

關于變量的練習1:
public class Test{
	public static void main(String [] args){
		//大家好,我叫播仔,是傳智播客與黑馬程式員的吉祥物
		//今年2歲了,身高1.5米
		//愛好比較廣泛(唱、跳、Rap、Java)
		//另外,咱是一隻公猴~
		//播仔   2     1.5    唱、跳、Rap、Java    公
		//定義一個字元串類型的變量去記錄姓名
		String a = "播仔";
		
		//定義一個整數類型的變量去記錄年齡
		int b = 2;
		
		//定義一個小數類型的變量去記錄身高
		double c = 1.5;
		
		//定義一個字元串類型的變量去記錄愛好
		String d = "唱、跳、Rap、Java";
		
		//定義一個字元類型的變量去記錄性别
		char e = '公';
		
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
		System.out.println(e);
	}
}
           
關于變量的練習2:
int a = 10;
System.out.println(a);//輸出的是變量a裡面的值10.
a = 30;//此時不是定義。
		//而是把30指派給變量a。
		//變量a是已經存在的。是以把變量a裡面原來的值覆寫了。因為變量裡面同時隻能存一個值。
System.out.println(a);//再次輸出,就是修改之後值30.		
           
關于變量的練習3:
public class Test {
    public static void main(String[] args) {
        int a;//定義一個變量叫做a,但是此時變量a裡面沒有值。
        System.out.println(a);//變量裡面沒有值,就無法輸出。是以這裡報錯。
       
        {//單獨出現的大括号,表示代碼塊。
           //限制了變量的作用範圍。
            //變量在定義之後,隻能在所屬的大括号中使用。
            int c = 20;
         System.out.println(c);
        }
        c = 30;
        System.out.println(c);
    }
}
           
關于變量作用範圍的練習:
public class Test {
    public static void main(String[] args) {
        int a;//定義在main後面的這個大括号中的。
        		//是以在main的整個大括号中都有效。
        System.out.println(a);
    }
}
           
public class Test {
    public static void main(String[] args) {
        {//代碼塊。
         int c = 20;//變量c此時是定義在裡面的單獨的大括号中的。
            		//隻能在這個大括号中才能使用。
            		//超出這個大括号就沒有用了
         System.out.println(c);//可以使用c
        }
        System.out.println(c);//此處已經超出了變量c定義的大括号,是以,此時就無法使用變量c了
        					//變量c其實在記憶體中就已經消失了。
    }
}
           
public class Test {
    public static void main(String[] args) {
        {
         int c = 20;//定義在裡面的大括号中的。
         System.out.println(c);//20
        }//到了這一行代碼的時候第一個c,就已經從記憶體中消失了。
        //既然記憶體中都沒有c了,那麼我再定義一個行不行?肯定是可以的。
        int c = 10;
        System.out.println(c);//10
    }
}
           

8,變量的總結注意點:

public class Demo08 {
    //類變量 static
    static int salary = 3000;
    //屬性:變量

    //執行個體變量;從屬于對象;如果不自動初始化,這個類型的預設值 0  0.0
    //布爾值預設false
    //除了基本類型其餘都是null
    String name="yuweikang";
    int age =20;

    //mian方法
    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 add(){

    }
}
           
  • 變量的作用範圍

    ​ 隻能在所屬的大括号中有效。代碼運作到目前右大括号時,這個變量就會從記憶體中消失。

  • 變量名不允許重複定義
public class Test {
    public static void main(String[] args) {
        int a = 10;//因為第一個a是定義在main後面的大括号中的,在整個main當中都有效。
        int a = 20;//既然第一個a還沒有消失,那麼就不能再定義第二個變量a
    }
}
           
  • 變量在使用之前,必須要指派。
  • 定義float和long類型的變量時,需要在後面加字尾。
float a = 10.1F;
long b = 100L;
字尾可以大寫也可以小寫,但是個人推薦大寫。
           

9,辨別符

在代碼中,我們自己起的名字。

類名,變量名,方法名(後面學)。

10,辨別符的硬性規定

我們必須得這麼做,不這麼做,Java就報錯。

  • 由數字,字母,下劃線,美元$組成.
  • 不能以數字開頭
  • 不能是關鍵字
  • 區分大小寫的

11,辨別符的軟性建議

如果不這麼幹,程式不會報錯。但是代碼會顯得不專業。

小駝峰命名法:

變量名,方法名:

​ 一個單詞:全部小寫。 比如:name、age、gender

​ 多個單詞:從第二個單詞開始,首字母大寫。 比如:maxAge

大駝峰命名法:

類名:

​ 一個單詞:首字母大寫。 比如:Test

​ 多個單詞:每個單詞首字母都要大寫。 比如:HelloWorld

綜上所述:不管定義什麼東西,都要見名知意。

​ 建議寫英文單詞,如果英文單詞不記得了,那麼可以寫拼音(不建議)或者是查閱有道詞典(建議)。

12,隐式轉換

判斷技巧:

​ 把取值範圍小的,指派給取值範圍大的。

在代碼中的觸發時機:
  • 直接指派:

    取值範圍小的指派給取值範圍大的。不需要寫代碼額外實作,Java底層幫我們自動搞好。

比如:

第一個:
	double d = 10;//此時10預設是int類型,交給取值範圍大的double就ok的。底層自動操作。
第二個:
	int i = 10;
	double d = i;//i現在為int類型,交給取值範圍大的double是ok的,底層自動操作。
           
  • 不同資料類型參與計算:

    小的資料類型會提升為大的,然後再進行計算。這個過程也是底層自動操作的。不需要我們額外寫代碼。

int i = 10;
long b = 100L;
float f = 20.0F;
double d = 100.0;
??? result = i + b + f + d;
//result變量應該是什麼類型?double
//因為在上面的案例中,i,b,f,d當中最大的取值範圍是double。是以最終就會提升為double。
           

​ byte,short,int類型的變量,在參與運算的時候,先提升為int,再進行計算。

byte b = 10;
short s = 20;
??? result = b + s;
//result變量應該是什麼類型?int
//取值範圍比int小的,在計算的時候,先提升為int,然後再進行計算。
           
byte b1 = 10;
byte b2 = 20;
??? result = b1 + b2;
//result變量應該是什麼類型?int
//取值範圍比int小的,在計算的時候,先提升為int,然後再進行計算。
           
byte b = 10;
short s = 20;
double d = 20.0;
??? result = b + s+ d;
//result變量應該是什麼類型?double
//計算的過程中,發生了什麼事情?
//因為b和s分别為byte和short類型,是以計算的時候先提升為int
//那麼此時就是 int + int + double
//double的取值範圍比int大,是以int需要再次往上提升為double
//最終 double + double + double 結果就是doouble類型。
           
byte b = 10;
float f = 10.1F;
??? result = b + f;
//result變量應該是什麼類型?float  double
float:因為變量b是byte類型的,是以在計算的時候先自動提升為int
	   然後 int去加上float。又因為float> int。是以,最終是float類
double:等号的右邊最終計算之後,是float類型的,把一個小的給一個大的,是沒有問題的。	   
           

核心技巧:

​ 把取值範圍小的,指派給取值範圍大的。是完全木有問題的。

​ double > float > long > int > short > byte //小數的取值範圍要大于所有的整數。

13,強制轉換

判斷核心技巧 :

​ 把一個取值範圍大的,指派給取值範圍小的。(硬塞)

注意點:有可能會導緻精度的丢失。(數字有可能跟原來的數字不一樣)

在代碼中的觸發時機:
  • 直接指派

    ​ 把一個取值範圍大的變量或者值,指派給一個取值範圍小的變量。

int a = 50;
byte b = a;//此時代碼會報錯,因為把一個大的給一個小的。
//如果一定要這麼幹,請硬塞。
//byte b = (byte)a;//想轉成什麼類型,就在小括号中寫什麼類型就可以了。
           
int a = 300;
byte b = (byte)a;//大的指派給小的,硬塞。
//有沒有可能會出現什麼問題?
//會出現。因為byte的取值範圍是-128~127.而300已經超出了這個範圍。
//是以此時,代碼編譯和運作的時候不會報錯,但是數字會精度丢失。
//具體結果是什麼,不需要關心,隻要知道精度會丢失即可。
           
  • 在運算的時候。把最終的結果進行指派。

跟上面也是類似的,隻不過是把最終的結果指派給一個變量

byte b1 = 10;
byte b2 = 10;
byte b3 = b1 + b2;//如果操作讓這行代碼不報錯?
//出錯的原因:b1和b2都是byte類型的,在運算的時候會自動提升為int。
//把int指派給byte,肯定報錯了。

//修改方式1:
int b3 = b1 + b2;

//修改方式2:
byte b3 = (byte)(b1 + b2);//把b1和b2的結果進行了強制轉換,變成了byte再進行指派。
//注意點:b1和b2一定要加小括号
byte b3 = (byte)b1 + b2;
//如果不加小括号,那麼就是先把b1強轉成byte,然後再跟b2進行相加。
           

核心技巧:

​ 把取值範圍大的,指派給取值範圍小的。想要轉成誰,那麼就在小括号中寫誰就可以了。

隻不過強制之後,有可能導緻精度丢失。

14,整數的常量優化機制

byte b = 10; //為什麼沒有報錯。

觸發時機:

​ 等号的右邊都是整數常量的時候。

​ 比如: byte b = 3 +4;

​ 比如:byte b = 100;

判斷技巧:

​ 會看等号右邊最終的結果,是不是在左邊的範圍當中。

​ 如果在,正常指派,不會報錯。

​ 如果不在,就會報錯。

//案例一:
byte b = 100;
因為等号的右邊是整數100,觸發了整數的常量優化機制。
此時會檢查,100是否在byte的取值範圍當中。
發現,在,那麼直接指派不會報錯。
           
//案例二:
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
//此時會不會觸發整數的常量優化機制?不會
//因為此時等号的右邊存在變量。
//隻有等号的右邊都是整數常量的時候才會觸發。
           
//案例三:
byte b = 3 + 4;
//等号的右邊都是整數常量,是以也會觸發整數的常量優化機制。
//在編譯的時候,已經是最終的結果7了。
//檢查7是否在左邊的範圍當中。
//此時在,那麼就正常,不會報錯。

byte b = 100 + 200;
//報錯的。
//因為最終的結果,300,超出了byte的取值範圍。
           

15,小結

隐式轉換,整數的常量優化機制,強制轉換的小結:

​ 1)看等号的右邊,如果等号的右邊都是整數常量。那麼就觸發整數的常量優化機制。

​ 2)等号的右邊有小數或者存在變量,那麼就看是什麼資料類型,來決定如何進行提升。(隐式轉換)

​ 如果比int小,先轉成int,然後再算。

​ 如果比int大,就會轉成取值範圍最大的那個。

​ 3)如果我們強制要把大的塞給小的,請使用強制轉換的格式。

16,字元的運算

char c = 'a';
System.out.println(c);//列印字元a
           

技巧:

​ 字元在什麼時候會去查ASCII碼表。

  • 字元參與計算
  • 字元指派給整數類型的變量或者指派給小數類型的變量
int i = 1;
char c = 'a';
System.out.println(i + c);//此時字元參與了運算。就需要去查詢在碼表中a字元對應的數字是多少。
           
int i = 'a';//就會去查閱碼表字元a對應的數字是多少。發現是97,就會把97指派給變量i
System.out.println(i);//97
           

在ASCII碼表中:

​ 所有的都不需要記。

分享一個技巧:

如果我們要查一個字元對應的數字是多少。不需要記,寫個代碼列印一下就ok了。