實驗一 Java環境演練java
【目的】ide
①安裝並配置Java運行開發環境;學習
②掌握開發Java應用程序的3個步驟:編寫源文件、編譯源文件和運行應用程序;this
③學習同時編譯多個Java源文件。spa
【內容】命令行
1.一個簡單的應用程序code
² 實驗要求:對象
編寫一個簡單的Java應用程序,該程序在命令行窗口輸出兩行文字:「你好,很高興學習Java」和「We are students」。繼承
² 程序運行效果示例:ip
程序運行效果以下圖所示:
² 程序模板:
Hello.java
public class Hello
{
public static void main (String args[ ])
{
【代碼1】 //命令行窗口輸出"你好,很高興學習Java"
A a=new A();
a.fA();
}
}
class A
{
void fA()
{
【代碼2】 //命令行窗口輸出"We are students"
}
}
² 實驗後的練習:
1.編譯器怎樣提示丟失大括號的錯誤?
2.編譯器怎樣提示語句丟失分號的錯誤?
3.編譯器怎樣提示將System寫成system這一錯誤?
4.編譯器怎樣提示將String寫成string這一錯誤?
2.聯合編譯
² 實驗要求:
編寫4個源文件:Hello.java、A.java、B.java和C.java,每一個源文件只有一個類,Hello.java是一個應用程序(含有main方法),使用了A、B和C類。將4個源文件保存到同一目錄中,例如:C:\100,而後編譯Hello.java。提示:直接編譯Hello.java便可,或者把全部文件添加到Eclipse的項目的src目錄下,再運行Hello.java。
² 程序模板:
模板1:Hello.java
public class MainClass
{
public static void main (String args[ ])
{
【代碼1】 //命令行窗口輸出"你好,只需編譯我"
A a=new A();
a.fA();
B b=new B();
b.fB();
}
}
模板2 :A.java
public class A
{
void fA()
{
【代碼2】 //命令行窗口輸出"I am A"
}
}
模板3 :B.java
public class B
{
void fB()
{
【代碼3】 //命令行窗口輸出"I am B"
}
}
模板4 :C.java
public class C
{
void fC()
{
【代碼4】 //命令行窗口輸出"I am C"
}
}
² 實驗後的練習:
5.將Hello.java編譯經過後,不斷修改A.java源文件中的代碼,好比,在命令行窗口輸出「我是A類」或「我被修改了」。要求每次修改A.java源文件後,單獨編譯A.java,而後直接運行應用程序Hello。提示,某目錄下全部文件編譯命令javac *.java,某個文件單獨編譯命令 java 該文件名.java。
6.若是須要編譯某個目錄下的所有Java源文件,好比C:\1000目錄,可使用以下命令:c:\1000\javac *.java
【結果】
將本次上機實驗結果按照以上內容依次填寫實驗目標、過程、結果。
實驗二 Java基本數據類型與控制語句
【目的】
①掌握char型數據和int型數據之間的相互轉換,同時瞭解unicode字符表;
②掌握使用if…else if多分支語句;
③使用if…else分支和while循環語句解決問題。
【內容】
1.輸出希臘字母表。
² 實驗要求:
編寫一個Java應用程序,該程序在命令行窗口輸出希臘字母表。
² 程序模板:
GreekAlphabet.java
public class GreekAlphabet
{
public static void main(String[] args) {
// TODO Auto-generated method stub
int startPosition=0,endPosition=0;
char cStart='α',cEnd='ω';
startPosition = (int)cStart;
endPosition = (int)cEnd;
System.out.println("希臘字母\'α\'在unicode表中的順序位置:"+ startPosition);
System.out.println("希臘字母表:");
for(int i=startPosition;i<=endPosition;i++)
{
char c='\0';
c = (char)i;
System.out.print(" "+c);
if((i-startPosition+1)%10==0)
System.out.println("");
}
}
}
² 實驗後的練習:
1. 將一個double型數據直接賦值給float型變量,程序編譯時提示怎樣的錯誤?
2. 在應用程序的main方法中增長語句:
float x=0.618;
程序能編譯經過麼?
3. 在應用程序的main方法中增長語句:
byte y=128;
程序能編譯經過麼?
4. 在應用程序的main方法中增長語句:
int z=(byte)128;
程序輸出變量z的值是多少?
2.迴文數。
² 實驗要求:
編寫一個Java應用程序。用戶從鍵盤輸入一個1—9999之間的數,程序將判斷這個數是幾位數,並判斷這個數是不是迴文數。迴文數是指將該數含有的數字逆序排列後獲得的數和原數相同,例如1212一、3223都是迴文數。
² 程序運行效果示例:
程序運行效果以下圖所示:
² 程序模板:
Number.java
import javax.swing.JOptionPane;
public class Number
{
public static void main(String args[])
{
int number=0,d5,d4,d3,d2,d1;
String str=JOptionPane.showInputDialog("輸入一個1至99999之間的數");
number=Integer.parseInt(str);
if(【代碼1】) //判斷number在1至99999之間的條件
{
【代碼2】 //計算number的最高位(萬位)d5
【代碼3】 //計算number的千位d4
【代碼4】 //計算number的百位d3
d2=number%100/10;
d1=number%10;
if(【代碼5】) //判斷number是5位數的條件
{
System.out.println(number+"是5位數");
if(【代碼6】) //判斷number是迴文數的條件
{
System.out.println(number+"是迴文數");
}
else
{
System.out.println(number+"不是迴文數");
}
}
else if(【代碼7】) //判斷number是4位數的條件
{
System.out.println(number+"是4位數");
if(【代碼8】) //判斷number是迴文數的條件碼
{
System.out.println(number+"是迴文數");
}
else
{
System.out.println(number+"不是迴文數");
}
}
else if(【代碼9】) //判斷number是3位數的條件
{
System.out.println(number+"是3位數");
if(【代碼10】) //判斷number是迴文數的條件
{
System.out.println(number+"是迴文數");
}
else
{
System.out.println(number+"不是迴文數");
}
}
else if(d2!=0)
{
System.out.println(number+"是2位數");
if(d1==d2)
{
System.out.println(number+"是迴文數");
}
else
{
System.out.println(number+"不是迴文數");
}
}
else if(d1!=0)
{
System.out.println(number+"是1位數");
System.out.println(number+"是迴文數");
}
}
else
{
System.out.printf("\n%d不在1至99999之間",number);
}
}
}
² 實驗後的練習:
1. 程序運行時,用戶從鍵盤輸入2332,程序提示怎樣的信息?
2. 程序運行時,用戶從鍵盤輸入654321,程序提示怎樣的信息?
3. 程序運行時,用戶從鍵盤輸入33321,程序提示怎樣的信息?
思考題: 編寫一個程序,把變量n的初始值設置爲1678,而後利用除非運算取餘運算把變量的每位數字都提出來打印,輸出結果爲:n=1678,n的每位數字是1,6,7,8
提示:輸入使用下面語句
Scanner reader = new Scanner(System.in);
int i= reader.nextInt();
同時,別忘了在源文件頭部導入Scanner類,importa java.util.Scanner;有關該類的詳細說明,請查閱JDK幫助文檔。
實驗三 類與對象、繼承
【目的】
①使用類來封裝對象的屬性和功能;
②掌握類變量與實例變量,以及類方法與實例方法的區別;
③掌握使用package和import語句。
④鞏固如下概念:
子類的繼承性
子類對象的建立過程
成員變量的繼承與隱藏
方法的繼承與重寫
【內容】
1.三角形、梯形和圓形的類封裝
² 實驗要求:
編寫一個Java應用程序,該程序中有3個類:Trangle、Leder和Circle,分別用來刻畫「三角形」、「梯形」和「圓形」。具體要求以下:
a) Trangle類具備類型爲double的三個邊,以及周長、面積屬性,Trangle類具備返回周長、面積以及修改三個邊的功能。另外,Trangle類還具備一個boolean型的屬性,該屬性用來判斷三個屬可否構成一個三角形。
b) Lader類具備類型double的上底、下底、高、面積屬性,具備返回面積的功能。
c) Circle類具備類型爲double的半徑、周長和麪積屬性,具備返回周長、面積的功能。
² 程序運行效果示例:
程序運行效果以下圖所示:
² 程序模板:
AreaAndLength.java
class Trangle
{
double sideA,sideB,sideC,area,length;
boolean boo;
public Trangle(double a,double b,double c)
{
【代碼1】 //參數a,b,c分別賦值給sideA,sideB,sideC
if(【代碼2】) //a,b,c構成三角形的條件表達式
{
【代碼3】 //給boo賦值。
}
else
{
【代碼4】 //給boo賦值。
}
}
double getLength()
{
【代碼5】 //方法體,要求計算出length的值並返回
}
public double getArea()
{
if(boo)
{
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;
return area;
}
else
{
System.out.println("不是一個三角形,不能計算面積");
return 0;
}
}
public void setABC(double a,double b,double c)
{
【代碼6】 //參數a,b,c分別賦值給sideA,sideB,sideC
if(【代碼7】) //a,b,c構成三角形的條件表達式
{
【代碼8】 //給boo賦值。
}
else
{
【代碼9】 //給boo賦值。
}
}
}
class Lader
{
double above,bottom,height,area;
Lader(double a,double b,double h)
{
【代碼10】 //方法體,將參數a,b,c分別賦值給above,bottom,height
}
double getArea()
{
【代碼11】 //方法體,,要求計算出area返回
}
}
class Circle
{
double radius,area;
Circle(double r)
{
【代碼12】 //方法體
}
double getArea()
{
【代碼13】 //方法體,要求計算出area返回
}
double getLength()
{
【代碼14】 //getArea方法體的代碼,要求計算出length返回
}
void setRadius(double newRadius)
{
radius=newRadius;
}
double getRadius()
{
return radius;
}
}
public class AreaAndLength
{
public static void main(String args[])
{
double length,area;
Circle circle=null;
Trangle trangle;
Lader lader;
【代碼15】 //建立對象circle
【代碼16】 //建立對象trangle。
【代碼17】 //建立對象lader
【代碼18】 // circle調用方法返回周長並賦值給length
System.out.println("圓的周長:"+length);
【代碼19】 // circle調用方法返回面積並賦值給area
System.out.println("圓的面積:"+area);
【代碼20】 // trangle調用方法返回周長並賦值給length
System.out.println("三角形的周長:"+length);
【代碼21】 // trangle調用方法返回面積並賦值給area
System.out.println("三角形的面積:"+area);
【代碼22】 // lader調用方法返回面積並賦值給area
System.out.println("梯形的面積:"+area);
【代碼23】 // trangle調用方法設置三個邊,要求將三個邊修改成12,34,1。
【代碼24】 // trangle調用方法返回面積並賦值給area
System.out.println("三角形的面積:"+area);
【代碼25】 // trangle調用方法返回周長並賦值給length
System.out.println("三角形的周長:"+length);
}
}
² 實驗後的練習:
1. 程序中僅僅省略【代碼15】,編譯能經過嗎?
2. 程序中僅僅省略【代碼16】,編譯能經過嗎?
3. 程序中僅僅省略【代碼15】,運行時出現怎樣的異常提示?
4. 給Trangle類增長3個方法,分別用來返回3個邊:sideA、sideB和sideC。
5. 讓AreaAndLength類中的circle對象調用方法修改半徑,而後輸出修改後的半徑以及修改半徑後的圓的面積和周長。
2.實例成員與類成員。
² 實驗要求:
按程序模板的要求編寫源文件,要特別注意程序的輸出結果,並能正確解釋輸出的結果。
² 程序運行效果示例:
程序運行效果以下圖所示:
² 程序模板:
Example.java
class A
{
【代碼1】 //聲明一個float型實例變量a
【代碼2】 //聲明一個float型類變量b,即static變量b
void setA(float a)
{
【代碼3】 //將參數a的值賦值給成員變量a
}
void setB(float b)
{
【代碼4】 //將參數b的值賦值給成員變量b
}
float getA()
{
return a;
}
float getB()
{
return b;
}
void inputA()
{
System.out.println(a);
}
static void inputB()
{
System.out.println(b);
}
}
public class Example
{
public static void main(String args[])
{
【代碼5】 //經過類名操做類變量b,並賦值100
【代碼6】 //經過類名調用方法inputB()
A cat=new A();
A dog=new A();
【代碼7】 //cat象調用方法setA(int a)將cat的成員a的值設置爲200
【代碼8】 //cat調用方法setB(int b)將cat的成員b的值設置爲400
【代碼9】 //dog象調用方法setA(int a)將dog的成員a的值設置爲150
【代碼10】 //dog調用方法setB(int b)將dog的成員b的值設置爲300
【代碼11】 //cat調用inputA()。
【代碼12】 //cat調用inputB()。
【代碼13】 //dog調用inputA()。
【代碼14】 //dog調用inputB()。
}
}
² 實驗後的練習:
1. 將inputA()方法中的
System.out.println(a);
改寫爲
System.out.println(a+b);
編譯是否出錯?爲何?
2. 將inputB()方法中的
System.out.println(b);
改寫爲
System.out.println(a+b);
編譯是否報錯?爲何?
3.使用package語句與import語句。
² 實驗要求:
按實驗要求使用package語句,並用import語句使用Java平臺提供的包中的類以及自定義包中的類。掌握一些重要的操做步驟。
² 程序運行效果示例:
程序運行效果以下圖所示:
² 程序模板:
模板1:
將模板1給出的Java源文件命名爲SquareEquation.java,將編譯後獲得的字節碼文件複製到c:\1000\tom\jiafei目錄中。
SquareEquation.java
package tom.jiafei;
public class SquareEquation
{
double a,b,c;
double root1,root2;
boolean boo;
public SquareEquation(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
{
boo=true;
}
else
{
boo=false;
}
}
public void getRoots()
{
if(boo)
{
System.out.println("是一元2次方程");
double disk=b*b-4*a*c;
if(disk>=0)
{
root1=(-b+Math.sqrt(disk))/(2*a);
root2=(-b-Math.sqrt(disk))/(2*a);
System.out.printf("方程的根:%f,%f\n",root1,root2);
}
else
{
System.out.printf("方程沒有實根\n");
}
}
else
{
System.out.println("不是一元2次方程");
}
}
public void setCoefficient(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
if(a!=0)
{
boo=true;
}
else
{
boo=false;
}
}
}
模板2:
將模板2給出的Java源程序SunRise.java保存到d:\2000中。在編譯模板2給出的Java源文件以前,要從新設置classpath。假設本地機SDK的安裝目錄是E:\jdk1.7。
在命令行執行以下命令:
set classpath=e:\jdk1.7\jre\lib\rt.jar;.;c:\1000
而後編譯模板2給出的Java源程序。或用鼠標右鍵點擊「個人電腦」,彈出快捷菜單,而後選擇「屬性」命令,彈出「系統屬性」對話框,再單擊該對話框中的「高級」選項卡,而後單擊「環境變量」按鈕。將classpath的值修改成:
E:\jdk1.7\jre\lib\rt.jar;.;c:\1000
而後從新打開一個命令行窗口,編譯模板2給出的Java源程序。
SunRise.java
import tom.jiafei.*;
class SunRise
{
public static void main(String args[ ])
{
SquareEquation equation=new SquareEquation(4,5,1);
equation.getRoots();
equation.setCoefficient(-3,4,5);
equation.getRoots();
}
}
² 實驗後的練習:
假設SDK的安裝目錄是E:\jdk1.7,那麼Java運行系統默認classpath的值是:E:\jdk1.7\jre\lib\rt.jar;.;
其中的「」表示應用程序可使用當前目錄中的無名包類以及當前目錄下的子目錄中的類,子目錄中的類必須有包名,並且包名要和子目錄結構相對應。
所以,若是將模板2應用程序Sunrise.java的字節碼文件存放到d:\5000中,並將SquareEquation.java的字節碼文件存放在D:\5000\tom\jiafei中,那麼就不須要修改classpath。要特別注意的是,由於SquareEquation.java有包名,切不可將SquareEquation.java以及它的字節碼文件存放在d:\5000中,即不能夠和Sunrise.java的字節碼存放在一塊兒,請進行以下的練習:
1. 將SquareEquation.java存放在D:\5000\tom\jiafei中,編譯:
D:\5000\tom\jiafei\javac SquareEquation.java
2. 將Sunrise.java存放到D:\5000中,編譯:
D:\5000\javac Sunrise.java
3. 運行:
java Sunrise
【結果】
將本次上機實驗結果按照實驗要求內容依次進行,填寫實驗目標、過程、結果。