Java學習日記——基礎篇(二)基本語法


變量

變量和常量是程序處理的兩種基本數據對象,變量是程序的基本組成單位

變量的目的就是確定目標並提供存放空間

public class Hello
{
	public static void main(String args[])
	{
		int a=10;  //定義一個變量,並賦值
		int b=20;
		int result=a+b;  //變量之間的運算
		System.out.println("結果是"+result); 
	}
}

運行結果:

D:\myJavaDemo>javac -encoding UTF-8 Hello.java

D:\myJavaDemo>java Hello
結果是30

基本數據類型

補碼

程序在運行的時候都是用補碼運行的,同樣計算出的結果也是補碼

  • 0的原碼和補碼都是0,
  • 正數的補碼是其本身的二進制形式,
  • 負數的補碼需要先將其絕對值按位取反(取得的結果叫做反碼),再 +1。

比如  - 3 ,就是先將 1000 0011 按位取反(除了符號位),得到  1111 1100  ,在 +1 得到 1111 1101

java有四大基本數據類型:整數類型,浮點類型,布爾類型,字符類型

整數類型

  整數類型可以表示一個整數,常用的整數類型有:byte,short,int,long

  計算機中的信息存儲單位:

    • 最小是bit,也就是位——表示0/1
    • 1 字節(Byte / B) == 8 位(bit)
    • 1 KB == 1024字節(B) == 2^10B
    • 1 MB == 1024KB == 1024 * 1024字節 == 2^20B
    • 1 GB == 1024MB == 2^30B

  他們之間的區別主要是大小

    • byte     一個字節————(-128-127)
    • short    兩個字節————(-32768-32767)
    • int        四個字節————(........)
    • long     八個字節————(........)

數字的范圍是如何計算出來的呢?

    計算公式:

最高位是符號位(0表示正數,1表示負數),所以一個字節中的8位只有7位可以用,最大的數為

  •   0111 1111 ——    2^7 - 1   ==  127
  •   1111 1111 —— - (2^7 - 1) == -127

但是最小為什么是 -128 呢?這就體現出印度人的聰明來了,因為是印度人發明的

  •   0000 0000 —— 表示的是  0
  •   1000 0000 —— 表示的是 -0

這不就浪費了一個數了嗎,所以人們就把 - 0 看成 -128,

  • [-128] 原碼 = 1000 0000 —— 發生了溢出(二進制形式是1000 0000,恰巧和符號位一樣都是1不要誤解),反碼1000 0000是省略了最前面的1,因為溢出
  • [-128] 反碼 = 1111 1111 —— 最高位是符號位所以不會改變,其余取反
  • [-128] 補碼 = 1000 0000 —— 反碼 + 1,符號位不會受到影響

 

1  +  3  的計算過程(運算結果也為補碼)

  • 原碼為:0000 0001  +  0000 0011  
  • 補碼為:0000 0001  +  0000 0011  =  0000 0100   
  • 運算結果也是補碼,但是符號位是0,一個正數,原碼就是它本身0000 0100 == 3

1  +  -3  的計算過程

  • 原碼為:0000 0001 + 1000 0011 
  • 補碼為: 0000 0001 + (1111 1100 + 1) = 0000 0001 + 1111 1101 = 1111 1110  
  • 符號位為1說明是一個負數,轉換為原碼得(1111 1110 - 1,再取反)1000 0010 == -2

1 + (-128) 計算機的計算過程為  

  • 原碼:0000 0001 + 1000 0000
  • 轉換為補碼: 0000 0001 + 1000 0000 == 1000 0001
  • 1000 0001 的符號位為1,是負數,轉換成原碼為(1000 0001 - 1,再取反)1111 1111 == -127
  • -127的原碼為 1111 1111 , 補碼為 1000 0000 + 1 = 1000 0001
  •  127的原碼為 0111 1111 ,補碼為  0111 1111 

神奇的事情就是,把-0在取反碼進行計算后,結果就是用128進行計算的值!!!

 用程序驗證byte型的大小

public class Hello
{
	public static void main(String args[])
	{
		byte bytel = 127;
	}
}


//程序可以正常運行


public class Hello
{
	public static void main(String args[])
	{
		byte bytel = 128;
	}
}


//報錯會損失精度
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:6: 錯誤: 不兼容的類型: 從int轉換到byte可能會有損失
                byte bytel = 128;
                             ^
1 個錯誤

 現有的數據結構不夠大的時候,可以用鏈表,字符數組,字符串來解決這樣的問題

浮點類型

浮點類型可以表示一個小數,常用的浮點類型有:float,double(單精度,雙精度),他們的區別主要是數據大小范圍

 

布爾類型

布爾類型可以表示,或者,類型是boolean

boolean spBool = true;

  

字符類型

字符類型可以表示 單個字符,字符類型是char

多個字符稱之為字符串,在java中用String(還真是大寫)這種數據類型表示,但是String不是基本數據類型,而是類,類是復合數據類型(之后會學習到)

java中字符的加減法

字符類型是一個特殊的整形

ASCII字符表

public class Hello
{
	public static void main(String args[])
	{
		int test1 = 'a' + 'b';			//把a和b對應的ascii碼的數相加,賦值給test1
		char test2 = 'a' + 'b';
		char test3 = '中';				//java中一個char占用兩個字節,所以可以存放漢字
		char char1 = 'q';
		int char2 = '中';                        //中文是用unicode號存放的
		System.out.println(test1);
		System.out.println(test2);
		System.out.println(test3);
		System.out.println(char1);
		System.out.println(char2);
		
	}
}


運行結果:
D:\myJavaDemo>java Hello
195
?
中
q
20013

注:中對應的unicode碼為\u4e2d,為20013的16進制形式

結論:在java中,對char進行運算的時候,直接當做  ascii碼對應的整數  對待

 java基本語法——定義變量、初始化、賦值

 什么是定義變量?

int a1;
//這就是定義了一個變量,表示定義了一個整數,名字叫做a1

初始化變量

int a = 45;
//這就是初始化變量,在定義變量的時候就給值

給變量賦值

int tt;
tt = 7780;

int a=25;
a = 45;

//兩者都是給變量賦值

數據類型的轉換

 例1

public class Hello
{
	public static void main(String args[])
	{
		int a = 1.2;
	}
}


只要損失精度就會報錯:

D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:6: 錯誤: 不兼容的類型: 從double轉換到int可能會有損失
                int a = 1.2;
                        ^
1 個錯誤

精度排行:byte < short < int < long < float < double

例2

public class Hello
{
	public static void main(String args[])
	{
		int b = 10;
		System.out.println(b);
	}
}

輸出結果:
10

  結論:數據可以從高精度轉到低精度

例3

 

public class Hello
{
	public static void main(String args[])
	{
		float a = 3.4;
	}
}


報錯:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:6: 錯誤: 不兼容的類型: 從double轉換到float可能會有損失
                float a = 3.4;
                          ^
1 個錯誤  

  因為在java中,小數的默認類型是double
    float a = 3.4;  
  表示我要把一個double類型交給float類型,損失精度,報錯

例4

public class Hello
{
	public static void main(String args[])
	{
		float a = 3.4f;       //加上f就明確表示用float類型,就可以通過編譯了
	}
}

將高精度強制轉換為低精度

例5

public class Hello
{
	public static void main(String args[])
	{
		float a = 3.4f;
		int b = (int)a;
		int c = (int)1.9;
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
}


輸出結果:
D:\myJavaDemo>java Hello
3.4
3
1

  可以看出(int)1.9的結果為1,強制轉換會直接省略掉后面的

例6

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

報錯:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:7: 錯誤: 不兼容的類型: 從float轉換到int可能會有損失
                int b = a;
                        ^
1 個錯誤

  只要造成精度損失就會報錯

例7

public class Hello
{
	public static void main(String args[])
	{
		float a = 3;
		int b = a + 3.4;
		System.out.println(a);
		System.out.println(b);
	}
}

報錯:
D:\myJavaDemo>javac -encoding UTF-8 Hello.java
Hello.java:7: 錯誤: 不兼容的類型: 從double轉換到int可能會有損失
                int b = a + 3.4;
                          ^
1 個錯誤

  a + 3.4的結果會自動往高精度轉換,就造成了a+3.4的結果是個double類型的,而b是個int類型,損失精度報錯

注: 1 + 3.4f + 6.2的結果是double類型的


免責聲明!

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



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