1. 程式人生 > >二、常量、變數和基本資料型別

二、常量、變數和基本資料型別

變數

   宣告變數

   宣告變數的作用

(1)指定在記憶體空間中分配的空間大小

(2)規定這個變數所能接受的運算

下面我們舉個例子進行變數的宣告和賦值

package day01;

/**
 * @author 超級皮皮蝦
 * @description 變數的宣告和賦值
 */
public class VariableDemo01 {
	public static void main(String[] args) {
		int a;
		a = 20;
		int b = 10;
		char c = 'a';
		System.out.println("a的值為:"+a);
		System.out.println("b的值為:"+b);
		System.out.println("c中存放的字元是"+c);
	}
}

   變數的命名規則

    變數是一種識別符號,它會遵循識別符號的命名規則

(1)JAVA中變數可由字母、數字、下劃線和美元符($)組成

(2)變數名不能以數字開頭

(3)變數名不能是JAVA中的關鍵字

        *關鍵字:是JAVA中已經提前命名好的,具有特點功能或者標識作用的字串

    變數的使用(包含區域性變數概念)

package day01;

/**
 * @author 超級皮皮蝦
 * @description 變數的使用
 * 
 */
public class VariableDemo02 {
	public static void main(String[] args) {
		int outer = 10;
		{
			int inner = 20;
			System.out.println("第一次輸出inner="+inner);
			System.out.println("第一次輸出outer="+outer);
		}
		//System.out.println("第二次輸出inner="+inner);
		System.out.println("第二次輸出outer="+outer);
	}
}

        例項講解:上述程式碼定義了outer、inner兩個變數,outer在整個main()方法內,而inner在main()方法下還有   一   層"   {               }"程式碼塊,所以inner變數只在程式碼塊內可見,即inner的生命週期只在程式碼塊內,除了程式碼塊,inner變數分配的記憶體空間就會釋放,所有在上述程式碼倒數第4行是無法輸出inner變數的。

常量

    作用:在程式中通常會有一些變數,它貫穿整個程式,然而反覆的宣告,會造成記憶體空間的浪費,而且比較麻煩,這時候我們通常會定義使用靜態常量,讓這個常量生命週期可以貫穿整個程式,方便我們的使用

     例子:在圖書館中有本圖書,館藏數量為200本,如果在每個功能模組都定義個變數來儲存這個書本數,會很麻煩,並且不能儲存資料的準確性(即一個模組修改了數值,另一個功能模組不可見),因此我們就可以宣告一個全域性的靜態常量,來幫助我們記錄這200本書籍的數量情況

    例項:

package day01;

/**
 * @author 超級皮皮蝦
 * @description java中定義常量
 * 
 */
public class FinalDemo {
	private static final int BOOKNUM = 200;
	public static void main(String[] args) {
		System.out.println("書本的數量有:"+BOOKNUM);
	}
}

   例項講解:在上述例子中,即常量的定義方法,常量的名字通常全部大寫。final是修飾常量的java關鍵字,在需要宣告常量的時候需要加上,static也是java關鍵字,只有加了static才能被main函式使用。

基本資料型別

              

    如上圖java中資料型別分為基本資料型別和引用資料型別,本章將會對基本資料型別講述

現在請大家跟著我把基本資料型別認識一下,如下

資料型別                位元組數                    型別說法

 byte                        1                            位元組型

short                        2                            短整型

int                         4                            整型

long                         8                            長整型

boolean                   1                            布林型

   char                       2                            字元型

           float                        4                            單精度浮點型

          double                     8                            雙精度浮點型

    上述就是關於java基本資料型別的簡述,分別是八大資料型別,以及各型別所佔有的位元組數,位元組數越大,表示儲存的資料長度能更長,這裡的資料長度,大家可以理解為是能裝的資料的大小空間,在資料型別後面還給大家提供了一下各型別資料的叫法。幫助大家記憶。

    在下面的講解過程中,我會將byte、short、int、long作為一部分,boolean一部分,char一部分,float、double一部分共4個部分為大家講解,而在最後對大家強調一下long型別和float型別

1.int,byte,short,long型別

在日常程式設計中,我們經常需要處理一些0資料,因為一些安全性問題,以及實用性問題,我們需要給資料定義型別來將資料賦值給變數,這樣我們就可以通過變數名獲得物件,這樣我們就可以反覆對資料進行使用,舉個例子,定義一個變數名為a的整型變數,用來裝一個書本本數的資料,假設書本有20本,我們可以這樣

package test;

/**
 * @author 超級皮皮蝦
 * @description 基本資料型別的演示
 * 
 */
public class DataType {
	public static void main(String[] args) {
		//定義一個變數用來儲存書本本數,數學書有20本
		int a = 20;
		//在下面我們想輸出給控制檯,看看我們還剩多少本數學書
		System.out.println("倉庫還剩餘"+a+"本數學書");
	}
}

我們可以檢視控制檯的效果:

  上述程式碼只給大家演示了一下變數的定義和輸出使用,我們還看不出來將資料賦值給變臉的好處,接下來我給大家再來模擬一個場景

package test;

/**
 * @author 超級皮皮蝦
 * @description 基本資料型別的演示
 * 
 */
public class DataType {
	public static void main(String[] args) {
		//定義一個變數用來儲存書本本數,數學書有20本
		int a = 20;
		//在下面我們想輸出給控制檯,看看我們還剩多少本數學書
		System.out.println("倉庫還剩餘"+a+"本數學書");
		//小明過來想買走16本書,這時候我們看倉庫還有20本,數量夠,我們就賣16本
		a = a - 16;
		//這時候,我還想看一下倉庫有多少本書,查一下
		System.out.println("倉庫還剩餘"+a+"本數學書");
	}
}

再次檢視一下控制檯效果


看到效果沒有,在程式中,我們經常會使用到資料,通過變數,我們就可以通過變數名反覆呼叫,使用我們需要的資料,進行修改的操作。而在程式設計中,一般根據我們需要儲存的資料型別和資料長度,來決定我們需要給變數定義的型別,通常整數的資料我們都會用byte,short,int,long型別進行定義,而int型別是最常用的。因此上述只給大家做的int型別的演示,我們接下來看一下這4個型別的最大長度

package test;

/**
 * @author 超級皮皮蝦
 * @description 基本資料型別的演示
 * 
 */
public class DataType {
	public static void main(String[] args) {
		byte byteMax = Byte.MAX_VALUE;
		int intMax = Integer.MAX_VALUE;
		short shortMax = Short.MAX_VALUE;
		long longMax = Long.MAX_VALUE;
		System.out.println("byte型別的最大值為"+byteMax);
		System.out.println("short型別的最大值為"+shortMax);
		System.out.println("int型別的最大值為"+intMax);
		System.out.println("long型別的最大值為"+longMax);
	}
}

這時同學們就可以根據自己的需要選擇需要的資料型別來定義我們的變量了,記住上述輸出的資料單位都是位元組數,關於位元組數,有需要了解的同學可以自己百度一下,這裡不做詳細描述

這裡給大家提一下,關於變數的定義使用,大家可以將變數名當做是門牌號,而變數值是你家,你家的大小,樣式就決定你的資料型別,通過門牌號我們就可以找到你的家,這裡大家可以想象一下幫助理解

2.char型別

char型別,一般用來存放一個字元,所謂的字元就是一個一個的字母,也可以是數字'1'等“數字”,也可以是各種符號,反正就是一個一個的字元,這裡大家需要知道的是存放'1',這裡的'1'可不是數字1,他是一個字元'1'其他的數字也是一樣的

    下面個大家展示一下用法

package test;

public class DataType {
	public static void main(String[] args) {
		char c1 = 'a';
		char c2 = '1';
		System.out.println("c1裝的字元是"+c1);
		System.out.println("c2裝的字元是"+c2);
	}
}

演示結果還請大家自行實踐一下,增加記憶,記住char型別是用來裝一個一個的字元就行了

3.boolean型別

   在程式中我們有時候需要用到的一個特殊型別,它的值只要兩種true和false,一般用來當做識別符號的變數

我們來做一個例子,if-else結構,我們將在後面的章節給大家講述,記得boolean型別的用法就行

package test;

public class DataType {
	public static void main(String[] args) {
		boolean flag = true;
		if(flag){
			System.out.println("BigDodo是最帥的");
		}else{
			System.out.println("BigDodo不是最帥的");
		}
	}
}

4.float,double型別

區別開byte,short,int,long型別,單獨為一部分,是因為這兩個型別通常用來存放浮點數,所謂的浮點數就是小數,選float還是double型別,一樣看長度,我們一般使用的都float型別

5.float和long型別的用法注意

package test;

public class DataType {
	public static void main(String[] args) {
		float a = 3.0f;
		long b = 8888L;
		System.out.println(a);
		System.out.println(b);
	}
}
注意變數的定義我們在定義float型別和long型別的時候我們都會帶上識別符號float型別會帶著f,而long型別會帶著l,這裡的‘F’和‘L’大小寫都可以,你們在定義float時不帶'F'時候程式編譯就會出現報錯,而long型別不帶'L',這裡後面章節給大家講解,這裡只用記住定義時候需要特別注意float型別和long型別的使用就行

資料型別的自動轉型和強制轉型

    自動轉型,什麼叫自動轉型?其實很簡單理解,有時候我們當初設計的資料型別為int,而這時候我們有別的程式是使用的這個資料型別需要是long型別,這時候我們程式就會自動給我們將型別轉換成long型別,而不需要我們去將int型別的資料去轉換成long型別,我們看一下一個型別的順序

                byte->short->int->long->float->double

按照這個順序,只有需求的資料型別比我們定義的資料型別大時,程式就會自動轉換資料型別,而不需要我們轉換,看到上面一個例子 long b = 8888。為什麼沒有抱歉,明明正確的定義應該是long b = 8888L,仔細的小夥伴就會發現了,沒有錯這裡就是程式給我們自動將8888這個int型別的資料變成了8888L長整型的資料了

那麼問題來了為什麼float a = 3.0就不行呢?

java中,在定義的小數的時候,java會預設型別為double,而double在型別順序比float靠後,也就是說double型別的資料想要變成float型別,java不會幫我們自動轉型,而需要我們強制轉換,同樣的任何型別都這樣只能自動型別轉換成型別大的,而不能自動轉換成型別小的,這裡後面補充,先給將一下強制型別轉換

package test;

public class DataType {
	public static void main(String[] args) {
		float a = 3.0f;
		float b = (float)3.0;
		System.out.println(a);
		System.out.println(b);
	}
}

如上述程式碼,如果需要強制轉換型別小的這時候我們需要自己在需要轉換的資料型別面前加上(    ),(    )裡面寫上我們需要轉換成的型別

            int num = (int)500L;

大家也可以試試long型別轉換成Int型別

為什麼java中大型別不能自動轉換成小型別呢?

    舉個例子

package test;

public class DataType {
	public static void main(String[] args) {
		float a = 3.7f;
		int b = (int)a;
		System.out.println("大型別float   a的值"+a);
		System.out.println("小型別int   b的值"+b);
		
	}
}

我們可以看到,當將大型別值3.7轉換成小型別值的時候變成了3,想象一下,這裡單位如果是億元,對吧,後果很嚴重。

    所以在資料型別轉換的過程中,我們一定需要注意資料精度、資料丟失的問題哦。