Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
?本文來自:曹勝歡博客專欄。轉載請注明出處:http://blog.csdn.net/csh624366188?
?
?????? 今天進行第一塊的復習,首先是環境的搭建,java開發的首先任務就是環境變量的配置和環境的搭建,雖然現在大多數的開發工具都已經集成了這些,但是對于一個初學者來說,了解這些還是有些必要的,首先先配置一下JDK,下載JDK在sun公司的官網里下載即可(雖然被oracle收購了,但還是習慣叫他sun公司),找到jdk安裝路徑,然后把路徑黏貼到環境變量path里面,有圖有真相,上圖:
然后在dos命令里面測試一下,如果有下面結果即為配置成功:
?????環境變量配置好之后,我們就可以進行我們的java開發之旅了,下面進行java基本語法的復習了:
????一:首先說一下java中的語句規則:
1.java每行代碼以;結尾。
2.Java中的注釋有:
(1)//?注釋一行
以“//”開始,終止于行尾,一般作單行注釋,可放在語句的后面
(2)/*……*/?一行或多行注釋
以“/*”開始,最后以“*/”結束,中間可寫多行。
(3)/**……*/
以“/**”開始,最后以“*/”結束,中間可寫多行。這種注釋主要是為支持JDK?工具javadoc而采用的。
3.Java中的合法標示符要符合一下規則:1
1)要以大小寫字母或者美元符號或者下劃線開頭,不能以數字開頭
2)標示符命名不能用關鍵字,關鍵字是java內部所用到的標示符,為了避免混淆,所以不能用。
3)類,變量,方法名命名盡量有一定規則,不要隨便命名,雖然系統不會報錯,但是為了項目開發后期的維護,所以盡量起比較有意義的名字,并且命名要符合一定的規則,如駝峰規則。
????二:java基本數據類型
Java數據類型被分為:基本數據類型和引用數據類型。
Java中有8中基本數據類型:
類型??????????????位長/b????默認值????取值范圍
布爾型?(boolean)????1???????false??????true??false
字節型(byte?)??????8????????0???????-128~127
字符型?(char)????????16??‘\u0000’??‘\u0000’~’\uffff’即0~65535
短整型(short)????????16???????0????????-32768~32767
整型(int)????????????32???????0????????-231~231-1
長整型(long)??????64???????0????????-263~263-1
單精度(float)??????32???????0.0???????+-1.4E-45?或+-3.4028235E+38
雙精度(double)????64???????0.0???????+-4.9E-324?或+-1.797693134862315E+308
注:String類型不是基本數據類型,它被定義為類,屬于引用數據類型。,由于字符串是常用的數據類型。Java提供了對String類型特殊操作,直接引用,例如:String?s="hello??world";
三:引用類型
引用類型是一個對象類型的,它的值是指向內存空間的引用,就是地址,所指向的內存中保存著變量所表示的一個值或一組值。很好理解吧,因為一個對象,比如說一個人,不可能是個數字也不可能是個字符啊,所以要想找它的話只能找它的地址了。
接下來看看基本類型和引用類型變量的不同處理吧。基本類型自然是簡單,聲明是自然系統就給它空間了。例如,
????int?baijq;??
????baijq=250;?//聲明變量baijq的同時,系統給baijq分配了空間。
????引用類型就不是了,只給變量分配了引用空間,數據空間沒有分配,因為誰都不知道數據是什么啊,整數,字符?我們看一個錯誤的例子:
????MyDate?today;
????today.day?=?4;?//發生錯誤,因為today對象的數據空間未分配。
????那我們怎么給它賦值啊?引用類型變量在聲明后必須通過實例化開辟數據空間,才能對變量所指向的對象進行訪問。舉個例子:
????MyDate?today;????????????//將變量分配一個保存引用的空間
????today?=?new?MyDate();?????//這句話是2步,首先執行new?MyDate(),給today變量開辟數據空間,然后再執行賦值操作。
????四:定義變/常量和變量的初始化
Java定義變量結構:類型??變量名,這里的變量名要符合標示符規則
1.變量的聲明
格式:類型?變量名[,變量名]=初值,…?;
賦值:[類型]?變量名=值
如:int?a=5?,?b=6?,?c?,?d?;
說明:
(1)變量名必須在作用域中是唯一的,不同作用域中才允許相同名字的變量出現;
(2)只要在同一代碼塊沒有同名的變量名,可以在程序中任何地方定義變量,一個代碼塊就是兩個相對的“{?}”之間部分。
2.變量的使用范圍
每個變量的使用范圍只在定義它的代碼塊中,包括這個代碼塊中包含的代碼塊。
在類開始處聲明的變量是成員變量,作用范圍在整個類;
在方法和塊中聲明的變量是局部變量,作用范圍到它的“}”;
3.變量類型的轉換
Java?可以將低精度的數字賦值給高精度的數字型變量,反之則需要強制類型轉換。
強制轉換格式:(數據類型)數據表達式
字節型?短整型?字符型?整型?長整型?單精度實型?雙精度實型
轉化規律:由低到高
變量與存儲器有著直接關系,定義一個變量就是要編譯器分配所需要的內存空間,分配多少空間,這就是根據我們所定義的變量類型所決定的。變量名實際上是代表所分配空間的內存首地址
??
常量
Java中的常量值是用文字串表示的,它區分為不同的類型,如整型常量123,實型常1.23,
字符常量‘a’,布爾常量true、false以及字符串常量“This?is?a?constant?string”。
Java?的常量用final?說明,約定常量名一般全部使用大寫字母,如果是多個單詞組合在一起的,單詞之間用下劃線連接,常量在程序執行時不可更改。
如:final?int?i=1;
????i=i+1;?//錯,i?是final(常量),不可更改值
例如:final?double?IP?=?3.14159?D
說明:默認類型為64?位double?雙精度類型(D?或d),數字后面加F?或f?則是32?位float?單
精度(實數)類型
五:運算符
1、賦值運算符
????賦值運算符用于把一個數賦予一個變量。賦值運算符兩邊的類型不一致時,那么如果左側的數據類型的級別高,則右邊的數據將轉換成左邊的數據類型在賦予左邊的變量,否則需要強制類型轉換。
賦值運算符包括=?、+=、-=、*=、%=、/=等。
2、算術運算符
算數運算符用于對整型數或者浮點數進行運算,java語言中的算術運算符包括二元運算符和一元運算符。所謂的幾元運算符即參加運算的操作數的個數。
1)?二元運算符
Java的二元運算符有+(加)、-(減)、*(乘)、/(除)、%(取余數)。
2)?一元運算符
Java的一元運算符有++(自加)、--(自減)
3、關系運算符
關系運算符用來比較兩個值,返回布爾類型的值true或false。
等于?不等于?小于?小于等于?大于等于?大于
==????!=???<?????<=???????>=??????>
4、條件運算符
條件運算符的作用是根據表達式的真假決定變量的值。
1>?格式:條件表達式???表達式2?:表達式3
2>?功能:條件表達式為true,取“表達式2”值,為false,取“表達式3”的值
例:?int?a=0x10?,?b=010?,?max?;
max=a>b???a?:?b?;
System.out.println(max)?;?//?輸出16
5、?邏輯運算符
運算符????結果
~????????按位非(NOT)(一元運算)
&????????按位與(AND)?
|????????按位或(OR)?
^????????按位異或(XOR)
>>???????右移
>>>?????右移,左邊空出的位以0填充?;無符號右移
<<??????左移?
&=??????按位與賦值?
|=??????按位或賦值
^=??????按位異或賦值
>>=?????右移賦值
>>>=????右移賦值,左邊空出的位以0填充?;無符號左移
<<=?????左移賦值
按位非(NOT)?
按位非也叫做補,一元運算符NOT“~”是對其運算數的每一位取反。例如,數字42,它的二進制代碼為:?00101010?
經過按位非運算成為?11010101?
六:流程控制語句
分支語句
1.簡單的if.....else語句
If(條件){
如果條件為真、、、、
}
Else{
如果條件為假、、、、、、
}
2、只有if的語句:
If(條件){
如果條件為真,執行。。。如果為假,不執行
}
3、switch語句是多分枝語句,基本語法:
Switch(expr){
Case??value1:
Statements;
Break;
........
Case??valueN:
Statements;
Break;
Default:
Statements;
Break;
}
注:1.expr必須是與int類型兼容的類型,即為byte,short,char和int類型中的其中一種
?2.Case??valueN:中valueN也必須是int類型兼容的類型,并且必須是常量
3.各個case子句的valueN表達式的值不同
4.Switch語句中只能有一個default子句。
循環語句
1.while語句2.do......while語句(此處省略三百字)
3.for語句
基本格式:for(初始化;循環條件;迭代部分)
功能:(1)第一次進入for?循環時,對循環控制變量賦初值;
(2)?根據判斷條件檢查是否要繼續執行循環。為真執行循環體內語句塊,為假則結束循環;
(3)執行完循環體內語句后,系統根據“循環控制變量增減方式”改變控制變量值,再回
(3)?到步驟(2)根據判斷條件檢查是否要繼續執行循環。
4.流程跳轉語句:break,continue和return語句用來控制流程的跳轉
1)break:從switch語句,循環語句或標號標識的代碼塊中退出
2)continue:跳出本次循環,執行下次循環,或執行標號標識的循環體;
3)return:退出本方法,跳到上層調用方法。
4)Break語句和continue語句可以與標號聯合使用。標號用來標識程序中的語句,標號的名字可以是任意的合法標識符。
帶有標號的循環體:
Loop:switch(expr){
}
七:字符串
字符串的幾種用法:
拼接????直接用“+”把兩個字符串拼接起來
例如:String?firstName?=?“li”;
??????String?secondName?=?“ming”;
??????String?fullName?=?firstName+secondName;
檢測字符串是否相等???檢測兩個字符串內容是否相等時使用“equals”;比較兩個字符串的引用是否相等時用“==”
得到字符串的長度?????字符串變量名.length();
String,StringBuffer,StringBuild區別
String?字符串常量
StringBuffer?字符串變量(線程安全)
StringBuilder?字符串變量(非線程安全)
簡要的說,?String?類型和?StringBuffer?類型的主要性能區別其實在于?String?是不可變的對象,?因此在每次對?String?類型進行改變的時候其實都等同于生成了一個新的?String?對象,然后將指針指向新的?String?對象,所以經常改變內容的字符串最好不要用?String?,因為每次生成對象都會對系統性能產生影響,特別當內存中無引用對象多了以后,?JVM?的?GC?就會開始工作,那速度是一定會相當慢的。
而如果是使用?StringBuffer?類則結果就不一樣了,每次結果都會對?StringBuffer?對象本身進行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用?StringBuffer?,特別是字符串對象經常改變的情況下。而在某些特別情況下,?String?對象的字符串拼接其實是被?JVM?解釋成了?StringBuffer?對象的拼接,所以這些時候?String?對象的速度并不會比?StringBuffer?對象慢,而特別是以下的字符串對象生成中,?String?效率是遠要比?StringBuffer?快的:
String?S1?=?“This?is?only?a”?+?“?simple”?+?“?test”;
StringBuffer?Sb?=?new?StringBuilder(“This?is?only?a”).append(“?simple”).append(“?test”);
你會很驚訝的發現,生成?String?S1?對象的速度簡直太快了,而這個時候?StringBuffer?居然速度上根本一點都不占優勢。其實這是?JVM?的一個把戲,在?JVM?眼里,這個
String?S1?=?“This?is?only?a”?+?“?simple”?+?“test”;?其實就是:
String?S1?=?“This?is?only?a?simple?test”;?所以當然不需要太多的時間了。但大家這里要注意的是,如果你的字符串是來自另外的?String?對象的話,速度就沒那么快了,譬如:
String?S2?=?“This?is?only?a”;
String?S3?=?“?simple”;
String?S4?=?“?test”;
String?S1?=?S2?+S3?+?S4;
這時候?JVM?會規規矩矩的按照原來的方式去做
在大部分情況下?StringBuffer?>?String
StringBuffer
Java.lang.StringBuffer線程安全的可變字符序列。一個類似于?String?的字符串緩沖區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。
可將字符串緩沖區安全地用于多個線程。可以在必要時對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發生的,該順序與所涉及的每個線程進行的方法調用順序一致。
StringBuffer?上的主要操作是?append?和?insert?方法,可重載這些方法,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串,然后將該字符串的字符追加或插入到字符串緩沖區中。?append?方法始終將這些字符添加到緩沖區的末端;而?insert?方法則在指定的點添加字符。
例如,如果?z?引用一個當前內容是“start”的字符串緩沖區對象,則此方法調用?z.append("le")?會使字符串緩沖區包含“startle”,而?z.insert(4,?"le")?將更改字符串緩沖區,使之包含“starlet”。
在大部分情況下?StringBuilder?>?StringBufferjava.lang.StringBuilder
java.lang.StringBuilder?一個可變的字符序列是5.0新增的。此類提供一個與?StringBuffer?兼容的?API,但不保證同步。該類被設計用作?StringBuffer?的一個簡易替換,用在字符串緩沖區被單個線程使用的時候(這種情況很普遍)。如果可能,建議優先采用該類,因為在大多數實現中,它比?StringBuffer?要快。兩者的方法基本相同。
?八、數組
數組是有序數據的集合,數組中的每個元素具有相同的數組名,根據數組名和下標來唯一確定數組中的元素。使用時要先聲明后創建
1、一位數組
1)?一維數組的聲明
格式:?數據類型?數組名[?]?或?數據類型?[?]數組名
例:?int?a[]?;?String?s[]?;?char?[]c?;
說明:定義數組,并不為數據元素分配內存,因此“[?]”中不用指出數組中元素個數。
2?)一維數組的創建與賦值
創建數組并不是定義數組,而是在數組定義后,為數組分配存儲空間,同時對數組元素進行初始化
(1)用運算符new?分配內存再賦值
格式:數組名=new?數據類型[size]
例:int?a[]?;
a=new?int[3]?;?//?產生a[0]?,?a[1]?,?a[2]?三個元素
a[0]=8?;?a[1]=8?;?a[2]=8?;
3)直接賦初值并定義數組的大小
例:int?i[]={4,5,010,7,3,2,9}?;
String?names[]={“張三”,”李四”,”王五”,”宋七”}?;
4)測試數組長度(補充)
格式:數組名.length
char?c[]={‘a’,’b’,’c’,’北’,’京’}?;
System.out.print(c.length)?;?????//?輸出5
2、多維數組
以二維數組為例
例:int?d[][]?;?//?定義一個二維數組
d=new?int[3][4]?;?//?分配3?行4?列數組內存
int?a[][]=new?int[2][]?;
a[0]=new?int[3]?;?//?第二維第一個元素指向3?個整型數
a[1]=new?int[5]?;?//?第二維第一個元素指向5?個整型數
注意:Java?可以第二維不等長
int?i[][]={{0},{1,4,5},{75,6},{8,50,4,7}}?;?//定義和賦初值在一起
下面數組定義正吳的判斷
int?a[][]=new?int[10,10]?//錯
int?a[10][10]=new?int[][]?//錯
int?a[][]=new?int[10][10]?//對
int?[]a[]=new?int[10][10]?//對
int?[][]a=new?int[10][10]?//對
注意:java中二維數組分配空間是第二維可以為空,但是第一維必須分配內存。
???
最后以一個經典的helloworld代碼結束本章的總結
public?class?HelloWorldApp{
public?static?void?main(String[]?args){
System.out,println(“hello?world!”);
}
}
?本文來自:曹勝歡博客專欄。轉載請注明出處:http://blog.csdn.net/csh624366188
轉載于:https://www.cnblogs.com/javait03/archive/2012/02/22/2403796.html
總結
以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SFIM起航——源于无聊
- 下一篇: ExtJS之 标准布局类(针对于pane