JavaSE 軟件工程師 認證考試試卷2


JavaSE 軟件工程師

認證考試試卷

 

筆試

 

 

考試時間150分鍾

 

總分 100分

 

姓    名_______________________

身份證號_______________________

准考證號_______________________

 

 

 

 

考試結束后考卷必須收回,否則考試成績無效

 

 

尚學堂JavaSE軟件工程師認證考試試卷

 

一、    填空題(共20個題目,總計20分)

 

  1. 使用Java開發應用程序包括編寫源程序,編譯源程序,解釋並運行三個步驟,其中Java源程序編譯后生成的字節碼文件的擴展名為   .class             
  2. 在Java中,浮點型變量的類型有float和double兩種,對於float型變量,內存分配4個字節,對於double型變量,內存分配   8       個字節。
  3. 在Java JDK1.7之前,switch只能支持byte、short、char、int或者其對應的封裝類以及Enum類型。在JDK1.7中又加入了      String      類型。
  4. 在循環結構中,如果想跳出循環體,結束整個循環結構可以使用  braek       語句。
  5. 類是組成Java程序的基本要素,類體有兩部分構成:一部分是變量的定義,另一部分是方法      的定義。
  6.   方法重載        是指在一個類中可以有多個方法具有相同的名字,但這些方法的參數類型、個數、順序必須不同,與方法的返回值和訪問修飾符無關。
  7.    package      關鍵字作為Java源文件的第一條非注釋性語句,指明該源文件定義的類所有的包。
  8. 在Java中如果一個類中沒有顯示使用extends關鍵字標明這個類繼承自哪個類,那么這個類就默認是   Object       的子類。
  9. 聲明數組僅僅是給出了數組的名字和元素的數據類型,要想真正地使用數組還必須使用    new     關鍵字在堆內存中分配內存空間。
  10. 在Java中有二維數組int [ ] [ ] array={{1,2,3},{4,5}} ,可以使用array[0].length        得到二維數組中第二維中第一個數組的長度。
  11. 在Java中使用java.lang包中的  StringBuffer  類來創建一個字符串對象,它代表一個字符序列可變的字符串,可以通過相應的方法改變這個字符串對象的字符序列。
  12. 在Java中每個Java基本類型在java.lang包中都在一個相應的包裝類,把基本類型數據轉換為對象,其中包裝類Integer是java.lang.Number   的直接子類。
  13. 對於一個已經不被任何引用變量引用的對象,當垃圾回收器准備回收該對象所占用的內存時,將自動調用該對象的  finalize()   方法。
  14. Math類提供了許多數學運算的靜態方法,其中   random()        方法是用來生成隨機數的方法,其返回類型是double類型。
  15. 在Java中對於程序可能出現的檢查時異常,要么用try…catch語句捕獲並處理它,要么使用    throws       語句拋出它,由上一級調用者來處理。
  16. read方法從輸入流中順序讀取源中的單個字節數據,該方法返回字節值(0-255之間的一個整數),如果到達源的末尾,該方法返回   -1       
  17. 在Java中編寫實現多線程應用有兩種途徑:一種是繼承Thread類創建線程,另一種是實現    Runnable         接口創建線程。
  18.  鏈表        結構是一種由多個節點組成的數據結構,並且每個節點包含有數據以及指向下一個節點的引用。
  19. 在Java Socket網絡編程中,開發基於TCP協議的服務器端程序使用的套接字是    Serversocket        
  20. 在Java中使用SAX解析XML文檔主要有兩個部分,一個是SAX解析器,一個是  事件處理器        

 

 

二、    選擇題(共25個題目,總計25分)

 

1)

Java中,源文件Test.java中包含如下代碼,則程序編譯運行的結果是(  B  )。(選擇一項)

 

public class Test {

         public static void main(String[ ] args) {

                  system.out.println("Hello!");

         }

}

 

 

 

 

A

輸出:Hello!

 

B.

編譯出錯,提示“無法解析system”

 

C.

運行正常,但沒有輸出任何內容

 

D.

運行時出現異常

 

2)

Java中,下面( AB   )語句能正確通過編譯。(選擇兩項)

 

 

 

 

A

System.out.println(1+1);    

 

B.

char i =2+'2';

System.out.println(i);

 

C.

String s="on"+'one';

 

D.

int b=255.0;

 

3)

分析如下Java代碼,編譯運行的輸出結果是( A   )。(選擇一項)

 

public static void main(String[ ] args) {

                  boolean a=true;

                  boolean b=false;

                  if (!(a&&b)) {

                          System.out.print("!(a&&b)");

                  }else if (!(a||b)) {

                          System.out.println("!(a||b)");

                  }else {

                          System.out.println("ab");

                  }

}

 

 

 

 

A

!(a&&b)

 

B.

!(a||b)

 

C.

ab

 

D.

!(a||b)ab

 

 

 

 

 

 

4)

Java中有如下代碼,則編譯運行該類的輸出結果是(  D  )。(選擇一項)

 

public static void main(String[ ] args) {

                  for(int i=0;i<10;i++){

                          if (i%2!=0)

                                   return;

                          System.out.print(i);

                  }

}

 

 

 

 

A

13578

 

B.

02468

 

C.

0123456789

 

D.

0

 

5)

Java的程序類中如下方法定義正確的是(   AD )。(選擇兩項)

 

 

 

 

A

public int ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

B.

public String ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

C.

public void ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

D.

public float ufTest(int num){

                  int sum=num+100;

                  return sum;

}

 

6)

分析下面的Java源程序,編譯后的運行結果是(  B  )。(選擇一項)

 

import java.util.*;

public class Test {

         public static void main(String[ ] args) {

                  int [ ] numbers=new int[ ]{1,2,3};

                  System.out.println(Arrays.binarySearch(numbers, 2));

         }

}

 

 

輸出

 

A

輸出:0

 

B.

輸出:1

 

C.

輸出:2

 

D.

輸出:3

 

 

7)

分析如下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;

 

8)

Java中,以下定義數組的語句正確的是( CD   )。(選擇兩項)

 

 

 

 

A

int  t[10]=new int[ ];

 

B.

char [ ]a=”hello”;

 

C.

String [ ] s=new String [10];

 

D.

double[ ] d [ ]=new double [4][ ];

 

9)

分析如下Java代碼,該程序編譯后的運行結果是(  D  )。(選擇一項)

 

public static void main(String[ ] args) {

                  String str=null;

                  str.concat("abc");

                  str.concat("def");

                  System.out.println(str);

         }

 

 

 

 

A

null

 

B.

abcdef

 

C.

編譯錯誤

 

D.

運行時出現NullPointerException異常

 

 

10)

給定如下Java代碼,編譯運行后,輸出結果是(   C )。(選擇一項)

 

public class Test {

         public static void main(String[ ] args) {

                  StringBuffer a=new StringBuffer("A");

                  StringBuffer b=new StringBuffer("B");

                  operate(a, b);

                  System.out.println(a+","+b);

         }

         static void operate(StringBuffer x,StringBuffer y){

                  x=new StringBuffer("BBB");

                  y=x;

         }

}

 

 

 

 

A

BBB,B

 

B.

BBB,BBB

 

C.

A,B

 

D.

A,A

 

11)

給定如下Java程序,Test類中的四個輸出語句輸出結果依次是(  C  )。(選擇一項)

 

class Person {

         String name="person";

         public void shout(){

                  System.out.println(name);

         }

}

class Student extends Person{

         String name="student";

         String school="school";

}

public class Test {

         public static void main(String[ ] args) {

                  Person p=new Student();

                  System.out.println(p instanceof Student);

                  System.out.println(p instanceof Person);

                  System.out.println(p instanceof Object);;

                  System.out.println(p instanceof System);

         }

}

 

 

 

 

A

true,false,true,false

 

B.

false,true,false,false

 

C.

true,true,true,編譯錯誤

 

D.

true,true,false,編譯錯誤

 

12)

 

Java中,LinkedList類與ArrayList類同屬於集合框架類,下列(  CD  )選項中是LinkedList類有而ArrayList類沒有的方法。(選擇兩項)

 

 

 

 

A

add(Object o)

 

B.

add(int index,Object o)

 

C.

getFirst()

 

D.

removeLast()

 

13)

如下Java代碼,輸出的運行結果是(  A  )。(選擇一項)

 

public class Test {

         public static void main(String[ ] args) {

                  List<String> list=new ArrayList<String>();

                  list.add("str1");

                  list.add(2, "str2");

                  String s=list.get(1);

                  System.out.println(s);

         }

}

 

 

 

 

A

運行時出現異常

 

B.

正確運行,輸出str1

 

C.

正確運行,輸出str2

 

D.

編譯時出現異常

 

14)

Java中關於靜態方法,以下說法中正確的是( A  C)。(選擇兩項)

 

 

 

 

A

靜態方法中不能直接調用非靜態方法

 

B.

非靜態方法中不能直接調用靜態方法

 

C.

靜態方法可以用類名直接調用

 

D.

靜態方法里可以使用this

 

15)

如下Java代碼運行的結果是(  B  )。(選擇一項)

 

public class Test {

         final int age;

         public Test(){

                  age=10;

         }

         public static void main(String[ ] args) {

                  System.out.println(new Test().age);

         }

}

 

 

 

 

A

輸出:0

 

B.

輸出:10

 

C.

輸出:null

 

D.

運行時出現異常

 

 

 

16)

Java中關於abstract關鍵字,以下說法正確的是( AB   )。(選擇兩項)

 

 

 

 

A

abstract類中可以沒有抽象方法

 

B.

abstract類的子類也可以是抽象類

 

C.

abstract方法可以有方法體

 

D.

abstract類可以創建對象

 

17)

Java中,下列關於讀寫文件的描述錯誤的是( B   )。(選擇一項)

 

 

 

 

A

Reader類的read()方法用來從源中讀取一個字符的數據

 

B.

Reader類的read(int n )方法用來從源中讀取一個字符的數據

 

C.

Writer類的write(int n)方法用來向輸出流寫入單個字符

 

D.

Writer類的write(String str)方法用來向輸出流寫入一個字符串

 

18)

分析如下Java代碼,有標注的四行代碼中,有錯誤的是第(  D  )處。(選擇一項)

 

import java.io.FileWriter;

import java.io.IOException;

public class Test {

         public static void main(String[ ] args) {

                  String str = "Hello World";

                  FileWriter fw = null;

                  try {

                          fw = new FileWriter("c:\\hello.txt"); // 1

                          fw.write(str);                     // 2

                  } catch (IOException e) {

                          e.printStackTrace();                // 3

                  } finally {

                          fw.close();                        // 4

                  }

         }

}

 

 

 

 

A

1

 

B.

2

 

C.

3

 

D.

4

 

19)

JavaIO操作中,(   BD )方法可以用來刷新流的緩沖。(選擇兩項)

 

 

 

 

A

void release()

 

B.

void close()

 

C.

void remove()

 

D.

void flush()

 

 

 

 

 

20)

下列關於線程的優先級說法中,正確的是( BC  )。(選擇兩項)

 

 

 

 

A

線程的優先級是不能改變的

 

B.

線程的優先級是在創建線程時設置的

 

C.

在創建線程后的任何時候都可以重新設置

 

D.

線程的優先級的范圍在1-100之間

 

21)

下列關於Java線程的說法正確的是(  B  )。(選擇一項)

 

 

 

 

A

每一個Java線程可以看成由代碼、一個真實的CPU以及數據三部分組成

 

B.

創建線程的兩種方法中,從Thread類中繼承的創建方式可以防止出現多父類的問題

 

C.

Thread類屬於java.util程序包

 

D.

使用new Thread(new X()).run();方法啟動一個線程

 

22)

Java網絡編程中,使用客戶端套接字Socket創建對象時,需要指定( A   )。(選擇一項)

 

 

 

 

A

服務器主機名稱和端口

 

B.

服務器端口和文件

 

C.

服務器名稱和文件

 

D.

服務器地址和文件

 

23)

Java的反射中關於代理說法正確的是( BD   )。(選擇兩項)

 

 

 

 

A

動態代理類與靜態代理類一樣,必須由開發人員編寫源代碼,並進行編譯

 

B.

代理類與被代理類具有同樣的接口

 

C.

動態代理是public、final和abstract類型的

 

D.

java.lang.reflect包中的Proxy類提供了創建動態代理類的方法

 

24)

在編寫XML 文件時,下列關於屬性的聲明說法正確的是(AD    )。(選擇兩項)

 

 

 

 

A

標記中可以使用多個屬性

 

B.

屬性可以出現在起始標記或結束標記中

 

C.

屬性是不區分大小寫的

 

D.

屬性值必須用引號引上

 

25)

在使用UDP套接字通信時,常用(  D  )類把要發送的信息打包。(選擇一項)

 

 

 

 

A

String

 

B.

DatagramSocket

 

C.

MulticastSocket

 

D.

DatagramPacket

 

 

 

 

 

 

三、    判斷題(共20個題目,總計10分,正確,錯誤×

 

  1. Java語言是一種面向對象的語言,具有較好的安全性和可移植性及與平台無關等特性。(  T )
  2. 假設有一個Java源程序文件,它只定義了一個具有public屬性的類Hello,那么編譯該文件的命令是“javac Hello”。(  F  )
  3. 在編譯Java源程序時,計算機根本不會去識別各個變量名的具體含義,因此命名規范對編寫Java程序而言不是必要的,而且有可能會降低編寫Java源程序的效率。(  F  )
  4. 在Java中任何一個子類的構造方法都必須調用其父類的構造方法(包括隱式調用),並且調用父類的構造方法的語句必須是子類構造方法的第一條語句。(  T  )
  5. Java語言為所有的Java程序自動導入包“java.lang”,因此Java程序可以直接用“java.lang”中的類和接口。(  T  )
  6. Java中的類不允許多重繼承,但接口支持多重繼承。(   T )
  7. 父類Person中定義了一個private void show()的方法,那么子類要重寫這個方法時,方法的訪問修飾符可以是默認的,protected或public。(  F  )
  8. 抽象方法不能含有方法體,並且必須定義在抽象類中。(  F  )
  9. 構造方法用於創建對象,一般不允許有任何返回值,因此需要在構造方法返回類型處標注為void。( F   )
  10. 在Java中對象可以賦值,只要使用賦值運算符即可,相當於生成了一個各屬性與賦值對象相同的新對象。( F   )
  11. Java允許創建不規則數組,即Java多維數組中各行的列數可以不同。(  T  )
  12. 在Java異常處理中可以使用多個catch子句,此時應將異常類的父類Exception放到第一個catch子中。( F   )
  13. 與未加訪問控制符的缺省情況相比,public和protected修飾符擴大了類及其屬性和方法的被訪問范圍,private修飾符則縮小了這種范圍。(  T  )
  14. 泛型是JavaSE1.7的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。Java語言引入泛型的好處是安全簡單。(  F  )
  15. List是有序的Collection,使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引來訪問List中的無素,這類似於Java的數組。(  T  )
  16. 在使用File類中的delete()方法時,刪除時可能文件不存在,所以我們最好先判斷一下是否存在,不然會出現NullPointerException異常。( F   )
  17. 當一個線程進入一個對象的一個synchronized方法后,其它線程不可以再進入該對象的其它方法執行。( T   )
  18. TCP/IP傳輸控制協議是Internet的主要協議,定義了計算機和外設進行通信的規則。TCP/IP網絡參考模型包括七個層次:應用層、會話層、表示層、傳輸層、網絡層、鏈路層和物理層。( F   )
  19. Java反射機制是指:Java程序可以加載一個運行時才得知名稱的類,獲悉其完整結構信息(但不包括methods定義),並生成其對象實體、或對其fields設值、或調用其methods。(   T )
  20. XML在不同的語言里解析方式都是一樣的,只不過實現的語法不同而已。基本的解析方式有兩種,一種叫SAX,另一種叫DOM。SAX是基於事件流的解析,DOM是基於XML文檔樹結構的解析。(T    )

 

 

四、    簡答題(共5個題目,總計25分)

  1. Java異常處理中,關鍵字try、catch、finally、throw、throws分別代表什么含義?(5分)

    答:   try:用來指定一塊預防所有“異常”的程序。(1分)

    catch:子右緊跟在try塊后面,用於指定你想要捕捉的“異常”的類型。(1分)

    finally:為確保一段代碼不管發生什么“異常”都被執行一段代碼。(1分)

    throw:語句用來明確地拋出一個“異常”,在方法體中。(1分)

    throws:用來標明一個方法可以拋出的各種“異常”,寫在方法名的后面。(1分)

  1. 請你簡述sleep( )和wait( )有什么區別?(5分)

    sleep是線程類(Thread)的方法;(0.5分)作用是導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復;(1分)  調用sleep()不會釋放對象鎖。(1分)

 

    wait是Object類的方法;(0.5分)對此對象調用wait方法導致本線程放棄對象鎖,進入等 待此對象的等待鎖定池。(1分)只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池,准備獲得對象鎖進行運行狀態。(1分)

 

  1. 請你簡述HashMap和Hashtable的區別?(5分)

    答:共同點:

    1)       二者都實現了Map接口,是將惟一鍵映射到特定的值上。(1分)

    2)       底層都采用哈希表作為存儲結構,查詢速度快,在很多情況下可互用。(1分)

    主要區別:

    1)       Hashtable繼承Dictionary類,HashMap是Java1.2引進的Map實現。(1分)

    2)       Hashtable的線程安全的,而HashMap不是。在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap就必須為之提供外同步。(1分)

    3)       HashMap沒有排序,允許一個null鍵和多個null值,而Hashtable不允許。(0.5分)

    4)       HashMap把Hashtable的contains( )去掉了,改成containsValue和containsKey,因為contains方法容易讓人引起誤解。(0.5分)

 

  1. 什么是設計模式?設計模式的作用?(5分)

    設計模式是一套被反復使用的、多數人知曉、經過分類編目的優秀代碼設計經驗的總結。每個設計模式都是特定環境下特定問題的處理方法。(1分)

    設計模式主要作用如下:

    1)       重用設計和代碼。重用設計比重用代碼更有意義,自動帶來代碼重用。(1分)

    2)       提高擴展性。大量使用面向接口編程,預留擴展插槽,新的功能或特性很容易加入到系統中來。(1分)

    3)       提高靈活性。通過組合提高靈活性,可以允許代碼修改平穩發生,對一處的修改不會波及到很多其他模塊。(1分)

    4)       提高開發效率。正確使用設計模式,可以節省大量的時間。(1分)

 

  1. TCP/IP協議棧中,TCP協議和UDP協議的聯系和區別?(5分)

    答:聯系:

    TCP和UDP是TCP/IP協議棧中傳輸層的兩個協議,它們使用網絡層功能把數據包發送到目的地,從而為應用層提供網絡服務。(1分)

    區別:

    1. TCP是面向連接的傳輸。UDP是無連接的傳輸。(1分)

    2. TCP保證數據按照發送順序到達,UDP無法保證。(1分)

    4. TCP是可靠性傳輸,而UDP則是不可靠傳輸。(1分)

    5. UDP因為少了很多控制信息,所以傳輸速度比TCP速度快。(0.5分)

    6. TCP適合用於傳輸大量數據,UDP適合用於傳輸小量數據。(0.5分)

    比喻: TCP的server和client之間通信就好比兩個人打電話。UDP的server和client之間的通信就像兩個人發電報或者發短信。

 

  1 一、    編碼題(共3個題目,總計20分)
  2 
  3 1.    編寫兩個線程,一個線程打印1-52的整數,另一個線程打印字母A-Z。打印順序為12A34B56C….5152Z。即按照整數和字母的順序從小到大打印,並且每打印兩個整數后,打印一個字母,交替循環打印,直到打印到整數52和字母Z結束。(8分)
  4 要求:
  5 (1)    編寫打印類Printer,聲明私有屬性index,初始值為1,用來表示是第幾次打印。
  6 (2)    在打印類Printer中編寫打印數字的方法print(int i),3的倍數就使用wait()方法等待,否則就輸出i,使用notifyAll()進行喚醒其它線程。
  7 (3)    在打印類Printer中編寫打印字母的方法print(char c),不是3的倍數就等待,否則就打印輸出字母c,使用notifyAll()進行喚醒其它線程。
  8 (4)    編寫打印數字的線程NumberPrinter繼承Thread類,聲明私有屬性private Printer p;在構造方法中進行賦值,實現父類的run方法,調用Printer類中的輸出數字的方法。
  9 (5)    編寫打印字母的線程LetterPrinter繼承Thread類,聲明私有屬性private Printer p;在構造方法中進行賦值,實現父類的run方法,調用Printer類中的輸出字母的方法。
 10 (6)    編寫測試類Test,創建打印類對象,創建兩個線程類對象,啟動線程。
 11 
 12 public class Printer {
 13 /**
 14        *1)編寫打印類Printer,聲明私有屬性index,初始值為1,用來表示是第幾次打印。
 15        * 2)    在打印類Printer中編寫打印數字的方法print(int i),3的倍數就使用wait()方法等待,
 16        * 否則就輸出i,使用notifyAll()進行喚醒其它線程。
 17        * 3)    在打印類Printer中編寫打印字母的方法print(char c),不是3的倍數就等待,
 18        * 否則就打印輸出字母c,使用notifyAll()進行喚醒其它線程。
 19  */
 20     private int index = 1;
 21     //打印數字的方法print(int i)
 22     public synchronized void print(int i){
 23         while(index%3==0){
 24             try {
 25                 wait();
 26             } catch (InterruptedException e) {
 27                 e.printStackTrace();
 28             }
 29         }
 30             System.out.println(i);
 31             index++;
 32             notifyAll();
 33     }
 34     public synchronized void print(char c){
 35         while(index%3!=0){
 36             try {
 37                 wait();
 38             } catch (InterruptedException e) {
 39                 e.printStackTrace();
 40             }
 41         }
 42             System.out.println(c);
 43             index++;
 44             notifyAll();
 45     }
 46 }
 47 public class NumberPrinter extends Thread{
 48 /**
 49  *  4)編寫打印數字的線程NumberPrinter繼承Thread類,聲明私有屬性private Printer p;
 50    * 在構造方法中進行賦值,實現父類的run方法,調用Printer類中的輸出數字的方法。
 51  */
 52     private Printer p;
 53 
 54     public NumberPrinter(Printer p) {
 55         this.p = p;
 56     }
 57     @Override
 58         public void run() {
 59             for(int i=1;i<53;i++){
 60                 p.print(i);
 61             }
 62         }
 63 }
 64 
 65 public class LetterPrinter extends Thread{
 66 /**
 67  *  * 5)編寫打印字母的線程LetterPrinter繼承Thread類,聲明私有屬性private Printer p;
 68        * 在構造方法中進行賦值,實現父類的run方法,調用Printer類中的輸出字母的方法。
 69  */
 70     private Printer p;
 71 
 72     public LetterPrinter(Printer p) {
 73         this.p = p;
 74     }
 75     @Override
 76         public void run() {
 77            for(char j='A';j<='Z';j++){
 78                p.print(j);
 79            }
 80         }
 81 
 82 }
 83 public class test_2 {
 84     public static void main(String[] args) {
 85         //創建公共打印資源對象
 86         Printer p = new Printer();
 87         //創建數字打印線程
 88         Thread t1 = new NumberPrinter(p);
 89         //創建字母打印線程
 90         Thread t2 = new LetterPrinter(p);
 91         //啟動線程
 92         t1.start();
 93         t2.start();
 94     }
 95 }
 96 
 97 
 98 2.    使用IO包中的類讀取D盤上exam.txt文本文件的內容,每次讀取一行內容,將每行作為一個輸入放入ArrayList的泛型集合中並將集合中的內容使用加強for進行輸出顯示。(5分)
 99 
100 public static void main(String[] args) throws IOException {
101         BufferedReader br = new BufferedReader(new InputStreamReader(
102                 new FileInputStream("D:\\exam.txt")));
103         List<String> list = new ArrayList<>();
104         String num=null;
105         while((num=br.readLine())!=null){
106             list.add(num);
107         }
108         for (String s : list) {
109             System.out.println(s);
110         }
111         
112     }
113 3.    使用反射機制完成學生對象的創建並輸出學生信息。(7分)
114 要求:
115 (1)    定義一個學生類Student,其中包含姓名(String)、年齡(int)、成績(float)的屬性。
116 (2)    編寫帶參與無參構造方法。
117 (3)    重寫父類的toString()方法用於輸出學生的信息。
118 (4)    編寫測試類TestStudent,從鍵盤錄入學生的信息格式為(姓名:年齡:成績)一次性錄入使用“:”分隔,舉例(mary:20:90)。
119 (5)    使用String類的split方法按照“:”進行分隔。
120 (6)    調用Constructor的newInstance()方法並用分隔后的信息初始化學生對象。
121 (7)    調用重寫父類的toString()方法將學生信息進入輸出顯示。
122 
123 public class Student_3 {
124 private String name;
125     private int age;
126     private float grade;
127     
128     public Student_3() {
129     }
130 
131     public Student_3(String name, int age, float grade) {
132         this.name = name;
133         this.age = age;
134         this.grade = grade;
135     }
136 
137     @Override
138     public String toString() {
139         return "Student_3 ["+ name +" "+ age+" "+ grade +"]";
140     }
141     
142     
143 }
144 public class TestStudent_3 {
145     public static void main(String[] args) throws Exception {
146         Scanner sc = new Scanner(System.in);
147         System.out.println("錄入學生的信息格式為(姓名:年齡:成績):");
148         String info = sc.nextLine();
149         String[] s = info.split(":");
150         int age = Integer.parseInt(s[1]);
151         float grade =Float.parseFloat(s[2]);
152         Class<?> clazz = Class.forName("復習題二201511.Student_3");
153         Constructor<?> con = clazz.getConstructor(String.class,int.class,float.class);
154         Object obj = con.newInstance(s[0],age,grade);
155         Method m = clazz.getMethod("toString");
156         Object invoke = m.invoke(obj);
157         System.out.println(invoke);
158         
159     }
160 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM