內容提要:
1.變量
2.數據類型
3.表達式與運算符
4.數組
5.流程控制語句
這一節中,主要是大家介紹一下Java Applet中的各種數據的表示方法和標量的表示方法,主要是一些Java的語法。Java Applet是Java的一個部分,語法規則當然和Java是一樣的,但是,他們在某些方面也有一些不同,這主要是只程序的結構上,其余的地方,完全相同,這就是為什麼我建議大家從學習Java Applet處開始學習Java的原因了。
要學習Java的語法,並不是很難,如果大家學習過C,那麼學習Java的語法就實在是非常簡單的了,因為Java中的所有變量的命名與規則,都和C中是一樣的,連表達式,程序流程的控制語句等方面都是一樣的。這對於學習過C或者C++的讀者來說,可以略過這一節了,如果你以前是學的別的語言,或者說,你沒有學過語言什麼的,那麼還是看看這一節吧。基本的語法規則還是記得越多越好,雖然用的時候可以查書。
1.變量
和別的高級語言一樣,高級語言的程序通過變量來操縱內存中的數據,所以程序在使用任何變量之前都首先應該在該變量和內存單元之間建立聯系,這個過程稱為定義變量,或者稱為為變量分配內存單元。
在Java程序中,定義變量的主要任務有兩個:一是為自己的變量起一個名字(自己好認識),二是定義這個變量的數據類型,好使編譯器知道該給它多大的內存空間。請看下面的例子:
int x;
char c;
float ffff;
String st1,st2;
定義變量是相當簡單的事情,三要注意下面的三個規則:
1)標識符可以由字母、數字、下劃線或$呼號組成,對於長度就沒有限制了,
2)標識符必須以字母、下劃線,(_)或字符開頭,數字是不能放在第一位的。
3)標識符在Java中必須要區分大小寫。
為什麼要這樣,我也不知道,這是開發這個語言的人定義的。呵呵!給大家舉幾個例子吧:
a, _isTrue,$a41,a_b,a1,都是合法的標識符,而123,@isTrue,0_ab,等就不是合法的了,會編譯不過去的,而對於大小寫:char_Class1與char_class1則是不同的標識符,因為Java中的大小寫是不同的。而我們在定義變量的時候,當然應該盡量使變量與它實際代表的內容有一定的聯系,這一點在小程序中看不出來,當程序特別大的時候,就有用了。
另外,在定義變量的時候,我們還可以同時為這個變量給出初始值,例如:
int x=0;
char char_Class1='A',char_Class2='2';
好了給大家舉一個實際的例子,如下:
import Java.awt.*;
import Java.applet.*;
public class Applet1 extends Applet
{
int x=10;
char char_class1='A';
Label output1;
Label output2;
public void init()
{
output1=new Label ("定義int型的變量x,x的初始值為:"+x);
output2=new Label ("定義char類型的變量,初始值為:"+char_class1);
add(output1);
add(output2);
}
}
好了,給你詳細地分析一下這個程序吧!
import Java.awt.*; //這個已經說過了,引入類庫awt,輸入輸出類庫
import Java.applet.*;//同樣的道理,引入Applet類庫
public class Applet1 extends Applet //定義主類Applet1
{
int x=10; //定義整數型的變量x並付初值
char char_class1='A'; //定義字符型變量,並付初值
Label output1; //定義用來輸出結果的兩個標簽
Label output2; //這在下一章將給大家詳細講解
public void init() //小程序的入口,創建標簽,顯示其內容
{ //並加入到主類的Applet1圖形界面中,顯示出來。
output1=new Label ("定義int型的變量x,x的初始值為:"+x);
output2=new Label ("定義char類型的變量,初始值為:"+char_class1);
add(output1); //顯示第一個標簽
add(output2); //顯示第二個標簽
}
}
怎麼樣,對Java的變量有了一定的了解了吧,看下一節,Java的數據類型吧!
2.數據類型
Java 語言有著與C語言類似的教強的數據處理能力,即它的數據類型和不同類型上的運算定義得較為齊全,Java內部的數據類型可以分為四大類:整數、浮點數、字符、布爾型。其中整數和浮點數兩大類根據長度和精度的不同,還可以進一步劃分為byte、int、short、long、float、和double幾個具體的類型。具體可參看下表:
Java的基本數據類型
數據類型 關鍵字 占用比特數 取值范圍 缺省數值 布爾型 boolean 8 true,false false 字符型 byte 8 -128--127 0 整數型 char 16 0--65535 '\u0' 短整型 short 16 -32768--32767 0 整型 int 32 -2147483648--2147483647 0 長整型 long 64 -9.22E18--9.22E18 0 浮點型 float 32 1.4013E-45--3.4028E+38 0.0F 雙精度型 double 64 2.22551E-208--1.7977E+308 0.0D1.布爾型
布爾型只能有true和false兩種取值,分別代表布爾邏輯中的“真”和“假”。
2.整型與字符型
整型就是數學中的整數了,字符型就是字符,'0'和'a',等都是字符。要注意兩點:
1)在使用整數型變量的時候要注意其最大和最小取值范圍,如果實際取值超過范圍,則會出現溢出錯誤。尤其在做階乘的時候要注意。如果機器不是很好,還要節約機器資源,只需要int型的地方,就不要用long型。
2)字符型變量的取值可以使用字符常量(用單引號闊起的單個字符),也可以用整數常數。例如,下面的兩個語句的作用完全相同:
char char_A='A';
char char_A=65;
這就是計算機的一個機制問題了,它把字符做為整數型保存的。因為這樣更方便。
3.浮點型
float和double都是浮點數據類型,程序中使用它們來代表小數。由於計算機采用浮點來計算小數,因此就叫浮點數據類型。也因為這個原因,計算機算出來的小數點後的n位(視具體的情況而定) ,與實際的數值總是會有一定的誤差。它只會去盡量地接近它,所以位數越多約精確。float是32位,應該夠用了,如果不夠,那就只能用double了,但也要節約資源。
程序中的科學記數法是表示。例如 :3.14E3表示3,140,而3.14E-2表示0.0314。如果常數後面有一個'd'或者'D',那麼就表示是double型的。付址的時候,應該這樣寫:
float f1=3.14f;
double f2=3.14d;
4.類型轉換
Java 程序中,常數或變量從一種數據類型轉換到另外一種數據類型,稱為類型轉換。它有兩種,一種是從低位轉為高位的稱為缺省類型轉換。例如從char型轉換到int型,從int型轉換到long型,都是機器可以直接執行的。例如:
int i=5;
long j=i;
如果把高位轉化為低位,就會出現問題了。這個道理都明白,怎麼辦?有需要的時候,例如要把float轉化int型,那就只有通過強制類型轉化了。例如:
float f=3.14f;
int i=(int)f;
long j=5;
int i2=(int)j;
當然要注意的是高位轉化為地位的時候,數據的范圍要在地位范圍內,例如不能將一個很大的整數30000轉化char型,因為它超過了范圍。結果會出現錯誤!
好了,看一個例子吧:
import java.awt .* ; import Java.applet.Applet ; public class Leixing extends Applet { boolean b1=true; int x=10; char c=65; float f=3.14f; public void paint(Graphics g) { g.drawString ("布爾型:"+b1,2,20); g.drawString ("整型:"+x,2,40); g.drawString ("字符型"+c,2,60); g.drawString ("浮點數據類型:"+f,2,80); } }
表達式是由變量、常量、對象、方法調用和操作符組成的式子。符合語法規則的表達式才能被編譯系統理解、執行並計算。
說起表達式,也並不是很復雜,就是日常我們見到的數學式子,但有一些區別,Java中的表達式由於操作符的不同,而有很多的種類了。大致可以分為:
1)賦值與強制類型轉換
賦值運算符對應了賦值雲選,即賦予程序裡的變量或對象一定的內容。簡單的賦值運算是把一個表達式的值直接賦給一個變量或對象,使用的賦值運算符是“=”,格式為:
變量或對象=表達式;
其中賦值號右邊的表達式可以是常量、另外一個變量或對象以及方法的返回值。下面給大家舉幾個例子:
i=0;
j=i;
k=i+j*4;
2)算術運算
算術運算是針對數值類型操作數進行的運算,算術運算符根據操作數字個數的不同,又可以分為:
1.雙目運算符
2.單目運算符
運算符 運算 例子 功能等價於 ++ 自增 a++或++a a=a+1 -- 自減 a--或--a a=a-1 - 求相反數 -a a=-a給大家舉個例子:
int x=2;
int y=(++x)*3;
運行結果是x=3;y=9。
再看另外的一個例子:
int x=2;
int y=(x++)*3;
運行結果是x=3,y=6。
這是為什麼,因為第一個例子中,是x已經等於3後再算y,而後一個例子中,則是先用x=2算出y後,再算x,因為++符號在後面,這就是++x和x++的區別了。
3)關系運算符
關系運算是比較兩個數據之間的大小關系的運算,常用的關系運算符號如下:
關系運算符的結果是步爾值,也就是只有“真”和假兩種答案,例如:
int x=5,y=7;
boolean b=(x==y);
則b的值是false。也就是0,計算機中用0可以代表false。
4)其他運算符
1.三目運算符
Java中的三墓運算符與C語言中的完全相同,使用形式為:
x?y:z;
這就是說,先計算x的值,若x為真,怎整個表達式的結果為y的值,若x為假,則整個表達式的值為表達式z的值。
例如:
int x=5,y=8,z=2;
int k=x<3?y:z; //因為x<3,所以k=2;
int j=x>0?x:-x //y的值始終為x的絕對值。
2.邏輯運算
邏輯運算是針對布爾型數據進行的雲酸,運算的結果仍然是布爾型量。常用的運算符如下:
3.位運算
位運算是對操作數以二進制為單位進行的操作和運算,位運算的操作數和結果都是整形變量。常用的規則列表如下:
2.復雜運算符
復雜運算符是在先進行某種雲酸後,再把運算結果賦給變量。舉例如下:
.
數 組
數組是長常用的數據結構,相同的數據類型元素類型按一定的順序排列就構成了數組,在Java中數組元素可以是簡單數據類型的量,也可以是某一類的對象。數組的主要特點有三個:
1)數組是相同數據類型的元素的集合。
2)數組中的各元素是有先後順序的,他們在內存中按照這個先後順序連續存放在一起。
3)每個數組元素用整個的名字和它自己在數組中的順序位置表達,例如a[0]就代表名為a的數組中的第一個元素,a[1]就就代表數組a的第二個元素,依此類推。
Java數組需要下面三個步驟:這與其他的語言相比,有一定的差異。
1)聲明數組
聲明數組主要是聲明數組的名稱和數組所包含的元素的數據類型或元素的類名。聲明數組的語法格式有兩種如下:
數組元素類型 數組名[];
數組元素類型[] 數組名;
方括號[]是數組的標志,它可以出現在數組名的後面,也可以出現在數組元素類型的後面,兩種定義方法沒有什麼差別。
2)創建數組空間
聲明數組僅僅指定數組的名字和數組元素的類型,要想真正使用數組還需要為它開辟內存空間,即創建數組空間。與多數語言一樣,Java不支持沒有定義元素個數的數組,在創建數組空間時必須為它指明數組的長度。以確定精確的內存空間的大小。語法格式為:
數組名 = new 數組元素類型[數組元素的個數];
例如:
MyIntArray[] =new int[10];
創建數組空間的工作也可以與聲明數組合在一起,用一條語句完成,例如:
int MyIntArray = new int[10];
你也可以在創建數組空間的時候,同時將初值給出來,例如:
int MyIntArray[]={1,2,3,4,5,6,7,8,9};
這樣就創建了一個包含10個整型元素的數組,同時給出了每個元素的初值。
3)初始化數組元素
如果是基本的數據類型,那麼這個步驟可以自行省略。因為基本數據類型量都有缺省的。也可以象上面一樣,直接在創建數組空間的時候,就將它初始化。如果是類,則將比較麻煩了。以後在講類的時候再說!
給大家舉下面一個例子:
import java.awt .*; import Java.applet.*; public class ShuZu extends Applet { int MyIntArray[]={1,2,3,4,5,6,7,8,9,10}; public void paint(Graphics g) { g.drawString ("MyIntArray[0]="+MyIntArray[0],2,15); g.drawString ("MyIntArray[1]="+MyIntArray[1],2,30); g.drawString ("MyIntArray[2]="+MyIntArray[2],2,45); g.drawString ("MyIntArray[3]="+MyIntArray[3],2,60); g.drawString ("MyIntArray[4]="+MyIntArray[4],2,75); g.drawString ("MyIntArray[5]="+MyIntArray[5],2,90); g.drawString ("MyIntArray[6]="+MyIntArray[6],2,105); g.drawString ("MyIntArray[7]="+MyIntArray[7],2,120); g.drawString ("MyIntArray[8]="+MyIntArray[8],2,135); g.drawString ("MyIntArray[9]="+MyIntArray[9],2,150); } }流程控制語句
能夠決定其它語句的執行順序的語句稱為流程控制語句。Java語言裡有如下語句:
選擇判斷語句:if-else, switch-case
循環語句: for, while, do-while
異常拋出與捕獲語句: try-catch-finally, throw
控制語句:break, continue, label: , return
一、選擇判斷語句
二種形式:
1.if語句
if (表達式)
則
或者
if (條件 )
則
else
則
他們是可以嵌套的,如:
if (testscore >= 90) {
grade = 'A';
} else if (testscore >= 80) {
grade = 'B';
} else if (testscore >= 70) {
grade = 'C';
} else if (testscore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
2、switch語句
switch (表達式或變量) {
case 第一個選擇的可能 :則…… ;break;
case 第二個選擇的可能 :則…… ; break;
case 第三個選擇的可能 :則…… ; break;
……
default:
則
break;
}
二.循環語句
1. for 循環
for (initialization; termination; increment)
statements
2.while循環
while (booleanExpression)
statements
3. do-while循環
do { statements} while (booleanExpression);
三.轉移語句
1.帶標號的語句格式:
標號: 語句
statementName: someJavaStatement;
2.break語句
不帶標號的break語句: 終止當前語句的執行而使控制轉移到當前語句的下一條語句.
帶標號的break語句: 終止帶標號的語句而使控制轉移到帶標號語句的下一條語句.
break statementName;
3.continue語句
只能用在循環語句中.
不帶標號的continue語句: 無條件使控制轉移到循環語句的條件判定部分.
帶標號的continue語句: 無條件使控制轉移到帶標號的循環語句的條件判定部分.
4. Return語句:
結束當前方法的執行並返回到調用方法語句的下一條語句.
return expression;
return;
好了,給大家舉個例子吧。如下:
程序的源代碼如下:
import java.applet.*; import Java.awt.*; public class Applet1 extends Applet { public void paint(Graphics g) { int i=1,j,n=5; while(i<=n) { for(j=1;j<=i*2-1;j++) g.drawString("* ",(100+ 10*j+10*(n-i)),i*20); i++; } } }
分析:
對於這個程序,很多的同學可能沒想到會這麼簡單,是的,真的很簡單,我這兒要說的是它的循環。循環是編程中經常用到的一種語句。
第1個循環while語句,它控制了它的{……}中的語句,這其中還包括一個for()循環語句while為第一層循環,它裡面的語句要循環n(這裡n=5)遍。 第2個循環語句for()是個活動循環,循環的次數要隨著第一層的循環變量i變化,當i=1時,它要循環i*2-1遍,也就是1遍,當i=5時,它要循環5*2-1=9遍,而它控制下面的g.drawString語句,使它在屏幕上打印出j個字符。而字符的位置則由(x,y) 坐標來控制,打印一行要換行,而這正好由變量i和j 來控制。達到了預期的效果。 當for()循環結束後,變量i會加1,使i一直循環到n。這二要注意的是語句:i++;它不受for()循環語句的控制,它只受while()語句控制。
請同學們認真分析這個循環,一旦分析清楚了,以後遇到類似的循環就會一看就懂,掌握雙層循環是一個很基本的技能。 字母三角形 這個程序能在屏幕上打印出一個三角形來,但不是用固定格式打印出來的。你可以通過修改n的值而得到不同高度的三角形。