Java基礎(chǔ)——Java開(kāi)發(fā)前奏
石拐網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
Java的特點(diǎn)
Java最主要的特點(diǎn)是:一次編譯,到處運(yùn)行(Write?Once,?Run?Anywhere.)。
原理:Java源程序經(jīng)編譯后生成.class字節(jié)碼文件,.class文件由Java虛擬機(jī)(JVM)解釋執(zhí)行。不同的操作系統(tǒng)下,只要有相應(yīng)的Java字節(jié)碼解釋程序,.class文件就能夠運(yùn)行,這是Java跨平臺(tái)性的根本。c和java編程與執(zhí)行的過(guò)程如下圖所示:
Java的內(nèi)涵
1、是一種編程語(yǔ)言
2、是一套開(kāi)發(fā)工具
3、是一個(gè)運(yùn)行環(huán)境
Java應(yīng)用平臺(tái)
1、J2EE(Java?2?Platform?Enterprise?Edition)——用于企業(yè)級(jí)應(yīng)用程序的開(kāi)發(fā)
2、J2SE(Java?2?Platform?Standard?Edition)——用于普通標(biāo)準(zhǔn)應(yīng)用程序的開(kāi)發(fā)
3、J2ME(Java?2?Platform?Micro?Edition)——用于小型消費(fèi)類電子產(chǎn)品或嵌入式系統(tǒng)的開(kāi)發(fā)
J2SE包括4部分——JVM、JRE、JDK與Java語(yǔ)言。
環(huán)境變量的設(shè)置
環(huán)境變量——在操作系統(tǒng)中定義的變量,可供操作系統(tǒng)上所有的應(yīng)用程序使用。
1、查看環(huán)境變量
a.命令提示行:環(huán)境變量的命令——set?(環(huán)境變量名)
b.窗口方式:我的電腦-屬性-高級(jí)-環(huán)境變量
2、設(shè)置path環(huán)境變量
path環(huán)境變量的作用:設(shè)置操作系統(tǒng)尋找和執(zhí)行應(yīng)用程序的路徑。
JAVA_HOME:C:\Program?Files\Java\jdk1.6.0_14
path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
3、設(shè)置classpath環(huán)境變量
classpath環(huán)境變量的作用:讓Java執(zhí)行環(huán)境找到指定的java程序(.class文件)。
classpath:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
注意:a.%JAVA_HOME%前面有“.;”,“.”表示當(dāng)前目錄,兩個(gè)路徑之間用“;”隔開(kāi)。
b.設(shè)置classpath的路徑中不能有空格,也不能有中文字符。
JVM的運(yùn)行過(guò)程
Java反編譯工具——JAD、FrontEnd
Java開(kāi)發(fā)工具
1、記事本
注意保存時(shí)文件名應(yīng)為*.java。
2、UltraEdit、EditPlus
使用EditPlus編輯和編譯Java程序,需要進(jìn)行相應(yīng)配置。選擇“工具”-“參數(shù)選擇”-“工具”-“用戶工具”-“添加工具”-“應(yīng)用程序”。首先設(shè)置“javac”的參數(shù),具體如下圖,其中“命令”為javac.exe文件的地址。
然后設(shè)置“java”的參數(shù),如下圖所示,其中“命令”為java.exe文件的路徑。
設(shè)置好后默認(rèn)“javac”工具的快捷鍵為Ctrl+1,“java”工具的快捷鍵為Ctrl+2。當(dāng)編輯好Java源程序后,使用Ctrl+1即可對(duì)其進(jìn)行編譯,然后按Ctrl+2運(yùn)行程序。如下圖所示:
3、集成開(kāi)發(fā)環(huán)境——Eclipse、MyEclipse、JBuilder等。
關(guān)于Eclipse和MyEclipse,剛用的時(shí)候感覺(jué)二者差不多,查了資料才知道Eclipse?是基礎(chǔ),如同操作系統(tǒng);而MyEclipse是在Eclipse上面運(yùn)行的程序,不過(guò)進(jìn)行了增強(qiáng)并提供了新功能。
以前用過(guò)Microsoft的Visual?Studio?2005,個(gè)人感覺(jué)VS2005是一個(gè)功能非常強(qiáng)大的集成開(kāi)發(fā)環(huán)境,不過(guò).NET和Java畢竟不是一家人,學(xué)Java還是要用Eclipse的。
JDK中的常用包
1、java.lang——包含一些Java語(yǔ)言的核心類,如String、Math、Thread、System、Integer類等。
2、java.awt——包含構(gòu)成抽象窗口工具集的多個(gè)類,用來(lái)構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。
3、java.applet——包含applet運(yùn)行所需的一些類。
4、java.net——包含執(zhí)行與網(wǎng)絡(luò)相關(guān)操作的類。
5、java.io——包含能提供多種輸入/輸出功能的類。
6、java.util——包含一些實(shí)用工具類。
Java的命名習(xí)慣
1、包名中的字母一律小寫。如:xxxyyyzzz。
2、類名、接口名應(yīng)使用名詞,每個(gè)單詞的首字母大寫。如:XxxYyyZzz。
3、方法名,第一個(gè)單詞小寫,后面每個(gè)單詞的首字母大寫。如:xxxYyyZzz。
4、變量名,第一個(gè)單詞小寫,后面每個(gè)單詞的首字母大寫。
5、常量名中的每個(gè)字母一律大寫。如:XXXYYYZZZ。
Java基礎(chǔ)——Java語(yǔ)法基礎(chǔ)(1)
Java代碼基本格式
Java中所有程序代碼都必須存在于一個(gè)類中,用class關(guān)鍵字定義類,在class之前可以有一些修飾符。格式如下:
修飾符?class?類名
{
程序代碼
}
注:
1、Java是嚴(yán)格區(qū)分大小寫的。
2、Java程序中一句連續(xù)的字符串不能分開(kāi)在兩行中寫。
Java程序的注釋
Java里的注釋有三種類型:
1、單行注釋
在注釋內(nèi)容前面加“//”,格式為:
代碼;??//注釋內(nèi)容
2、多行注釋
以斜杠加星號(hào)開(kāi)頭,以星號(hào)加斜杠結(jié)尾。
3、文檔注釋
以斜杠加兩個(gè)星號(hào)開(kāi)頭,以一個(gè)星號(hào)加斜杠結(jié)束。
用這種方法注釋的內(nèi)容會(huì)被解釋成程序的正式文檔,并能包含進(jìn)諸如javadoc之類的工具程序生成的文檔里,用以說(shuō)明該程序的層次結(jié)構(gòu)及其方法。
補(bǔ)充:
1、多行注釋中可以嵌套“//”注釋,但不能嵌套多行注釋符號(hào)。
2、程序注釋一般占程序代碼總量的20%-50%,“可讀性第一,效率第二”。
Java中的標(biāo)識(shí)符
Java中的包、類、方法、參數(shù)、變量的名字,可以由任意順序的大小寫字母、數(shù)字、下劃線(_)、美元符號(hào)($)組成,但不能以數(shù)字開(kāi)頭,不能是Java中的保留關(guān)鍵字。
Java的關(guān)鍵字
1、用于類和接口的聲明:class,?extends,?implements,?interface
2、包引入和包聲明:import,?package
3、數(shù)據(jù)類型:byte,?boolean,?char,?double,?int,?long,?float,?short
4、某些數(shù)據(jù)類型的可選值:flase,?ture,?null
5、流程控制:break,?case,?continue,?default,?do,?else,?for,?if,?return,?switch,?while
6、異常處理:catch,?finally,?throw,?throws,?try
7、修飾符:abstract,?final,?native,?private,?protected,?public,?static,?synchronilzed,?transient,?volatitle
8、操作符:instanceof
9、創(chuàng)建對(duì)象:?new
10、引用:this,?supper
11、方法返回類型:void
12、保留字:const,?goto
Java中的常量
1、整形常量
十進(jìn)制
十六進(jìn)制——以0x或0X開(kāi)頭
八進(jìn)制——以0開(kāi)頭
長(zhǎng)整形——以L(l)結(jié)尾
2、浮點(diǎn)數(shù)常量
單精度浮點(diǎn)數(shù)——后面加f(F)
雙精度浮點(diǎn)數(shù)——后面加d(D)
注:
a.小數(shù)常量的默認(rèn)類型是double型,所以float類型常量后一定要加f(F)。
b.浮點(diǎn)數(shù)常量可以用指數(shù)形式表示,如5.022e+23f
3、布爾常量
true或false
4、字符常量
由英文字母、數(shù)字、轉(zhuǎn)義序列、特殊字符等的字符所表示,如'a'、'\t'等。
Java中的字符占兩個(gè)字節(jié),是用Unicode碼表示的,也可以使用'\u'加Unicode碼值來(lái)表示對(duì)應(yīng)字符,如'\u0027'。
常用的轉(zhuǎn)義字符有:
\t——表示接受鍵盤輸入,相當(dāng)于按了一下回車鍵
\n——表示換行
\t——表示制表符,相當(dāng)于Tab鍵
\b——表示退格鍵,相當(dāng)于Back?Space鍵
\'——表示單引號(hào)
\”——表示雙引號(hào)
\\——表示反斜杠“\”
5、字符串常量
字符串常量用雙引號(hào)括起來(lái)。
6、null常量
null常量表示對(duì)象的引用為空。
Java的變量類型
基本數(shù)據(jù)類型之間的轉(zhuǎn)換
1、自動(dòng)類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)
條件:
a.兩種類型彼此兼容
b.目標(biāo)類型的取值范圍要大于源類型
2、強(qiáng)制類型轉(zhuǎn)換(顯示類型轉(zhuǎn)換)
格式:目標(biāo)類型?常量?=?(目標(biāo)類型)值
注:字符串可以使用加號(hào)“+”同其他的數(shù)據(jù)類型相連而形成一個(gè)新的字符串。
變量的作用域
代碼塊決定了變量的作用域,作用域決定了變量的可見(jiàn)性和存在時(shí)間。
局部變量
在一個(gè)函數(shù)或函數(shù)里面的代碼塊中定義的變量稱為局部變量。
局部變量在進(jìn)行取值操作前必須被初始化或進(jìn)行過(guò)賦值操作。
函數(shù)
1、定義函數(shù)的格式
返回值類型?函數(shù)名(參數(shù)類型?形式參數(shù)1,參數(shù)類型形式參數(shù)2,...)
{
程序代碼
return?返回值;
}
2、函數(shù)的重載
函數(shù)的重載就是在一個(gè)類中可以同時(shí)存在一個(gè)以上的同名函數(shù),只要它們的參數(shù)個(gè)數(shù)或類型不同即可。
Java基礎(chǔ)——Java語(yǔ)法基礎(chǔ)(2)——運(yùn)算符
Java中的運(yùn)算符
1、算術(shù)運(yùn)算符
a.字符串?+?其他類型?=?字符串
b.如果對(duì)負(fù)數(shù)求余,可以把除數(shù)負(fù)號(hào)忽略不計(jì),如5?%?-1?=?1。但如果被除數(shù)是負(fù)數(shù)就另當(dāng)別論了。
2、賦值運(yùn)算符
a.在Java中,可以把賦值語(yǔ)句連在一起,如:x?=?y?=?z?=?5;
b.x?+=?y相當(dāng)于x?=?x?+?y
3、比較運(yùn)算符
a.要注意比較運(yùn)算符“==”和賦值運(yùn)算符“=”的區(qū)別,特別是布爾型變量進(jìn)行比較時(shí)。
b.可以將比較運(yùn)算的表達(dá)式寫為“false?==?變量”的形式,以防止誤寫為賦值運(yùn)算。
4、邏輯運(yùn)算符
a.邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表達(dá)式進(jìn)行運(yùn)算,運(yùn)算的結(jié)果都是boolean型?。
b.“”和“”的區(qū)別在于,如果使用前者連接,那么無(wú)論任何情況,“”兩邊的表達(dá)式都會(huì)參與計(jì)算。如果使用后者連接,當(dāng)“”的左邊為false,則將不會(huì)計(jì)算其右邊的表達(dá)式。“|”和“||”的區(qū)別與“”和“”的區(qū)別一樣。
5、位運(yùn)算符
位運(yùn)算——對(duì)數(shù)據(jù)按二進(jìn)制位進(jìn)行移位操作。
適用類型:byte,?short,?char,?int,?long
位運(yùn)算包括:
位與
|?位或
^?位異或
左移,左移n位相當(dāng)于乘以2的n次方
右移,右移n位相當(dāng)于除以2的n次方
無(wú)符號(hào)右移
注:
a.位運(yùn)算符也可以與“=”賦值運(yùn)算符組合產(chǎn)生新的賦值運(yùn)算符,如:=,?=等。
b.移位不會(huì)改變變量本身的值,如a1在一行語(yǔ)句中單獨(dú)存在毫無(wú)意義。
c.對(duì)低于int型的操作數(shù)將先自動(dòng)轉(zhuǎn)換為int型再移位;對(duì)int型整數(shù)移位ab,系統(tǒng)先將b對(duì)32取模,得到的結(jié)果才是真正移位的位數(shù);對(duì)于long型整數(shù)移位時(shí)則是先將移位位數(shù)對(duì)64取模。
運(yùn)算符的優(yōu)先級(jí)
編程技巧:
1、不要在一行中編寫太復(fù)雜的表達(dá)式,可以將其分解為幾條語(yǔ)句。
2、多用括號(hào)。
Java基礎(chǔ)——Java語(yǔ)法基礎(chǔ)(3)
程序控制流程
1、順序結(jié)構(gòu)
按順序執(zhí)行
2、if條件語(yǔ)句
a.if...
b.if...else...
可簡(jiǎn)寫為:變量?=?布爾表達(dá)式??語(yǔ)句1:語(yǔ)句2;
c.if...else?if...else...
3、switch選擇語(yǔ)句
switch(表達(dá)式)
{
case?取值1:
語(yǔ)句塊1;
break;
...
case?取值n:
語(yǔ)句塊n;
break;
default:
語(yǔ)句塊n+1;
break;
}
4、while循環(huán)語(yǔ)句
while(條件表達(dá)式)
{
執(zhí)行語(yǔ)句
}
5、do?while循環(huán)語(yǔ)句
do
{
執(zhí)行語(yǔ)句
}while(條件表達(dá)式)
6、for循環(huán)語(yǔ)句
for(初始化表達(dá)式;循環(huán)條件表達(dá)式;循環(huán)后操作表達(dá)式)
{
執(zhí)行語(yǔ)句
}
7、增強(qiáng)for循環(huán)
for?(循環(huán)變量類型?循環(huán)變量名稱:?要被遍歷的對(duì)象)
{
執(zhí)行語(yǔ)句
}
8、break與continue語(yǔ)句
a.一個(gè)無(wú)標(biāo)號(hào)的break語(yǔ)句會(huì)把控制傳回當(dāng)前最內(nèi)層循環(huán)(while,do,for,switch)的下一條語(yǔ)句。
b.無(wú)標(biāo)號(hào)的continue語(yǔ)句的作用是跳過(guò)當(dāng)前循環(huán)的剩余語(yǔ)句塊,接著執(zhí)行下一次循環(huán)。
數(shù)組
1、數(shù)組的定義
如:int[]?x?=?new?int[100];
或int?x[]?=?new?int[100];
2、數(shù)組的靜態(tài)初始化
如:int[]?aa?=?new?int[]?{3,4,5};
3、多維數(shù)據(jù)
如:
int[][]?xx?=?new?int[3][];
xx[0]?=?new?int[3];
xx[1]?=?new?int[2];
4、一些與數(shù)組相關(guān)的函數(shù)
a.?System.arraycopy(Object?src,int?srcPos,Object?dest,int?destPos,int?length)復(fù)制數(shù)組,將源數(shù)組srcPos開(kāi)始的length個(gè)元素從目標(biāo)數(shù)組的destPos位置開(kāi)始存儲(chǔ)。
b.?Array.sort()數(shù)組升序排序
最簡(jiǎn)單的java代碼肯定就是這個(gè)了,如下:
public class MyFirstApp
{
public static void main(String[] args)
{
System.out.print("Hello world");
}
}
“hello world”就是應(yīng)該是所有學(xué)java的新手看的第一個(gè)代碼了。如果是零基礎(chǔ)的新手朋友們可以來(lái)我們的java實(shí)驗(yàn)班試聽(tīng),有免費(fèi)的試聽(tīng)課程幫助學(xué)習(xí)java必備基礎(chǔ)知識(shí),有助教老師為零基礎(chǔ)的人提供個(gè)人學(xué)習(xí)方案,學(xué)習(xí)完成后有考評(píng)團(tuán)進(jìn)行專業(yè)測(cè)試,幫助測(cè)評(píng)學(xué)員是否適合繼續(xù)學(xué)習(xí)java,15天內(nèi)免費(fèi)幫助來(lái)報(bào)名體驗(yàn)實(shí)驗(yàn)班的新手快速入門java,更好的學(xué)習(xí)java!
package com.regex;
import java.io.*;
import java.net.URLDecoder;
import java.util.regex.*;
public class Regex {
private int REMARK=0;
private int LOGIC=0;
private int PHYSIC=0;
boolean start=false;
/**
* @param args
*/
public static void main(String[] args) { //測(cè)試方法
// TODO Auto-generated method stub
Regex re=new Regex();
re.regCount("Regex.java");
System.out.println("remark Line: "+re.REMARK);
System.out.println("logic Line: "+re.LOGIC);
System.out.println("physic Line: "+re.PHYSIC);
}/**
* @author BlueDance
* @param s
* @deprecated count
*/
public void regCount(String s){
String url=null;
try {
url=URLDecoder.decode(this.getClass().getResource(s).getPath(),"UTF-8");
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
try {
BufferedReader br=new BufferedReader(new FileReader(new File(url)));
String s1=null;
while((s1=br.readLine())!=null){
PHYSIC++;
if(CheckChar(s1)==1){
REMARK++;
System.out.println("純注釋行:"+s1);
}
if(CheckChar(s1)==2){
LOGIC++;
REMARK++;
System.out.println("非純注釋行:"+s1);
}
if(CheckChar(s1)==3)
LOGIC++;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
/**
*
* @param s
* @return int
* @version check s
*/
public int CheckChar(String s){
String s1=null;
if(s!=null)
s1=s.trim();
//System.out.println(regCheck(s1,re));
if(regCheck(s1,"(//.*)")) //判斷//開(kāi)頭的為純注釋行
return 1;
if(regCheck(s1,"(.*[;{})] *//.*)")) //判斷不是//開(kāi)頭的非純注釋行
return 2;
if(regCheck(s1,"(//*.*)")){ //判斷/*開(kāi)頭的純注釋行
start=true;
return 1;
}
if(regCheck(s1,"(.*[;{})]//*.*)")){ //判斷不是/*開(kāi)頭的非純注釋行
start=true;
return 2;
}
if(regCheck(s1,"(.* */*/)")){ //判斷*/結(jié)尾的純注釋行
start=false;
return 1;
}
if(regCheck(s1,"(.* */*/.*)")!strCheck(s1)){ //判斷不是*/結(jié)尾的非純注釋行
if(strCheck(s1)){
start=false;
return 2;
}
}
if(start==true) //狀態(tài)代碼,start即/*開(kāi)始時(shí)start=true*/結(jié)束時(shí)為false
return 1;
return 3;//ssssllll
}//aeee
/**
*
* @param s
* @param re
* @return boolean
*/
public boolean regCheck(String s,String re){ //正則表達(dá)試判斷方法
return Pattern.matches(re,s);
}
public boolean strCheck(String s){ //中間有*/的字符判斷 此方法最關(guān)鍵
if(s.indexOf("*/")0){
int count=0;
String y[]=s.split("/*/");
boolean boo[]=new boolean[y.length];
for (int i = 0; i y.length-1; i++) {
char c[]=y[i].toCharArray();
for (int j = 0; j c.length; j++) {
if(c[j]=='\\'c[j+1]=='"'){
count++;
}
}
if(count%2==0){
if(countNumber("\"",y[i])%2!=0){
boo[i]=true;
}else{
boo[i]=false;
}
}else{
if(countNumber("\"",y[i])%2==0){
boo[i]=true;
}else{
boo[i]=false;
}
}
}
for(int i=0;iboo.length;i++){
if(!boo[i])
return false;
}
return true;
}
return false;
}
public int countNumber(String s,String y){ //此方法為我前面寫的字符串出現(xiàn)次數(shù)統(tǒng)計(jì)方法,不懂的可以看我前面的文章
int count=0;
String [] k=y.split(s);
if(y.lastIndexOf(s)==(y.length()-s.length()))
count=k.length;
else
count=k.length-1;
if(count==0)
System.out.println ("字符串\""+s+"\"在字符串\""+y+"\"沒(méi)有出現(xiàn)過(guò)");
else
return count;
return -1;
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GoodLucky extends JFrame implements ActionListener{
JTextField tf = new JTextField(); //實(shí)例化一個(gè)文本域
//設(shè)置兩個(gè)按鈕
JButton b1 = new JButton("開(kāi)始");
JButton b2 = new JButton("停止");
boolean isGo = false;
//構(gòu)造函數(shù)
public GoodLucky(){
b1.setActionCommand("start");//在開(kāi)始按鈕上設(shè)置一個(gè)動(dòng)作監(jiān)聽(tīng) start
JPanel p = new JPanel(); //實(shí)例化一個(gè)可視化容器
//將兩個(gè)按鈕添加到可視化容器上面,用add方法
p.add(b1);
p.add(b2);
//在兩個(gè)按鈕上增加監(jiān)聽(tīng)的屬性,自動(dòng)調(diào)用下面的監(jiān)聽(tīng)處理方法actionPerformed(ActionEvent e),如果要代碼有更好的可讀性,可用內(nèi)部類實(shí)現(xiàn)動(dòng)作
//監(jiān)聽(tīng)處理。
b1.addActionListener(this);
b2.addActionListener(this);
//將停止按鈕設(shè)置為不可編輯(即不可按的狀態(tài))
b2.setEnabled(false);
this.getContentPane().add(tf,"North"); //將上面的文本域放在面板的北方,也就是上面(上北下南左西右東)
this.getContentPane().add(p,"South"); //將可視化容器pannel放在南邊,也就是下面
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設(shè)置用戶在此窗體上發(fā)起 "close" 時(shí)默認(rèn)執(zhí)行的操作,參數(shù)EXIT_ON_CLOSE是使用 System exit 方法退出應(yīng)用程序。僅在應(yīng)用程序中使用
this.setSize(300,200); //設(shè)置面板大小,寬和高
this.setLocation(300,300); //設(shè)置面板剛開(kāi)始的出現(xiàn)的位置
Cursor cu = new Cursor(Cursor.HAND_CURSOR); //用指定名稱創(chuàng)建一個(gè)新的定制光標(biāo)對(duì)象,參數(shù)表示手狀光標(biāo)類型
this.setCursor(cu); //為指定的光標(biāo)設(shè)置光標(biāo)圖像,即設(shè)置光標(biāo)圖像為上面所創(chuàng)建的手狀光標(biāo)類型
this.setVisible(true); //將面板可視化設(shè)置為true,即可視,如果為false,即程序運(yùn)行時(shí)面板會(huì)隱藏
tf.setText("welcome you! "); //設(shè)置面板的標(biāo)題為歡迎
this.go(); //調(diào)用go方法
}
public void go(){
while(true){ //這里是死循環(huán),也就是說(shuō)用戶不點(diǎn)擊停止按鈕的話他一直循環(huán)出現(xiàn)隨機(jī)數(shù),直到用戶點(diǎn)擊停止按鈕循環(huán)才能推出,具體流程在actionPerformed方法中控制。
if(isGo == true){ //上面所定義的isGo的初始值為false,所以程序第一次到此會(huì)跳過(guò)
String s = ""; //設(shè)置空字符串
for(int j = 1; j = 7;j++){ //產(chǎn)生7個(gè)隨機(jī)數(shù)
int i = (int)(Math.random() * 36) + 1;//每個(gè)隨機(jī)數(shù)產(chǎn)生方式,這里定義靈活,可以自由定義隨機(jī)數(shù)產(chǎn)生的方式
if(i 10){
s = s + " 0" + i; //如果產(chǎn)生的隨機(jī)數(shù)小于10的話做處理:這里就牽扯到一個(gè)重要的概念,簡(jiǎn)單敘述一下:
/*
當(dāng)一個(gè)字符串與一個(gè)整型數(shù)項(xiàng)相加的意思是連接,上面的s = s + " 0" + i的意思是字符串s鏈接0再連接整型i值,而不會(huì)導(dǎo)致0和整型的i相加,
產(chǎn)生的效果為s0i,由于s為空字符串(上面定義過(guò)的),所以當(dāng)i小于零時(shí),在個(gè)位數(shù)前面加上0,比如產(chǎn)生的隨機(jī)數(shù)i為7的話,顯示效果為 07.
*/
}else{
s = s + " " + i; //如果產(chǎn)生的隨機(jī)數(shù)比10打的話,那么加上空格顯示,即數(shù)字和數(shù)字之間有個(gè)空格
}
//以上循環(huán)循環(huán)七次,以保證能出現(xiàn)7個(gè)隨機(jī)數(shù)
}
tf.setText(s); //將產(chǎn)生的隨機(jī)數(shù)全部顯示在文本域上,用文本域?qū)ο髏f調(diào)用它的設(shè)置文本的方法setText(String)實(shí)現(xiàn)。
}
//以下為線程延遲
try{
Thread.sleep(10); //線程類同步方法sleep,睡眠方法,括號(hào)里的單位為ms。
}catch(java.lang.InterruptedException e){
e.printStackTrace(); //異常捕獲,不用多說(shuō)。
}
}
}
//以下是上面設(shè)置的事件監(jiān)聽(tīng)的具體處理辦法,即監(jiān)聽(tīng)時(shí)間處理方法,自動(dòng)調(diào)用
public void actionPerformed(ActionEvent e){ //傳入一個(gè)動(dòng)作事件的參數(shù)e
String s = e.getActionCommand(); //設(shè)置字符串s來(lái)存儲(chǔ)獲得動(dòng)作監(jiān)聽(tīng),上面的start
/*
以下這個(gè)條件語(yǔ)句塊的作用為:用戶點(diǎn)擊開(kāi)始后(捕獲start,用方法getActionCommand()),將命令觸發(fā)設(shè)置為true,從而執(zhí)行上面的go方法中的循環(huán)體(因?yàn)檠h(huán)體中要求isGo參數(shù)為true,而初始為false)。
執(zhí)行循環(huán)快產(chǎn)生隨機(jī)數(shù),并將開(kāi)始按鈕不可編輯化,而用戶只可以使用停止按鈕去停止。如果用戶按下停止時(shí),也就是沒(méi)有傳入?yún)?shù)“start”的時(shí)候,
執(zhí)行else語(yǔ)句塊中的語(yǔ)句,isGo設(shè)置為false,將不執(zhí)行上面go中的循環(huán)語(yǔ)句塊,從而停止產(chǎn)生隨機(jī)數(shù),并顯示,并且把開(kāi)始按鈕設(shè)置為可用,而把
停止按鈕設(shè)置為不可用,等待用戶按下開(kāi)始再去開(kāi)始新一輪循環(huán)產(chǎn)生隨機(jī)數(shù)。
*/
if(s.equals("start")){ //如果捕獲到start,也就是用戶觸發(fā)了動(dòng)作監(jiān)聽(tīng)器,那么下面處理
isGo = true; //設(shè)置isGo為true
b1.setEnabled(false); //將開(kāi)始按鈕設(shè)置為不可用
b2.setEnabled(true); //將停止按鈕設(shè)置為可用
}else{
isGo = false; //將isGo設(shè)置為false,isGo為循環(huán)標(biāo)志位
b2.setEnabled(false); //設(shè)置停止按鈕為不可用(注意看是b2,b2是停止按鈕)
b1.setEnabled(true); //設(shè)置開(kāi)始按鈕為可用
}
}
public static void main(String[] args){
new GoodLucky(); //產(chǎn)生類的實(shí)例,執(zhí)行方法
}
}
首先,你要知道,變量i是局部變量,j是靜態(tài)的全局變量。
其次,你要明白,在Java中,基本類型的參數(shù),如int、float、char等,都是按值傳遞的,而對(duì)象,如String等是按引用傳遞,跟C++里面的按地址傳遞類似。
最后解釋:在amethod()方法中,你傳遞了參數(shù)i,并在方法內(nèi)部分別為i和j的值乘以2,然而,在方法體內(nèi)部,i的確是編程了20,j也變成了40.
但是,出了該方法體,當(dāng)回到main方法時(shí),i的值是沒(méi)有改變的,因?yàn)閯倓偸前粗祩鬟f的,在main中i的值依舊是10,而j因?yàn)槭庆o態(tài)變量,自然對(duì)它的作用是有效的。
所以,最后的結(jié)果就如你所見(jiàn)了。
最后,推薦一個(gè)Java基礎(chǔ)群:84994654