java基本語法

 java四類八種基本數據類型


java基本數據類型就8種,記住就好了。除了這些都是引用型的了。 


java四類八種基本數據類型

第一類:整型 byte short int long 
第二類:浮點型 float double

第三類:邏輯型 boolean(它只有兩個值可取true false)

第四類:字符型 char

 

在棧中可以直接分配內存的數據是基本數據類型。 
引用數據類型:是數據的引用在棧中,但是他的對象在堆中。 
要想學好Java必須知道各種數據的在內存中存儲位置。 
對內存有了很好的瞭解,可以有助你分析程序。

 

字節:
boolean 布爾型              1/8 
byte 字節類型                1
char 字符型                  2  一個字符能存儲一箇中文漢字
short 短整型                 2
int 整數類型                 4
float 浮點類型(單精度)     4
long 長整形                  8
double 雙精度類型(雙精度)  8

 

java中默認的整數類型是int類型,如果要定義爲float型,則要在數值後加上l或L;
默認的浮點型也是雙精度浮點,如果要定義爲float型,則要在數值後加上f或F。

 

一個字節等於8位,一個字節等於256個數,就是-128到127一共256。
kB就是kBytes 
Bytes就是“字節”的意思! 
K就是千的意思,因爲計算機是通過二進制來計算,10個1正好是1024
1111111111(二進制)=1024(十進制)
1Bytes(字節)=8bit(比特) 
一個英文字母或一個阿拉伯數字就是一個字符,佔用一個字節 
一個漢字就是兩個字符,佔用兩個字節。 
一般講大小是用Bytes,大寫的“B”,講網絡速率是用bit,注意是小寫的“b”。 
例:一個文件有8MBytes 
例:我下載文件的速率是256KB/s,即2Mbit,這通常就是我們寬帶上網的速率。


基本數據類型自動轉換

byte->short,char -> int -> long      

float -> double

int -> float

long -> double

 

記住小可轉大,大轉小會失去精度!!!



變量之間的運算:(不考慮boolean。剩下:char byte short int long float double)


1.自動類型轉換:當容量小的數據類型與容量大的數據類型做運算時,容量小的會自動轉換爲容量大的數據類型:char,byte,short ===>int ===>long ===>float===>double

#當char\byte\short之間做運算時,默認的結果爲int類型


2.強制類型轉換:容量大轉換爲容量小的.要使用強制類型轉換符:()

   強制類型轉換的問題:導致精度的損失


二進制、八進制、十進制、十六進制之間轉換


一、 十進制與二進制之間的轉換 
(1) 十進制轉換爲二進制,分爲整數部分和小數部分 
① 整數部分 
方法:除2取餘法,即每次將整數部分除以2,餘數爲該位權上的數,而商繼續除以2,餘數又爲上一個位權上的數,這個步驟一直持續下去,直到商爲0爲止,最後讀數時候,從最後一個餘數讀起,一直到最前面的一個餘數。下面舉例: 
例:將十進制的168轉換爲二進制 

得出結果 將十進制的168轉換爲二進制,(10101000)2 
分析:第一步,將168除以2,商84,餘數爲0。 
第二步,將商84除以2,商42餘數爲0。 
第三步,將商42除以2,商21餘數爲0。 
第四步,將商21除以2,商10餘數爲1。 
第五步,將商10除以2,商5餘數爲0。 
第六步,將商5除以2,商2餘數爲1。 
第七步,將商2除以2,商1餘數爲0。 
第八步,將商1除以2,商0餘數爲1。 
第九步,讀數,因爲最後一位是經過多次除以2纔得到的,因此它是最高位,讀數字從最後的餘數向前讀,即10101000 

(2) 小數部分 
方法:乘2取整法,即將小數部分乘以2,然後取整數部分,剩下的小數部分繼續乘以2,然後取整數部分,剩下的小數部分又乘以2,一直取到小數部分 
爲零爲止。如果永遠不能爲零,就同十進制數的四捨五入一樣,按照要求保留多少位小數時,就根據後面一位是0還是1,取捨,如果是零,舍掉,如果是1,向入一位。換句話說就是0舍1入。讀數要從前面的整數讀到後面的整數,下面舉例: 
例1:將0.125換算爲二進制 

得出結果:將0.125換算爲二進制(0.001)2 
分析:第一步,將0.125乘以2,得0.25,則整數部分爲0,小數部分爲0.25; 
第二步, 將小數部分0.25乘以2,得0.5,則整數部分爲0,小數部分爲0.5; 
第三步, 將小數部分0.5乘以2,得1.0,則整數部分爲1,小數部分爲0.0; 
第四步,讀數,從第一位讀起,讀到最後一位,即爲0.001。 


例2,將0.45轉換爲二進制(保留到小數點第四位) 


大家從上面步驟可以看出,當第五次做乘法時候,得到的結果是0.4,那麼小數部分繼續乘以2,得0.8,0.8又乘以2的,到1.6這樣一直乘下去,最後不可能得到小數部分爲零,因此,這個時候只好學習十進制的方法進行四捨五入了,但是二進制只有0和1兩個,於是就出現0舍1入。這個也是計算機在轉換中會產生誤差,但是由於保留位數很多,精度很高,所以可以忽略不計。
那麼,我們可以得出結果將0.45轉換爲二進制約等於0.0111 
上面介紹的方法是十進制轉換爲爲二進制的方法,需要大家注意的是: 
1) 十進制轉換爲二進制,需要分成整數和小數兩個部分分別轉換 
2) 當轉換整數時,用的除2取餘法,而轉換小數時候,用的是乘2取整法 
3) 注意他們的讀數方向 
因此,我們從上面的方法,我們可以得出十進制數168.125轉換爲二進制爲10101000.001,或者十進制數轉換爲二進制數約等於10101000.0111。 

(3) 二進制轉換爲十進制 不分整數和小數部分 
方法:按權相加法,即將二進制每位上的數乘以權,然後相加之和即是十進制數。例 
將二進制數101.101轉換爲十進制數。 

得出結果:(101.101)2=(5.625)10 
大家在做二進制轉換成十進制需要注意的是 
1) 要知道二進制每位的權值 
2) 要能求出每位的值 


二、 二進制與八進制之間的轉換 
首先,我們需要了解一個數學關係,即23=8,24=16,而八進制和十六進制是用這 
關係衍生而來的,即用三位二進制表示一位八進制,用四位二進制表示一位十六進制數。 
接着,記住4個數字8、4、2、1(23=8、22=4、21=2、20=1)。現在我們來練習二進制與八進制之間的轉換。 
(1) 二進制轉換爲八進制 
方法:取三合一法,即從二進制的小數點爲分界點,向左(向右)每三位取成一位,接着將這三位二進制按權相加,得到的數就是一位八位二進制數,然後,按順序進行排列,小數點的位置不變,得到的數字就是我們所求的八進制數。如果向左(向右)取三位後,取到最高(最低)位時候,如果無法湊足三位,可以在小數點最左邊(最右邊),即整數的最高位(最低位)添0,湊足三位。例 
①將二進制數101110.101轉換爲八進制 

得到結果:將101110.101轉換爲八進制爲56.5 

② 將二進制數1101.1轉換爲八進制 

得到結果:將1101.1轉換爲八進制爲15.4 

(2) 將八進制轉換爲二進制 
方法:取一分三法,即將一位八進制數分解成三位二進制數,用三位二進制按權相加去湊這位八進制數,小數點位置照舊。例: 
① 將八進制數67.54轉換爲二進制 

因此,將八進制數67.54轉換爲二進制數爲110111.101100,即110111.1011 
大家從上面這道題可以看出,計算八進制轉換爲二進制 
首先,將八進制按照從左到右,每位展開爲三位,小數點位置不變 
然後,按每位展開爲22,21,20(即4、2、1)三位去做湊數,即a×22+ b×21 +c×20=該位上的數(a=1或者a=0,b=1或者b=0,c=1或者c=0),將abc排列就是該位的二進制數 
接着,將每位上轉換成二進制數按順序排列 
最後,就得到了八進制轉換成二進制的數字。 
以上的方法就是二進制與八進制的互換,大家在做題的時候需要注意的是 
1) 他們之間的互換是以一位與三位轉換,這個有別於二進制與十進制轉換 
2) 大家在做添0和去0的時候要注意,是在小數點最左邊或者小數點的最右邊(即整數的最高位和小數的最低位)才能添0或者去0,否則將產生錯誤 

三、 二進制與十六進制的轉換 
方法:與二進制與八進制轉換相似,只不過是一位(十六)與四位(二進制)的轉換,下面具體講解 
(1) 二進制轉換爲十六進制 
方法:取四合一法,即從二進制的小數點爲分界點,向左(向右)每四位取成一位,接着將這四位二進制按權相加,得到的數就是一位十六位二進制數,然後,按順序進行排列,小數點的位置不變,得到的數字就是我們所求的十六進制數。如果向左(向右)取四位後,取到最高(最低)位時候,如果無法湊足四位,可以在小數點最左邊(最右邊),即整數的最高位(最低位)添0,湊足四位。 
①例:將二進制11101001.1011轉換爲十六進制 

得到結果:將二進制11101001.1011轉換爲十六進制爲E9.B 


② 例:將101011.101轉換爲十六進制 

因此得到結果:將二進制101011.101轉換爲十六進制爲2B.A 



(2)將十六進制轉換爲二進制 
方法:取一分四法,即將一位十六進制數分解成四位二進制數,用四位二進制按權相加去湊這位十六進制數,小數點位置照舊。 
①將十六進制6E.2轉換爲二進制數 

因此得到結果:將十六進制6E.2轉換爲二進制爲01101110.0010即110110.001 

四、八進制與十六進制的轉換 
方法:一般不能互相直接轉換,一般是將八進制(或十六進制)轉換爲二進制,然後再將二進制轉換爲十六進制(或八進制),小數點位置不變。那麼相應的轉換請參照上面二進制與八進制的轉換和二進制與十六進制的轉 


五、八進制與十進制的轉換 
(1)八進制轉換爲十進制 
方法:按權相加法,即將八進制每位上的數乘以位權,然後相加之和即是十進制數。 
例:①將八進制數67.35轉換爲十進制 

(2)十進制轉換爲八進制 
十進制轉換成八進制有兩種方法: 
1)間接法:先將十進制轉換成二進制,然後將二進制又轉換成八進制 
2)直接法:前面我們講過,八進制是由二進制衍生而來的,因此我們可以採用與十進制轉換爲二進制相類似的方法,還是整數部分的轉換和小數部分的轉換,下面來具體講解一下: 
①整數部分 
方法:除8取餘法,即每次將整數部分除以8,餘數爲該位權上的數,而商繼續除以8,餘數又爲上一個位權上的數,這個步驟一直持續下去,直到商爲0爲止,最後讀數時候,從最後一個餘數起,一直到最前面的一個餘數。 
②小數部分 
方法:乘8取整法,即將小數部分乘以8,然後取整數部分,剩下的小數部分繼續乘以8,然後取整數部分,剩下的小數部分又乘以8,一直取到小數部分爲零爲止。如果永遠不能爲零,就同十進制數的四捨五入一樣,暫取個名字叫3舍4入。 
例:將十進制數796.703125轉換爲八進制數 
解:先將這個數字分爲整數部分796和小數部分0.703125 
整數部分 

小數部分 

因此,得到結果十進制796.703125轉換八進制爲1434.55 
上面的方法大家可以驗證一下,你可以先將十進制轉換,然後在轉換爲八進制,這樣看得到的結果是否一樣 

六、十六進制與十進制的轉換 
十六進制與八進制有很多相似之處,大家可以參照上面八進制與十進制的轉換自己試試這兩個進制之間的轉換。


java中s=s+2和s+=2有何區別


如果聲明的s是short類型,例如:short s =2
s =s+2編譯的時候會報錯,因爲s+2的時候會提升爲int類型,然後再賦給short類型的s時會報錯:損失精度。
s+=2則可以通過編譯,因爲它內部會有一個自動轉換過程。


交換兩個變量值的三種方法


int m = 12;

 int n = 5;

//方法一:提供一個臨時變量。

       int temp = m;

             m = n;

             n = temp;

//方法二:當m和n較大時,有可能出現精度損失

       m = m + n;//m = 12 + 5;

       n = m - n;//n = 17 - 5;

       m = m - n;//m = 17- 12

   

//方法三:優點:沒有上面兩種方法的缺點。 缺點:難!

        m = m ^ n;

        n = m ^ n;//(m ^ n) ^ n == m

        m = m ^ n;//(m ^ n) ^ m == n


Java中int、String相互轉換


一、int轉換成String方法:

方法1
int i=10;
String s=""+i;
這是利用java的toString機制來做的轉換,任何類型在和String相加的時候,都會先轉換成String。

方法2
int i=10;
String s=String.valueOf(i);
這是利用String類提供的工廠方法來做的轉換。

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i); 

3.) String s = "" + i; 


 

哪種方法好?
第一種?比較方便。
第二種?比較高效。

下面是一段測試程序。

Random ra=new Random(new java.util.Date().getTime());
String tmp=null;
int runtimes=1000000;
int range=50;

for (int i = 0; i <runtimes; i++) {
tmp=String.valueOf(ra.nextInt(range));
}

for (int i = 0; i <runtimes; i++) {
tmp = ""+ra.nextInt(range);
}

其結果,第一個循環只用了0.841秒,而第二個,則用了2.624秒。

這是因爲String類是一個不可變對象,這就使得String類可以隨意的重用,而不會有問題。
事實上在系統內部是有一個String對象的緩衝池,當使用String.valueOf方法的時候,會盡
可能的從這個池中取出符合條件的對象。

所以,請儘可能的使用第二種方法來做轉換,同樣的情況也適用於float, double, byte等
類型向String轉換的情況。

 

二、String轉換成int方法:

s="12345";
int i;
第一種方法:i=Integer.parseInt(s);
第二種方法:i=Integer.valueOf(s).intValue();

方法一:直接使用靜態方法,不會產生多餘的對象,但會拋出異常

方法二:Integer.valueOf(s) 相當於 new Integer(Integer.parseInt(s)),也會拋異常,但會多產生一個對象

 

這裏順便說下i = Integer.parseInt([String],[int radix])

例如:

      String str="123", 
      int i = Integer.parseInt(str,8),
      後面的參數表示當str被看作是多少進制時.i所得到的值(i 是10進制)
      比如i =Integer.parseInt(str,5).i = 38.表示 1*5*5+2*5+3


#int類型並不能自動轉換成String類型




java文件編譯出現“編碼 GBK 的不可映射字符”

這是因爲:由於JDK是國際版的,在編譯的時候,如果我們沒有用-encoding參數指定我們的JAVA源程序的編碼格式,則javac.exe首先獲得我們操作系統默認採用的編碼格式,也即在編譯java程序時,若我們不指定源程序文件的編碼格式,JDK首先獲得操作系統的file.encoding參數(它保存的就是操作系統默認的編碼格式,如WIN2k,它的值爲GBK),然後JDK就把我們的java源程序從file.encoding編碼格式轉化爲JAVA內部默認的UNICODE格式放入內存中。然後,javac把轉換後的unicode格式的文件進行編譯成.class類文件,此時.class文件是UNICODE編碼的,它暫放在內存中,緊接着,JDK將此以UNICODE編碼的編譯後的class文件保存到我們的操作系統中形成我們見到的.class文件。對我們來說,我們最終獲得的.class文件是內容以UNICODE編碼格式保存的類文件,它內部包含我們源程序中的中文字符串,只不過此時它己經由file.encoding格式轉化爲UNICODE格式了。當我們不加設置就編譯時,相當於使用了參數:javac -encoding gbk XX.java,當然就會出現不兼容的情況。


解決辦法是:應該使用-encoding參數指明編碼方式:javac -encoding UTF-8 XX.java,這下沒警告了,運行也正確了在JCreator 4中設置:菜單:Configure --> Options --> JDK Tools --> Compiler,選中<Default>,然後選Edit,Parameters裏面,最前面添加:-encoding UTF-8。

Parameters原來的

默認值爲:-classpath "$[ClassPath]" -d "$[OutputPath]" $[ModJavaFiles]

修改後爲:-encoding UTF-8 -classpath "$[ClassPath]" -d "$[OutputPath]" $[ModJavaFiles]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章