類和對象作業
一、 填空題
- 類是組成Java程序的基本要素,類體有兩部分構成:一部分是變量的定義,另一部分是 方法 的定義。
- 執行Person p = new Person();語句后,將在_______堆內存____中給Person對象分配空間,並在棧內存中給引用變量p分配空間,存放Person對象的引用。
- 構造方法 是一種特殊方法,它的名字必須與它所在的類的名字完全相同,並且不書寫返回值類型,在創建對象實例時由new運算符自動調用。
- 局部變量的名字與成員變量的名字相同,若想在該方法內使用成員變量,必須使用關鍵字 。
- 使用關鍵字 來調用同類的其它構造方法,優點同樣是以最大限度地代碼的利用程度 ,減少程序的維護工作量。
- 用關鍵字 static 修飾的成員變量是類變量,類變量是指不管類創建了多少對象,系統僅在第一次調用類的時候為類變量分配內存,所有對象共享該類的類變量。
- 使用static修飾的變量稱為靜態變量,靜態變量可以有兩種訪問方式,分別是類名.靜態變量名和____對象名.靜態變量名___________________。
- 在一個類文件中的關鍵字package,import,class出現的可能順序是______package,import,clas________________________。
- package 關鍵字作為Java源文件的第一條非注釋性語句,指明該源文件定義的類所有的包。
- Java.lang 包是Java語言的核心類庫,它包含了運行Java程序必不可少的系統類,使用該包下的類和接口不需要使用import導入。
二、 選擇題
1. |
在Java中,以下程序編譯運行后的輸出結果為( D )。(選擇一項) |
|
|
public class Test { int x, y; Test(int x, int y) { this.x = x; this.y = y; } public static void main(String[] args) { Test pt1, pt2; pt1 = new Test(3, 3); pt2 = new Test(4, 4); System.out.print(pt1.x + pt2.x); } } |
|
|
|
|
|
A |
6 |
|
B. |
34 |
|
C. |
8 |
|
D. |
7 |
2. |
分析如下Java程序的代碼所示,則編譯運行后的輸出結果是( C )。(選擇一項) |
|
|
public class Test { int count=9; public void count1(){ count=10; System.out.println("count1="+count); } public void count2(){ System.out.println("count2="+count); } public static void main(String[ ] args) { Test t=new Test(); t.count1(); t.count2(); } } |
|
|
|
|
|
A |
count1=9; count2=9; |
|
B. |
count1=10; count2=9; |
|
C. |
count1=10; count2=10; |
|
D. |
count1=9; count2=10; |
3. |
以下語句中關於Java構造方法的說法錯誤的是( B )。(選擇一項) |
|
|
|
|
|
A. |
構造方法的作用是為創建對象進行初始化工作,比如給成員變量賦值 |
|
B. |
一個Java類可以沒有構造方法,也可以提供1個或多個構造方法 |
|
C. |
構造方法與類同名,不能書寫返回值類型 |
|
D. |
構造方法的第一條語句如果是super(),則可以省略,該語句作用是調用父類無參數的構造方法 |
4. |
在Java中關於靜態方法,以下說法中正確的是( AC )。(選擇兩項) |
|
|
|
|
|
A |
靜態方法中不能直接調用非靜態方法 |
|
B. |
非靜態方法中不能直接調用靜態方法 |
|
C. |
靜態方法可以用類名直接調用 |
|
D. |
靜態方法里可以使用this |
5. |
下列選項中關於Java中類方法的說法錯誤的是( AC )。(選擇二項) |
|
|
|
|
|
A |
在類方法中可用this來調用本類的類方法 |
|
B. |
在類方法中調用本類的類方法時可直接調用 |
|
C. |
在類方法中只能調用本類中的類方法 |
|
D. |
在類方法中調用實例方法需要先創建對象 |
三、 判斷題
- 類可以看成一類對象的模板,對象可以看成該類的一個具體實例。( T )
- 如果沒有為類中的某些成員賦初始值,Java會為類成員賦予固定的初始值,如數值變量的值為0,布爾變量的值為true,未初始化的引用為null。( F )
- Java中所有的變量,不管是成員變量還是局部變量,在使用前都必須進行初始化。( F )
- 在Java中對象可以賦值,只要使用賦值運算符即可,相當於生成了一個各屬性與賦值對象相同的新對象。( F )
- System.out.println(“Hello java!”)中out是System類的一個靜態成員變量。( T )
- 構造方法用於創建對象,一般不允許有任何返回值,因此需要在構造方法返回類型處標注為void。( F )
- Java語言為所有的Java程序自動導入包“java.lang”,因此Java程序可以直接用“java.lang”中的類和接口。( T )
四、 簡答題
- 面向過程和面向對象的區別。(5分)
面向過程:
就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象:
是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
- 類和對象的關系
類是對象的抽象化,對象是類的實例化
- 構造方法的作用和特征
構造函數特征:無返回值、名字與類名相同
作用:分配內存、初始化變量
- this關鍵字的作用和用法
一、 this關鍵字主要有三個應用:
(1)this調用本類中的屬性,也就是類中的成員變量;
(2)this調用本類中的其他方法;
(3)this調用本類中的其他構造方法,調用時要放在構造方法的首行。
this的作用是在類中通過this訪問自身的屬性和方法。
- 簡述static關鍵字的作用。
提示:從static可以修飾變量,方法,代碼塊,內部類四個方面來回答。(5分)
static在Java語言中的使用有四種:(變量、方法、代碼塊、內部類)
1、static變量
按照是否靜態的對類成員變量進行分類可分兩種:一種是被static修飾的變量,叫靜態變量或類
變量;另一種是沒有被static修飾的變量,叫實例變量。
兩者的區別是:
對於靜態變量在內存中只有一個拷貝(節省內存),JVM只為靜態分配一次內存,在加載類的過
程中完成靜態變量的內存分配,可用類名直接訪問(方便),當然也可以通過對象來訪問(但是這是不推薦的)。
對於實例變量,沒創建一個實例,就會為實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影響(靈活)。
2、靜態方法
靜態方法可以直接通過類名調用,任何的實例也都可以調用,因此靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變量和實例方法(就是不帶static的成員變量和成員成員方法),只能訪問所屬類的靜態成員變量和成員方法。因為實例成員與特定的對象關聯!這個需要去理解,想明白其中的道理,不是記憶!!!
因為static方法獨立於任何實例,因此static方法必須被實現,而不能是抽象的abstract。
3、static代碼塊
static代碼塊也叫靜態代碼塊,是在類中獨立於類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM加載類時會執行這些靜態的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現的先后順序依次執行它們,每個代碼塊只會被執行一次。
五、 編碼題
- 請定義一個交通工具(Vehicle)的類其中有: 屬性: 速度(speed)、 體積(size)等,方法:移動(move())、設置速度(setSpeed(int speed))、加速 speedUp()、減速 speedDown()等。最后在測試類 Vehicle 中的 main()中實例化一個交通工具對象並通過方法給它初始化 speed,size 的值並且通過打印出來。另外調用加速、減速的方法對速度進行改變。
1 public class Vehicle { 2 double speed; 3 double size; 4 5 public void move() { 6 System.out.println(""+"它的空間是"+size); 7 } 8 9 public void setSpeed(int speed) { 10 System.out.println("汽車的速度是:"+speed); 11 } 12 13 public void speedUp() { 14 System.out.println("汽車的原來速度是:"+speed); 15 speed+= 20; 16 System.out.println("汽車加速后的速度是:"+speed); 17 } 18 19 public void speedDown(double speed) { 20 //System.out.println("汽車的原來速度是:"+speed); 21 speed-=20; 22 System.out.println("汽車加減速后的速度是:"+speed); 23 } 24 25 public static void main(String[] args) { 26 Vehicle v = new Vehicle(); 27 v.speed = 60; 28 v.size = 4; 29 v.setSpeed(60); 30 v.speedUp(); 31 v.speedDown(60); 32 } 33 }
2.編寫 Java 程序用於顯示人的姓名和年齡。定義一個人類Person。 該類中應該有兩個私有屬性: 姓名 (name) 和年齡 (age) 。定義構造方法用來初始化數據成員。再定義顯示(display()) 方法將姓名和年齡打印出來。在 main 方法中創建人類的實例然后將信息顯示。
public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public void display() { System.out.println("姓名\t年齡"); System.out.println(name + "\t" + age+"歲"); } public static void main(String[] args) { Person p = new Person("李四",20); p.display(); } }
3.定義一個圓類——Circle,在類的內部提供一個屬性:半徑(r),同時 提供 兩個 方 法 : 計算 面積 ( getArea() ) 和 計算 周長(getPerimeter()) 。 通過兩個方法計算圓的周長和面積並且對計算結果進行輸出。最后定義一個測試類對 Circle 類進行使用。
1 public class Circle { 2 double r; 3 //定義構造器 4 public Circle(double r) { 5 this.r = r; 6 } 7 //計算 面積 8 public void getArea() { 9 double A = Math.PI*r*r; 10 System.out.print("圓的面積是:"); 11 System.out.printf("%.2f",A); 12 } 13 //計算 周長 14 public void getPerimeter() { 15 double P = Math.PI*2*r; 16 System.out.print("\n"+"圓的周長是:"); 17 System.out.printf("%.2f",P); 18 } 19 public static void main(String[] args) { 20 Circle c = new Circle(6); 21 c.getArea(); 22 c.getPerimeter(); 23 24 } 25 }
4.構造方法與重載:定義一個網絡用戶類,要處理的信息有用戶 ID、用戶密碼、 email 地址。在建立類的實例時把以上三個信息都作為構造函數的參數輸入, 其中用戶 ID 和用戶密碼時必須缺省時 email地址是用戶 ID 加上字符串"@gameschool.com"。
1 public class user { 2 // 三個成員變量 3 int ID; 4 String password; 5 String email; 6 7 // 3個參數的構造方法 8 public user(int ID, String password, String email) { 9 super(); 10 this.ID = ID; 11 this.password = password; 12 this.email = email; 13 } 14 15 // 2個參數的構造方法 16 public user(int ID, String password) { 17 super(); 18 this.ID = ID; 19 this.password = password; 20 this.email = ID + "@gameschool.com"; 21 } 22 23 // 顯示方法 24 public void display() { 25 System.out.println("用戶ID\t\t用戶密碼\t\t用戶email"); 26 System.out.println(ID + "\t\t" + password + "\t" + email); 27 } 28 29 public static void main(String[] args) { 30 user u = new user(123456, "Lsx152751", "1527510008Qqq.com"); 31 u.display(); 32 } 33 34 }
六、 可選題
- 定義一個類 Calculaion, 其中包含四個方法: 加(add()) 、 減(sub()) 、乘(times()) 和除(div()) 。 創建一個具有 main()函數的類。 在 main()函數中創建一個 Calculation 的實例對象並對其中的方法進行調用。
1 public class Calculation { 2 double a; 3 double b; 4 5 // 構造器 6 public Calculation(double a, double b) { 7 super(); 8 this.a = a; 9 this.b = b; 10 } 11 12 // 加法 13 public void add() { 14 double A = a + b; 15 System.out.println("加法:" + A); 16 } 17 18 // 減法 19 public void sub() { 20 double B = a - b; 21 System.out.println("減法:" + B); 22 } 23 24 // 乘法 25 public void times() { 26 double C = a * b; 27 System.out.println("乘法:" + C); 28 } 29 30 // 除法 31 public void div() { 32 double D = a / b; 33 System.out.println("除法:" + D); 34 } 35 public static void main(String[] args) { 36 Calculation c = new Calculation(12.6,5.7); 37 c.add(); 38 c.sub(); 39 c.times(); 40 c.div(); 41 } 42 43 }
2.定義一個類 Draw , 在 類 中 提供 3 個 方法:輸出直角三角形(drawTrian()) 、 輸出矩形(drawRec()) 及平行四邊形(drawPra()) 。通過方法可以輸出由“*” 組成的一個圖形。 同時在類中包含兩個屬性:星號的個數(count) 、行數(lines) 。最后在測試類中進行調用。
1 public class Draw { 2 int count; 3 int lines; 4 5 // 構造器 6 public Draw(int count, int lines) { 7 super(); 8 this.count = count; 9 this.lines = lines; 10 } 11 12 //輸出直角三角形 13 public void drawTrian(){ 14 for(int i = 0;i<=lines;i++){ 15 for(int j = 0;j<=i;j++){ 16 System.out.print(" *"); 17 } 18 System.out.println(); 19 } 20 System.out.println("------------------------------------------"); 21 } 22 //輸出矩形 23 public void drawRec(){ 24 for(int i=0;i<=lines;i++){ 25 for(int j=0;j<=count;j++){ 26 System.out.print(" *"); 27 } 28 System.out.println(); 29 } 30 System.out.println("------------------------------------------"); 31 } 32 33 //輸出平行四邊形 34 public void drawPra() { 35 for (int i = 0; i < lines; i++) { 36 for (int k = 0; k < i; k++) { 37 System.out.print(" "); 38 } 39 for (int j = 0; j < count; j++) { 40 System.out.print(" *"); 41 } 42 System.out.println(); 43 } 44 } 45 46 public static void main(String[] args) { 47 Draw d= new Draw(10,5); 48 d.drawTrian(); 49 d.drawRec(); 50 d.drawPra(); 51 } 52 53 }
3.創建一個空調,並調用制冷、制熱、通風功能。空調包含的屬性有品牌、匹數、溫度,功能有加熱、制冷、通風等功能。
public class Airconditioner { String brand; String horsepower; int temperature; // 構造器 public Airconditioner(String brand, String horsepower, int temperature) { this.brand = brand; this.horsepower = horsepower; this.temperature = temperature; } //空調介紹 public void introduce(){ System.out.println("品牌\t匹數\t溫度"); System.out.println(brand+"\t"+horsepower+"\t"+temperature); } //加熱 public void warm(){ System.out.println("空調溫度是:"+temperature); temperature+=5; System.out.println("空調上調后的溫度是:"+temperature); } //制冷 public void refrigeration(){ System.out.println("空調溫度是:"+temperature); temperature-=5; System.out.println("空調下調后的溫度是:"+temperature); } public static void main(String[] args) { Airconditioner a = new Airconditioner("格力","3匹",25); a.introduce(); a.warm(); a.refrigeration(); } }
4.定義一個表示學生信息的類 Student,要求如下:
(1)類 Student 的屬性如下:
sNO 表示學號; sName 表示姓名; sSex 表示性別; sAge 表示
年齡;sJava:表示 Java 課程成績。
(2)類 Student 帶參數的構造方法:
在構造方法中通過形參完成對成員變量的賦值操作。
(3)類 Student 的方法成員:
getNo():獲得學號;
getName():獲得姓名;
getSex():獲得性別;
getAge()獲得年齡;
getJava():獲得 Java 課程成績
(4) 根據類 Student 的定義,創建五個該類的對象,輸出每個學生的信息,計算並輸出這五個學生 Java 語言成績的平均值,以及計算並輸出他們 Java 語言成績的最大值和最小值。
public class Student { String sNO; String sName; String sSex; int sAge; int sJava; // 構造器 public Student(String sNO, String sName, String sSex, int sAge, int sJava) { super(); this.sNO = sNO; this.sName = sName; this.sSex = sSex; this.sAge = sAge; this.sJava = sJava; } public String getsNO() { return sNO; } public String getsName() { return sName; } public String getsSex() { return sSex; } public int getsAge() { return sAge; } public int getsJava() { return sJava; } public void introduce(){ System.out.println(sNO+"\t"+sName+"\t"+sSex+"\t"+sAge+"\t"+sJava); } public static void main(String[] args) { System.out.println("學號\t姓名\t性別\t年齡\tJava成績"); Student s1 = new Student("00001","劉能","男",21,80);s1.introduce(); Student s2 = new Student("00002","謝大腳","女",26,70);s2.introduce(); Student s3 = new Student("00003","趙四","男",31,40);s3.introduce(); Student s4 = new Student("00004","謝廣坤","男",34,90);s4.introduce(); Student s5 = new Student("00005","小蒙","女",26,100);s5.introduce(); //平均成績 int aver = (s1.sJava+s2.sJava+s3.sJava+s4.sJava+s5.sJava)/5; System.out.println("\n五個同學的Java成績平均值是:"+aver); //成績傳入數組 int[] arr ={s1.sJava,s2.sJava,s3.sJava,s4.sJava,s5.sJava}; Arrays.sort(arr); System.out.println("\n五個同學Java成績排序是:"+Arrays.toString(arr)); System.out.println("\nJava成績的最高分是:"+arr[arr.length-1]+"分"+" Java成績的最低分是:"+arr[0]+"分"); } }