A. java中float數據按位轉成byte型
packageorg.xyz;
importjava.nio.ByteBuffer;
importjava.util.Arrays;
publicclassTest{
publicstaticvoidmain(String[]args){
floatf=10.0f;
System.out.println(Arrays.toString(float2ByteArray(f)));
}
publicstaticbyte[]long2ByteArray(longvalue)
{
returnByteBuffer.allocate(8).putLong(value).array();
}
publicstaticbyte[]float2ByteArray(floatvalue)
{
returnByteBuffer.allocate(4).putFloat(value).array();
}
}
把byte按位轉換為String
packageorg.xyz;
publicclassTest{
publicstaticvoidmain(String[]args){
Integeri1=8;
byte[]bytes=newbyte[3];
byteb=i1.byteValue();
bytes[0]=b;
System.out.println(byteToBits(b));
i1=8;
b=i1.byteValue();
bytes[1]=b;
System.out.println(byteToBits(b));
i1=8;
b=i1.byteValue();
bytes[2]=b;
System.out.println(byteToBits(b));
System.out.println(bytesToBits(bytes));
}
privatestaticStringbyteToBits(byteb){
StringBuildersb=newStringBuilder();
for(inti=7;i>=0;i--){
if(isBitSet(b,i)){
sb.append("1");
}else{
sb.append("0");
}
}
returnsb.toString();
}
(byte[]bs){
StringBuildersb=newStringBuilder();
for(byteb:bs){
for(inti=7;i>=0;i--){
if(isBitSet(b,i)){
sb.append("1");
}else{
sb.append("0");
}
}
}
returnsb.toString();
}
privatestaticBooleanisBitSet(byteb,intbit){
return(b&(1<<bit))!=0;
}
}
B. java的包裝類是什麼,作用是什麼,如何使用
我們知道,Java的數據類型分為三大類,即布爾型、字元型和數值型,而其中數值型又分為整型和浮點型;相對於數據類型,Java的變數類型為布爾型boolean;字元型char;整型byte,short,int,long;浮點型float,double.其中四種整型變數和兩種浮點型變數分別對應於不同的精度和范圍.此外,我們還經常用到兩種類變數,即String和Date.對於這些變數類型之間的相互轉換在我們編程中經常要用到,在我們今天的這篇文章中,我們將來看看如何實現這些轉換.
一、 整型、實型、字元型變數中的相互轉換
在Java中整型,實型,字元型被視為同一類數據,但是級別有所不同,轉換時要注意低級變數能夠直接轉換為高級變數,例如,下面的語句能夠在Java中直接通過:
byte b;
int i=b;
而將高級變數轉換為低級變數時,情況會復雜一些,您能夠使用強制類型轉換.即您必須採用下面這種語句格式:
int i;
byte b=(byte)i;
能夠想像,這種轉換肯定可能會導致溢出或精度的下降,因此我們並不推薦使用這種轉換.
二、Java的包裝類
在我們討論其他變數類型之間的相互轉換時,我們需要了解一下Java的包裝類,所謂包裝類,就是能夠直接將簡單類型的變數表示為一個類,在執行變數類型的相互轉換時,我們會大量使用這些包裝類。Java共有六個包裝類,分別是Boolean、Character、Integer、Long、Float和Double,從字面上我們就能夠看出他們分別對應於 boolean、char、int、long、float和double。而String和Date本身就是類。所以也就不存在什麼包裝類的概念了。
三、簡單類型變數和包裝類之間的相互轉換
簡單類型的變數轉換為相應的包裝類,能夠利用包裝類的構造函數.即:
Boolean(boolean value),Character(char value),Integer(int value),Long(long value),Float(float value),Double(double value)
而在各個包裝類中,總有形為××Value()的方法,來得到其對應的簡單類型數據.利用這種方法,也能夠實現不同數值型變數間的轉換.
四、String類和其他數據類型的相互轉換
由於可以通過包裝類中的構造函數可以轉換:
Boolean(String s),Integer(String s),Long(String s),Float(String s),Double(String s)
而將String類轉換為Date類也能夠使用這樣的構造函數:Date(String s)
字元型變數,事實上String類能夠理解為一個char型數組,所以charAt(int index)能夠得到String類中某一位置上的字元,toCharArray()更能夠將整個String類轉換成一個char的數組.
對於任何的包裝類都存在一個名為toString()的方法能夠將其轉換成對應的String類,而對於整型類和長整型類,還能夠使用toBinaryString(int i),toHexString(int i),toOctalString(int i)分別以二進制,十六進制和八進制的形式進行到String類的轉換。
五、將字元型直接做為數值轉換為其他數據類型
將字元型變數轉換為數值型變數實際上有兩種對應關系,在我們在第一部分所說的那種轉換中,實際上是將其轉換成對應的ASCII碼,但是我們有時還需要另一種轉換關系,例如,『1』就是指的數值1,而不是其ASCII碼,對於這種轉換,我們能夠使用Character的getNumericValue(char ch)方法.
六、Date類和其他數據類型的相互轉換
整型和Date類之間並不存在直接的對應關系,只是您能夠使用int型為分別表示年,月,日,時,分,秒,這樣就在兩者之間建立了一個對應關系,在作這種轉換時,您能夠使用Date類構造函數的三種形式:
Date(int year, int month, int date):以int型表示年,月,日;
Date(int year, int month, int date, int hrs, int min):以int型表示年,月,日,時,分;
Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年,月,日,時,分,秒;
在長整型和Date類之間有一個很有趣的對應關系,就是將一個時間表示為距離格林尼治標准時間1970年1月1日0時0分0秒的毫秒數.對於這種對應關系,Date類也有其相應的構造函數:Date(long date)
獲取Date類中的年,月,日,時,分,秒連同星期您能夠使用Date類的getYear(),getMonth(),getDate(),getHours(),getMinutes(),getSeconds(),getDay()方法,您也能夠將其理解為將Date類轉換成int.
而Date類的getTime()方法能夠得到我們前面所說的一個時間對應的長整型數,和包裝類相同,Date類也有一個toString()方法能夠將其轉換為String類.
C. java中如何把一個String類型的變數轉換成double型的
Double.parseDouble(String類型變數)
例如定義String變數A為「10」,將String轉化為Double變數。
我寫出來了,你可以看一下,如下圖:
(3)javabytetofloat擴展閱讀:
Javascript具有的數據類型。
有5種基本數據類型:number(整形和浮點型)、string、null、boolean和undefined。此外還有一種復雜的數據類型—Object,Object本質上是由一組無序的名值對象組成的,如Date對象是一個日期和時間類型。
String對象是動態對象,需要創建對象實例後才能引用它的屬性和方法。在創建一個String對象變數時,可以使用new運算符來創建,也可以直接將字元串賦給變數。例如:strValue="Hello"與strVal=new String("hello")是等價的。
double(雙精度浮點型)是計算機使用的一種資料型別。比起單精度浮點數(float),double(雙精度浮點數)使用 64 位(8位元組) 來儲存一個浮點數。
它可以表示十進制的15或16位有效數字,負值取值范圍為 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范圍為 4.94065645841246544E-324 到 1.797693E+308
D. java類型轉換問題,求大神解析
1如何將字串 String 轉換成整數 int?
A. 有兩個方法:
1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
注: 字串轉成 Double, Float, Long 的方法大同小異.
2 如何將整數 int 轉換成字串 String ?
A. 有叄種方法:
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
注: Double, Float, Long 轉成字串的方法大同小異.
這是一個例子,說的是JAVA中數據數型的轉換.供大家學習引
package cn.com.lwkj.erts.reGISter;
import java.sql.Date;
public class TypeChange {
public TypeChange() {
}
//change the string type to the int type
public static int stringToInt(String intstr)
{
Integer integer;
integer = Integer.valueOf(intstr);
return integer.intValue();
}
//change int type to the string type
public static String intToString(int value)
{
Integer integer = new Integer(value);
return integer.toString();
}
//change the string type to the float type
public static float stringToFloat(String floatstr)
{
Float floatee;
floatee = Float.valueOf(floatstr);
return floatee.floatValue();
}
//change the float type to the string type
public static String floatToString(float value)
{
Float floatee = new Float(value);
return floatee.toString();
}
//change the string type to the sqlDate type
public static java.sql.Date stringToDate(String dateStr)
{
return java.sql.Date.valueOf(dateStr);
}
//change the sqlDate type to the string type
public static String dateToString(java.sql.Date datee)
{
return datee.toString();
}
public static void main(String[] args)
{
java.sql.Date day ;
day = TypeChange.stringToDate("2003-11-3");
String strday = TypeChange.dateToString(day);
System.out.println(strday);
}
}
JAVA中常用數據類型轉換函數
雖然都能在JAVA API中找到,整理一下做個備份。
string->byte
Byte static byte parseByte(String s)
byte->string
Byte static String toString(byte b)
char->string
Character static String to String (char c)
string->Short
Short static Short parseShort(String s)
Short->String
Short static String toString(Short s)
String->Integer
Integer static int parseInt(String s)
Integer->String
Integer static String tostring(int i)
String->Long
Long static long parseLong(String s)
Long->String
Long static String toString(Long i)
String->Float
Float static float parseFloat(String s)
Float->String
Float static String toString(float f)
String->Double
Double static double parseDouble(String s)
Double->String
Double static String toString(Double d)
E. java如何將 byte [4] 轉換到float
推薦答案是錯誤地把位元組等同與字元。
byte b[]={0x41,(byte) 0xc8,0,0};
//方法1 流輸入,適用於ME/SE環境
//默認大端數,如果小端數,可以先翻轉數組
DataInputStream dis=new DataInputStream(new ByteArrayInputStream(b));
float f=dis.readFloat();
dis.close();
System.out.println(f);
//方法2 緩存輸入,適用於SE/EE環境
ByteBuffer buf=ByteBuffer.allocateDirect(4); //無額外內存的直接緩存
//buf=buf.order(ByteOrder.LITTLE_ENDIAN);//默認大端,小端用這行
buf.put(b);
buf.rewind();
float f2=buf.getFloat();
System.out.println(f2);
都將顯示讀出來的浮點數25.0
F. java.lang.String 怎麼轉換成int類型,或者其他整數類型。菜鳥求
String str = "123";
to int: int intValue = Integer.paraseInt(str);
to float: float floatValue = Float.parseFloat(str);
to double: double doubleValue = Double.paraseDouble(str);
to long: long longValue = Long.paraseLong(str);
基本類型都有對應的封裝類,用那個封裝類的parasexxx方法就可以了
你的600。00不是整形,肯定出錯。要先轉化成double,然後再用Integer.parseInt(str)
import java.text.DecimalFormat;
public class Complex {
public static void main(String args[]){
String str = "600.0000";
DecimalFormat dcmFmt = new DecimalFormat("#0");
String str1 = dcmFmt.format(Double.parseDouble(str));
int value = Integer.parseInt(str1);
System.out.println(str + " --> int succes: " + value);
}
}
-----------
600.0000 --> int succes: 600
G. 用java編寫實現從鍵盤輸入一個字元串,判斷其是否為浮點數
問題
• can not read xxx.java
• 怎樣讓char類型的東西轉換成int類型?
• 我的applet原先好好的, 一放到web server就會有問題,為什麼?
• 怎樣在 Applet中用某個圖形塗滿整個背景?
• 怎樣比較兩個類型為String的字元串?
• 怎樣將浮點數(float)相加 ? Float 好像沒有辦法?
• 如何將字串String轉換成整數int?
• 如何將整數 int 轉換成字串 String?
• 哪位可以推薦幾個比較好的java/jsp論壇?
• JAVA的環境變數 請教一下哪位高手知道JAVA的環境變數怎麼配置?讓它在DOS中運行,我下載的版本是jdk1.5.0_01,系統屬性環境變數中有一個用戶變數和系統變數,該配置在哪個變數中呢?
• C++和JAVA的分別?
• 初學java用那本書好
• 我想學習JAVA編程語言,但不知從啥開始?
• 初學JAVA的人看書參考書最好
• 作用域public,private,protected,以及不寫時的區別
• ArrayList和Vector的區別,HashMap和Hashtable的區別
• char型變數中能不能存貯一個中文漢字?為什麼?
• 繼承時候類的執行順序問題,一般都是選擇題,問你將會列印出什麼?
• 談談final, finally, finalize的區別。
• Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
• Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)
• &和&&的區別
• HashMap和Hashtable的區別?
• Collection 和 Collections的區別?
• 什麼時候用assert?
• GC是什麼? 為什麼要有GC? (基礎)?
• String s = new String("xyz");創建了幾個String Object?
• Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
• short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
• Java有沒有goto?
• 數組有沒有length()這個方法? String有沒有length()這個方法?
• Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
• Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
• abstract class和interface有什麼區別?
• abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
• 構造器Constructor是否可被override?
• 是否可以繼承String類?
• 當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
• try 里的code會不會被執行,什麼時候被執行,在return前還是後?
• 當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
• swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
回答
• can not read xxx.java
首先看看你的文件是否保存為.java.txt的類型了(右點文件看屬性里的擴張名) 重新保存 記得此時要把文件名.java加上引號 保存 。
返回頂部
--------------------------------------------------------------------------------
• 怎樣讓char類型的東西轉換成int類型?
char c = 'A';
int i = c;
//反過來只要作強制類型轉換就行了
c = (char) I;
返回頂部
--------------------------------------------------------------------------------
• 我的applet原先好好的, 一放到web server就會有問題,為什麼?
一般來說,從以下方向試試:
確定class文件的格式沒錯——已經編譯過,也沒有損壞的情形;
確定所有用到的class文件放到web server上,少一個都不行;
確定所有的文件名和class名稱一致,特別檢查大小寫有無差錯;
如果程序中用到package,web server上的目錄就要當心了。譬如您在class中宣告了一個叫COM.foo.util的package,那麼web server的applet codebase目錄底下就非得有 COM/foo/util這個子目錄不可。(注意目錄名稱也有大小寫之分);
web server上的文件檔案應該事先設定好。(尤其是search,read和execute許可權)
返回頂部
--------------------------------------------------------------------------------
• 怎樣在 Applet中用某個圖形塗滿整個背景?
在背景建立 Panel 或 Canvas, 然後用圖形填滿它。
返回頂部
--------------------------------------------------------------------------------
• 怎樣比較兩個類型為String的字元串?
在兩個對象之間使用 "==",會將「兩個對象是否有同一reference」的結果傳回。也就是說, 這等同於「兩個對象是否擁有同一地址 (address)」,或者「兩個對象物件是否為同一對象」。如果您的意思是判斷兩個字元串的內容是否相同,那麼應該使用以下的方法才對:
if (s1.equals(s2) )
or if (s1.equalsIgnoreCase(s2) )
or if (s1.startsWith(s2) )
or if (s1.endsWith(s2) )
or if (s1.regionMatches(s1_offset, s2, s2_offset, length) )
or if (s1.compareTo(s2) <0)
返回頂部
--------------------------------------------------------------------------------
• 怎樣將浮點數(float)相加 ? Float 好像沒有辦法?
我猜想您的程式大概寫成這樣:
Float One;
Float Two;
Float Hard = One + Two;
請注意 float 和 Float 是不同的,前者是 Java 基本類型之一, 而後者卻是class。您應該將源代碼改為:
float One;
float Two;
float Hard = One + Two;
或
Float One = new Float(1.0);
Float Two = new Float(2.0);
Float Hard = new Float(One.floatValue() + Two.floatValue());
返回頂部
--------------------------------------------------------------------------------
• 如何將字串String轉換成整數int?
1)int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);
2)int i = Integer.valueOf(my_str).intValue();
注: 字串轉成Double, Float, Long的方法大同小異。
返回頂部
--------------------------------------------------------------------------------
• 如何將整數 int 轉換成字串 String?
有三種方法:
1)String s = String.valueOf(i);
2)String s = Integer.toString(i);
3)String s = "" + i;
註:Double, Float, Long 轉成字串的方法大同小異。
返回頂部
--------------------------------------------------------------------------------
• 哪位可以推薦幾個比較好的java/jsp論壇?
這個網站是我最近才發現的,雖然內容不多,但是提供的相關java工具挺齊全。還有就是裡面提供了java教學視頻錄象的免費下載,好像一兩周更換一段。個人覺得挺適合初學者的,尤其是那個classpath的設置,講的很透徹,大家有空可以看一看。
java官方站點(英文)
要想了解最新的java動態,下載最新的java相關,比如j2se、j2ee、j2se的最新jdk版本就來這里吧。
java中文站
這個可能大家都知道,不用說了,他提供的java資源是最豐富的。注冊論壇是免費的,還送積分,用積分可以下載軟體和電子書等,如果積分用完了,就需要自己發表一些文章來賺新的積分。
中文java網站
跟上面站點類似的一個站,宗旨就是:為java愛好者服務。值得一看!
鋒網
綜合性的java網站,內含「下載中心」、「教程教學」等欄目。
返回頂部
--------------------------------------------------------------------------------
• JAVA的環境變數
請教一下哪位高手知道JAVA的環境變數怎麼配置?讓它在DOS中運行,我下載的版本是jdk1.5.0_01,系統屬性環境變數中有一個用戶變數和系統變數,該配置在哪個變數中呢?
Windows下JAVA環境變數的設置祥解
Windows下JAVA用到的環境變數主要有3個,JAVA_HOME、CLASSPATH、PATH。下面逐個分析。
JAVA_HOME指向的是JDK的安裝路徑,如x:\JDK_1.4.2,在這路徑下你應該能夠找到bin、lib等目錄。值得一提的是,JDK的安裝路徑可以選擇任意磁碟目錄,不過建議你放的目錄層次淺一點,如果你放的目錄很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
那麼,下面的步驟和以後的應用你都要受累了,呵呵。設置方法:
JAVA_HOME=x:\JDK_1.4.2
PATH環境變數原來Windows裡面就有,你只需修改一下,使他指向JDK的bin目錄,這樣你在控制台下面編譯、執行程序時就不需要再鍵入一大串路徑了。設置方法是保留原來的PATH的內容,並在其中加上%JAVA_HOME%\bin
(注,如果你對DOS批處理不了解,你可能不明白%%引起來的內容是什麼意思;其實這里是引用上一步設定好的環境變數JAVA_HOME,你寫成x:\JDK_1.4.2也是可以的;你可以打開一個控制台窗口,輸入echo
%JAVA_HOME%來看一下你的設置結果) :
PATH=%JAVA_HOME%\bin;%PATH%
同樣,%PATH%是引用以前你設置的PATH環境變數,你照抄以前的值就行了。
CLASSPATH環境變數我放在最後面,是因為以後你出現的莫名其妙的怪問題80%以上都可能是由於CLASSPATH設置不對引起的,所以要加倍小心才行。
CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
首先要注意的是最前面的".\;",如果你看不清,我給你念念——句點反斜杠分號。這個是告訴JDK,搜索CLASS時先查找當前目錄的CLASS文件——為什麼這樣搞,這是由於LINUX的安全機制引起的,LINUX用戶很明白,WINDOWS用戶就很難理解(因為WINDOWS默認的搜索順序是先搜索當前目錄的,再搜索系統目錄的,再搜索PATH環境變數設定的)
,所以如果喜歡盤根究底的朋友不妨研究一下LINUX。
為什麼CLASSPATH後面指定了tools.jar這個具體文件?不指定行不行?顯然不行,行的話我還能這么羅索嘛!:)
這個是由java語言的import機制和jar機制決定的,你可以查資料解決。
呵呵,具體的設定方法: win2k\xp用戶右鍵點擊我的電腦->屬性->高級->環境變數,修改下面系統變數那個框里的值就行了。
win9x用戶修改autoexec.bat文件,在其末尾加入:
set JAVA_HOME=x:\JDK_1.4.2
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
返回頂部
--------------------------------------------------------------------------------
• C++和JAVA的分別?
JAVA和C++都是面向對象語言。也就是說,它們都能夠實現面向對象思想(封裝,繼乘,多態)。而由於c++為了照顧大量的C語言使用者,
而兼容了C,使得自身僅僅成為了帶類的C語言,多多少少影響了其面向對象的徹底性!JAVA則是完全的面向對象語言,它句法更清晰,規模更小,更易學。它是在對多種程序設計語言進行了深入細致研究的基礎上,據棄了其他語言的不足之處,從根本上解決了c++的固有缺陷。
Java和c++的相似之處多於不同之處,但兩種語言問幾處主要的不同使得Java更容易學習,並且編程環境更為簡單。
我在這里不能完全列出不同之處,僅列出比較顯著的區別:
1.指針
JAVA語言讓編程者無法找到指針來直接訪問內存無指針,並且增添了自動的內存管理功能,從而有效地防止了c/c++語言中指針操作失誤,如野指針所造成的系統崩潰。但也不是說JAVA沒有指針,虛擬機內部還是使用了指針,只是外人不得使用而已。這有利於Java程序的安全。
2.多重繼承
c++支持多重繼承,這是c++的一個特徵,它允許多父類派生一個類。盡管多重繼承功能很強,但使用復雜,而且會引起許多麻煩,編譯程序實現它也很不容易。Java不支持多重繼承,但允許一個類繼承多個介面(extends+implement),實現了c++多重繼承的功能,又避免了c++中的多重繼承實現方式帶來的諸多不便。
3.數據類型及類
Java是完全面向對象的語言,所有函數和變數部必須是類的一部分。除了基本數據類型之外,其餘的都作為類對象,包括數組。對象將數據和方法結合起來,把它們封裝在類中,這樣每個對象都可實現自己的特點和行為。而c++允許將函數和變數定義為全局的。此外,Java中取消了c/c++中的結構和聯合,消除了不必要的麻煩。
4.自動內存管理
Java程序中所有的對象都是用new操作符建立在內存堆棧上,這個操作符類似於c++的new操作符。下面的語句由一個建立了一個類Read的對象,然後調用該對象的work方法:
Read r=new Read();
r.work();
語句Read r=new Read();在堆棧結構上建立了一個Read的實例。Java自動進行無用內存回收操作,不需要程序員進行刪除。而c十十中必須由程序貝釋放內存資源,增加了程序設計者的負扔。Java中當一個對象不被再用到時,無用內存回收器將給它加上標簽以示刪除。JAVA里無用內存回收程序是以線程方式在後台運行的,利用空閑時間工作。
5.操作符重載
Java不支持操作符重載。操作符重載被認為是c十十的突出特徵,在Java中雖然類大體上可以實現這樣的功能,但操作符重載的方便性仍然丟失了不少。Java語言不支持操作符重載是為了保持Java語言盡可能簡單。
6.預處理功能
Java不支持預處理功能。c/c十十在編譯過程中都有一個預編澤階段,即眾所周知的預處理器。預處理器為開發人員提供了方便,但增加丁編譯的復雜性。JAVA虛擬機沒有預處理器,但它提供的引入語句(import)與c十十預處理器的功能類似。
7. Java不支持預設函數參數,而c十十支持
在c中,代碼組織在函數中,函數可以訪問程序的全局變數。c十十增加了類,提供了類演算法,該演算法是與類相連的函數,c十十類方法與Java類方法十分相似,然而,由於c十十仍然支持c,所以不能阻止c十十開發人員使用函數,結果函數和方法混合使用使得程序比較混亂。
Java沒有函數,作為一個比c十十更純的面向對象的語言,Java強迫開發人員把所有例行程序包括在類中,事實上,用方法實現例行程序可激勵開發人員更好地組織編碼。
8 字元串
c和c十十不支持字元串變數,在c和c十十程序中使用Null終止符代表字元串的結束,在Java中字元串是用類對象(strinR和stringBuffer)來實現的,這些類對象是Java語言的核心,用類對象實現字元串有以下幾個優點:
(1)在整個系統中建立字元串和訪問字元串元素的方法是一致的;
(2)J3陽字元串類是作為Java語言的一部分定義的,而不是作為外加的延伸部分;
(3)Java字元串執行運行時檢空,可幫助排除一些運行時發生的錯誤;
(4)可對字元串用「十」進行連接操作。
9「goto語句
「可怕」的goto語句是c和c++的「遺物」,它是該語言技術上的合法部分,引用goto語句引起了程序結構的混亂,不易理解,goto語句子要用於無條件轉移子程序和多結構分支技術。鑒於以廣理由,Java不提供goto語句,它雖然指定goto作為關鍵字,但不支持它的使用,使程序簡潔易讀。
l0.類型轉換
在c和c十十中有時出現數據類型的隱含轉換,這就涉及了自動強制類型轉換問題。例如,在c十十中可將一浮點值賦予整型變數,並去掉其尾數。Java不支持c十十中的自動強制類型轉換,如果需要,必須由程序顯式進行強制類型轉換。
11.異常
JAVA中的異常機制用於捕獲例外事件,增強系統容錯能力
try{//可能產生例外的代碼
}catch(exceptionType name){
//處理
}
其中exceptionType表示異常類型。而C++則沒有如此方便的機制。
參考資料:
返回頂部
--------------------------------------------------------------------------------
• 初學java用那本書好
學習一門新的知識,不可能指望只看一本,或者兩本書就能夠完全掌握。需要有一個循序漸進的閱讀過程。我推薦Oreilly出版的Java系列書籍。
在這里我只想補充一點看法,很多人學習Java是從《Thinking in Java》這本書入手的,但是我認為這本書是不適合初學者的。我認為正確的使用這本書的方法應該是作為輔助的讀物。《Thinking in Java》並不是在完整的介紹Java的整個體系,而是一種跳躍式的寫作方法,是一種類似tips的方法來對Java很多知識點進行了深入的分析和解釋。
對於初學者來說,最好是找一本Java入門的書籍,但是比較完整的循序的介紹Java的語法,面向對象的特性,核心類庫等等,在看這本書的同時,可以同步來看《Thinking in Java》,來加深對Java的理解和原理的運用,同時又可以完整的了解Java的整個體系。
對於Java的入門書籍,蔡學鏞推薦的是Oreilly的《Exploring Java, 2nd Edition》 或者《Java in a Nutshell,2nd Edition(針對C++背景)》,我並沒有看過這兩本書。其實我覺得電子工業出版社的《Java 2編程詳解》或者《Java 2從入門到精通》就很不錯。
在所有的Java書籍當中,其實最最有用的,並不是O'reilly的 Java Serials,真正最最有用處是JDK的Documentation!幾乎你想獲得的所有的知識在Documentation裡面全部都有,其中最主要的部分當然是Java基礎類庫的API文檔,是按照package來組織的,對於每一個class都有詳細的解釋,它的繼承關系,是否實現了某個介面,通常用在哪些場合,還可以查到它所有的public的屬性和方法,每個屬性的解釋,意義,每個方法的用途,調用的參數,參數的意義,返回值的類型,以及方法可能拋出的異常等等。可以這樣來說,所有關於Java編程方面的書籍其實都不過是在用比較通俗易懂的語言,和良好的組織方式來介紹Documentation裡面的某個package裡麵包含的一些類的用法而已。所以萬變不離其宗,如果你有足夠的能力來直接通過Documentation來學習Java的類庫,那麼基本上就不需要看其他的書籍了。除此之外,Documentation也是編程必備的手冊,我的桌面上有三個Documentation的快捷方式,分別是J2SDK1.4.1的Documentation,Servlet2.3的Documentation和J2SDKEE1.3.1的Documentation。有了這個三個Documentation,什麼其他的書籍都不需要了。
對於Java Web 編程來說,最核心的是要熟悉和掌握HTTP協議,這個就和Java無關了,在熟悉HTTP協議之後,就需要熟悉Java的實現HTTP協議的類庫,也就是Servlet API,所以最重要的東西就是Servlet API。當然對於初學者而言,直接通過Servlet API來學習Web編程有很大的難度,我推薦O'reilly的《Java Server Pages 》這本書來學習Web 編程。
EJB的書籍當中,《Enterprise JavaBeans, 2nd Edition》是一本很不錯的書, EJB的學習門檻是比較高,入門很難,但是這本書完全降低了學習的難度,特別重要的一點是,EJB的學習需要結合一種App Server的具體實現,所以在學習EJB的同時,必須同步的學習某種App Server,而這本書相關的出了三本書,分別是Weblogic6.1,Websphere4.0和JBoss3.0上面部署書中例子的實做。真是既有理論,又有實踐。在學習EJB的同時,可以邊看邊做,EJB的學習會變得很輕松。
但是這本書也有一個問題,就是版本比較舊,主要講EJB1.1規范和部分EJB2.0的規范。而Ed Roman寫的《Mastering EJB 2.0》這本書完全是根據EJB2.0規范寫的,深入淺出,覆蓋了EJB編程的各個方面,並且還有很多編程經驗tips,也是學習EJB非常推薦的書籍之一。
如果是結合Weblogic來學習J2EE的話,《J2EE應用與BEA Weblogic Server》絕對是首選讀物,雖然是講述的Weblogic6.0,仍然值得購買,這本書是BEA官方推薦的教材,作者也是BEA公司的工程師。現在中文版已經隨處可見了。這本書結合Weblogic介紹了J2EE各個方面的技術在Weblogic平台上的開發和部署,實踐指導意義非常強。
在掌握了Java平台基礎知識和J2EE方面的知識以後,更進一步的是學習如何運用OO的方法進行軟體的設計,那麼就一定要學習「設計模式」。Sun公司出版了一本《J2EE核心模式》,是每個開發Java企業平台軟體的架構師必備的書籍。這本書全面的介紹了J2EE體系架構的各種設計模式,是設計師的必讀書籍。
Java Learning Path(三)過程篇
每個人的學習方法是不同的,一個人的方法不見得適合另一個人,我只能是談自己的學習方法。因為我學習Java是完全自學的,從來沒有問過別人,所以學習的過程基本上完全是自己摸索出來的。我也不知道這種方法是否是比較好的方法,只能給大家提供一點參考了。
學習Java的第一步是安裝好JDK,寫一個Hello World,? 其實JDK的學習沒有那麼簡單,關於JDK有兩個問題是很容易一直困擾Java程序員的地方:一個是CLASSPATH的問題,其實從原理上來說,是要搞清楚JRE的ClassLoader是如何載入Class的;另一個問題是package和import問題,如何來尋找類的路徑問題。把這兩個問題摸索清楚了,就掃除了學習Java和使用JDK的最大障礙。推薦看一下王森的《Java深度歷險》,對這兩個問題進行了深入的探討。
第二步是學習Java的語法。Java的語法是類C++的,基本上主流的編程語言不是類C,就是類C++的,沒有什麼新東西,所以語法的學習,大概就是半天的時間足夠了。唯一需要注意的是有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什麼時候用,為什麼要用,怎麼用,這可能需要有人來指點一下,我當初是完全自己琢磨出來的,花了很久的時間。不過後來我看到《Thinking in Java》這本書上面是講了這些概念的。
第三步是學習Java的面向對象的編程語言的特性的地方。比如繼承,構造器,抽象類,介面,方法的多態,重載,覆蓋,Java的異常處理機制。對於一個沒有面向對象語言背景的人來說,我覺得這個過程需要花很長很長時間,因為學習Java之前沒有C++的經驗,只有C的經驗,我是大概花了一個月左右吧,才徹底把這些概念都搞清楚,把書上面的例子反復的揣摩,修改,嘗試,把那幾章內容反復的看過來,看過去,看了不下5遍,才徹底領悟了。不過我想如果有C++經驗的話,應該一兩天時間足夠了。那麼在這個過程中,可以多看看《Thinking in Java》這本書,對面向對象的講解非常透徹。可惜的是我學習的時候,並沒有看到這本書,所以自己花了大量的時間,通過自己的嘗試和揣摩來學會的。
第四步就是開始熟悉Java的類庫。Java的基礎類庫其實就是JDK安裝目錄下面jre\lib\rt.jar這個包。學習基礎類庫就是學習rt.jar。基礎類庫裡面的類非常非常多。據說有3000多個,我沒有統計過。但是真正對於我們來說最核心的只有4個,分別是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;
這四個包的學習,每個包的學習都可以寫成一本厚厚的教材,而O'reilly也確實是這樣做的。我覺得如果時間比較緊,是不可能通過讀四本書來學習。我覺得比較好的學習方法是這樣的:
首先要通讀整個package的框架,了解整個package的class,interface,exception的構成,最好是能夠找到介紹整個包框架的文章。這些專門介紹包的書籍的前幾章應該就是這些總體的框架內容介紹。
對包整體框架的把握並不是要熟悉每個類的用法,記住它有哪些屬性,方法。想記也記不住的。而是要知道包有哪些方面的類構成的,這些類的用途是什麼,最核心的幾個類分別是完成什麼功能的。我在給人培訓的時候一般是一次課講一個包,所以不可能詳細的介紹每個類的用法,但是我反復強調,我給你們講這些包的不是要告訴你們類的方法是怎麼調用的,也不要求你們記住類的方法調用,而是要你們了解,Java給我們提供了哪些類,每個類是用在什麼場合,當我遇到問題的時候,我知道哪個類,或者哪幾個類的組合可以解決我的問題,That'all!,當我們具體寫程序的時候,只要你知道該用哪個類來完成你的工作就足夠了。編碼的時候,具體的方法調用,是邊寫代碼,邊查Documentation,所有的東西都在Documentation裡面,不要求你一定記住,實際你也記不住3000多個類的總共將近10萬個方法調用。所以對每個包的總體框架的把握就變得極為重要。
第五步,通過上面的學習,如果學的比較扎實的話,就打好了Java的基礎了,剩下要做的工作是掃清Documentation裡面除了上面4個包之外的其他一些比較有用處的類。相信進展到這一步,Java的自學能力已經被培養出來了,可以到了直接學習Documentation的水平了。除了要做GUI編程之外,JDK裡面其他會有用處的包是這些:
java.text.
H. java, int如何轉float,
int是小數據,float是大數據,小數據到大數據轉化不會報錯。
這里我們所說的「大」與「小」,並不是指佔用位元組的多少,而是指表示值的范圍的大小。
,當一個較「小」數據與一個較「大」的數據一起運算時,系統將自動將「小」數據轉換成「大」數據,由「小」到「大」分別為
(byte,short,char)--int--long--float—double。