JavaSE核心技術
姓名 _______________ 序號 _______________ 得分 _______________
第一部分:選擇題
1、 [ 單選題 ]
在java代碼中,以下哪些是聲明一個方法拋出異常的正確形式?請選擇一個正確答案:
( A )
A、void m() throws IOException{};
B、void m() throw IOException{};
C、void m(void) throws IOException{};
D、m() throws IOException{};
E、void m() {} throws IOException
解析:throw是語句拋出一個異常,throws是方法可能拋出異常的聲明。
2、 [ 單選題 ]
若在Java代碼中,某一個類定義中定義有如下的方法:static void testMethod( ) 該方法屬於 :
( C )
A、本地方法
B、最終方法
C、靜態方法
D、抽象方法
3、 [ 單選題 ]
在java代碼中,設 X 、Y 均為已定義的類名,下列聲明類X的對象x1的語句中正確的是:
( A )
A、X x1;
B、X x1= X ( ); 解析:少new
C、X x1=new Y( )
D、int X x1;
4、 [ 單選題 ]
下列哪一個是合法的標識符:
( )
A、12class 不能數字開頭
B、+void 只能字母、下划線、數字、$組成。
C、-5 負數
D、_black
解析:
1)、名稱只能由字母、數字、下划線、$符號組成
2)、不能以數字開頭
3)、名稱不能使用JAVA中的關鍵字。
4)、堅決不允許出現中文及拼音命名。
5、 [ 單選題 ]
Random.nextInt(20)得到的結果不可能是 ( C )
A、0
B、10
C、20
D、19
解析://隨機生成一個整數,這個整數的范圍就是[0,20)
6、 [ 單選題 ]
欲構造ArrayList類的一個實例,此類繼承了List接口,下列哪個方法是正確的 ( B )
A、ArrayList myList=new Object();
B、List myList=new ArrayList();
C、ArrayList myList=new List();
D、List myList=new List();
解析:
7、 [ 單選題 ]
下列數據類型的精度由高到低的順序是:
( B )
A、float,double,int,long
B、double,float,int,byte
C、byte,long,double,float
D、double,int,float,long
8、 [ 單選題 ]
下列針對int類型的私有屬性age的訪問器方法格式正確的是:
( C )
A、void getAge(int age)
B、int getAge(int age)
C、void setAge(int age)
D、int setAge()
9、 [ 單選題 ]
下列類頭定義中,錯誤的是:
( A )
A、public x extends y
B、public class x extends y
C、class x extends y implements y1
D、class x
10、 [ 單選題 ]
在java中,對於try和catch子句的排列方式,下面哪一項是正確的:
( A )
A、子類異常在前,父類異常在后
B、父類異常在前,子類異常在后
C、父類異常和子類異常不區分順序
D、父類異常和子類異常不能出現在同一個try程序段內
11、 [ 單選題 ]
以下關於迭代器Iterator描述正確的是:
( D )
A、Iterator 可以對所有實現了Collection接口的集合實現類,進行雙向迭代
B、通過迭代器,可以遍歷集合中的元素,可以對元素進行讀取和添加
C、全部正確
D、迭代器的設計初衷是替代 Java Collections Framework 中的 Enumeration
解析:
https://www.cnblogs.com/zyuze/p/7726582.html
12、 [ 單選題 ]
關於集合框架描述錯誤的是 ( D )
A、List和Set具有相同的父接口
B、List中的元素可以重復,而Set不可以重復
C、影響HashMap性能的因素在於其初始容量和加載因子,因此,HashMap中元素永遠不會灌滿Hash桶
D、在軟件實務中,應該為HashMap提供盡可能小的初始容量,當容量不足時候,使其自動擴容,以節約內存開銷
13、 [ 單選題 ]
以下關於HashMap的描述正確的是 ( B )
A、HashMap是映射的實現方式之一,每個鍵/值對都是由其內部的動態數組進行直接存儲
B、對於所有的鍵值對,可以直接導出形成Set集合
C、HashMap讀取的最快方式是應用迭代接口進行讀取
D、HashMap中的每個映射,都必須以鍵值對的方式進行整體Entry操作,不可以獨立獲取其key或是value
14、 [ 單選題 ]
對於以下程序,描述正確的是
public static void main(String[] args) {
List<int> data=new ArrayList<>();
data.add(1);
data.add(2);
data.add(3);
ListIterator<int> li=data.listIterator(1);
while(li.hasPrevious()){
System.out.println(li.previous());
}
} ( D )
A、輸出結果是1
B、輸出結果是2和1
C、無輸出結果
D、存在編譯錯誤
15、 [ 單選題 ]
以下關於字符串截取,描述錯誤的是 ( B )
A、Java中的字符串截取方法進行了重載。
B、Java中的字符串截取方法,可以從指定索引開始一直截取到最后一個字符。當指定索引不存在時候,返回空字符串。
C、對於字符串截取方法,subString(int beginIndex,int endIndex)返回值包含開始位置的字符,但不包含結束位置的字符。
D、對於區間字符串截取,java是從某一索引開始,到某一索引結束;而Oracle中則是從某一索引開始截取指定長度。
16、 [ 單選題 ]
對於字符串實現類,描述正確的是 ( D )
A、String 是定長字符串,一經定義長度不可以變,一旦長度發生變化,會產生新的字符串對象,但進行局部替換時候不會產生新字符串對象。
B、從Java1.5開始,新增了StringBuffer對象,用以處理動態字符串
C、String word=new String(“hello neusoft”)時候,內存中產生的字符串個數是一個。
D、對於動態字符串,如果需要保證其線程安全性,需要使用StringBuffer,如果在不涉及線程安全的環境中,建議使用StringBuilder,因為其性能更好。
17、 [ 單選題 ]
以下描述錯誤的是 ( B )
A、java中對於數據的輸入輸出是通過流實現的
B、java中的流分為輸入流和輸出流,輸入流用以向文件中寫入數據
C、對於I/O流Java提供了兩種實現手段,分別是字節流和字符流,但在底層,一切I/O都是基於字節流實現的
D、緩沖流的意圖在於通過空間消耗,換取時間上的效率
18、 [ 單選題 ]
在FileOutputStream類的構造方法中,下面哪個類是合法 ( A )
A、File
B、InputStream
C、OutputStream
D、FileOutputStream
19、 [ 單選題 ]
File類型中定義了方法( )來判斷一個文件是否存在 ( D )
A、createNewFile
B、contains
C、delete
D、exists
20、 [ 單選題 ]
在Java中,JDBC API定義了一組用於與數據庫進行通信的接口和類,它們包括在( )包中 ( B )
A、java.lang
B、java.sql
C、java.util
D、java.math
21、 [ 單選題 ]
初始化基本ResutlSet對象rst,獲取rst的第一行數據,以下正確的是
( B )
A、rst.hashNext()
B、rst.next()
C、rst.first()
D、rst.nextRow()
22、 [ 單選題 ]
Java編程中有關數據庫的事務(JDBC)的敘述正確的是?()
( B )
A、事務是通過 Statement對象控制的,默認每條語句一個事務
B、事務是通過 Connection對象控制的,調用conn.setAutoCommit(false)禁止自動提交
C、事務是通過 ResultSet對象控制的,當關閉 ResultSet對象時自動提交
D、Java中的事務不可以設置事務的隔離級別
23、 [ 單選題 ]
關於equals()與==描述正確的是 ( A )
A、如果一個類沒有重寫equals方法,那么equals可以用來比較兩個變量引用的內存對象是否相同
B、在String類中,equals()與==作用是相同的
C、在一個方法中,如果定義了如下語法:
String str1=”abcd”;
String str2=”abcd”;
此時,equals()返回true,而==返回false
D、在內存對象是否相同的判斷上,是不可以應用equals()的
24、 [ 單選題 ]
在Java語言中,以下關於hashCode的描述正確的是
( C )
A、如果兩個對象的hashCode相同,那么一定是同一個內存對象
B、即使兩個對象的hashCode不同,也有可能是同一個內存對象
C、即使兩個對象不同,也完全有可能存在相同的hashCode
D、即使是同一個內存對象,得到的hashCode也可能不同
25、 [ 單選題 ]
以下關於java日期格式組合正確的是 ( C )
A、yyyy-MM-dd :hh24:mi:ss
B、YYYY-MM-DD
C、yyyy-MM-dd HH:mm:ss
D、YYYY-MM-DD HH24:MI:SS
26、 [ 多選題 ]
下列哪兩個語句能夠創建一個InputStream輸入流並且打開文件“file.txt”准備讀取 ( BE )
A、InputStream in=new FileReader(“file.txt”);
B、InputStream in=new FileInputStream(“file.txt”);
C、InputStream in=new InputStreamFileReader (“file.txt”, “read”);
D、FileInputStream in=new FileReader(new File(“file.txt”));
E、FileInputStream in=new FileInputStream(new File(“file.txt”));
27、 [ 多選題 ]
Java程序代碼如下:
List a = new ArrayList();
a.add(“Alpha”);
a.add(“Bravo”):
a.add(“Charlie”);
a.add(“Delta”);
Iterator iter = a.iterator();
______________________
下列哪兩組的兩行代碼添加在虛線處,可按字典順序打印輸出ArrayList集合中的全部元素
( AC )
A、for (int i=0;i<a.size(); i++) System.out.println(a.get(i)));
B、for (int i=0; i < a.size(); i++) System.out.println(a[i]);
C、while( iter.hasNext() ) System.out.println(iter.next()) ;
D、for (int i=0, i < a.size(); i++) System.out.println(iter[i]);
E、for (int i=0; i < a.size(); i++) System.out.println(iter.get(i));
28、 [ 多選題 ]
以下哪些是接口
( AC )
A、List
B、ArrayList
C、Set
D、HashMap
29、 [ 多選題 ]
Java中的集合類包括ArrayList、LinkedList、HashMap等,下列關於集合類描述正確的是
( ABD )
A、ArrayList和LinkedList均實現了List接口
B、ArrayList的查詢速度比LinkedList快
C、添加和刪除元素時,ArrayList的表現更佳
D、HashMap實現了Map接口,它允許任何類型的鍵和值對象,並允許將 null 用作鍵或值
30、 [ 多選題 ]
以下哪個方法可得到結果內容是"Java"的字符串
( AC )
A、"helloJava".substring(5)
B、"pringJava".substring(6)
C、"ThinkinJava4th".substring(7,11)
32、 [ 單選題 ]
在java代碼中,一個變量聲明為boolean aa;下面賦值語句中正確的是:
( A )
A、aa=false;
B、aa=False;
C、aa="true";
D、aa=0;
33、 [ 單選題 ]
已經定義數組:int[] m=new int[4], 當使用語句m[10]=10; 時可以捕獲的異常類型是:
( A )
A、java.lang.Exception
B、java.lang.NullPointerException
C、java.io.IOException
D、java.sql.SQLException
34、 [ 單選題 ]
在java中,下面關於abstract描述正確的是:
( B )
A、可以用來聲明變量、方法
B、可以用來聲明方法和類,如果方法是abstract的,那么類必須也是abstract的
C、abstract的method可以是static的
40、 [ 單選題 ]
以下程序執行結果是什么
public static void main(String[] args){
String str1="str";
String str2=new String("str");
System.out.print(str1.equals(str2));
System.out.print(",");
System.out.print(str1==str2);
}
( B )
A、false,false
B、ture,false
C、true,true
D、false,true
41、 [ 單選題 ]
以下Java程序輸出結果是什么
public static void main(String[] args) {
Set set = new HashSet();
set.add("key1");
set.add("key1");
set.add("key3");
Map map = new HashMap();
map.put("key1", "key1");
map.put("key1", "key2");
map.put("key3", "key3");
System.out.println(set.size() + "_" + map.size());
}
( B )
A、3_3
B、2_2
C、2_3
D、3_2
42、 [ 單選題 ]
下列語句會中創建幾個對象?
String s1 ="hello world"
String s2 ="hello world"
( D )
A、0個
B、1個
C、2個
D、3個
43、 [ 單選題 ]
要刪除book表中書籍(bookName)是"Java"的記錄,哪個選項放在如下Java代碼的空行處,可使代碼正確執行。
String sql=”delete from book where bookName=?”;
PreparedStatement pst=con.preparedStatement(sql);
______________________________
pst.execute();
( A )
A、pst.setString(1,”Java”)
B、pst.setString(0,”Java”)
C、pst.setInt(0,”Java”)
D、以上選項都不正確
44、 [ 單選題 ]
應用程序的main方法中有以下語句,則輸出的結果是
String s1 = "0.5";
String s2 = "12";
double x = Double.parseDouble(s1);
System.out.println(s2+x );
( B )
A、12.5
B、120.5
C、12
D、“12.5”
45、 [ 單選題 ]
看如下代碼,其中list是一個ArrayList類型的對象,哪個選項的代碼填寫到//todo delete處,可以在Iterator遍歷的過程中正確並安全的刪除一個list中保存的對象?( )
Iterator it = list.iterator();
int index = 0;
while (it.hasNext()){
Object obj = it.next();
if (needDelete(obj)) { //needDelete返回boolean,決定是否要刪除
//todo delete
}
index ++;
} ( D )
A、list.remove(obj);
B、list.remove(index);
C、list.remove(it.next());
D、it.remove();
46、 [ 單選題 ]
對於以下語句Integer val=null;以下哪個語句會引發空指針異常 ( D )
A、String str1=val+”ABC”
B、int width=String.valueOf(val).length();
C、"null".equals(val);
D、int a=val+200;
47、 [ 單選題 ]
代碼如下:String str=”A^B^C^D”;以下代碼需要將其轉換成數組,正確的是 ( B )
A、String val[]=str.split("//^");
B、String val[]=str.split("\\^");
C、String val[]=str.split("\^");
D、String val[]=str.split("^");
48、 [ 單選題 ]
對於程序:
public static void main(String[] args)
{
List<String> e=new ArrayList<>();
____________________ //插入位置
System.out.println(e);
}
如下哪行代碼放入目標位置會產生異常: ( D )
A、e.add(2,“OK”)
B、e.set(0,“OK”)
C、e.remove(0)
D、以上都會
49、 [ 單選題 ]
以下關於HashMap方法描述錯誤的是 ( B )
A、clear()方法只是清除了所有的映射,內存對象實際上依然存在
B、remove(Object k)方法刪除的key如果不存在,會引發異常,因此一般在調用該方法之前,需要先調用containsKey(Object k)方法,判斷key是否存在
C、當isEmpty( )返回true的時候,size()方法的返回值是0
D、HashMap中的key是不可以重復的,但是可以用null做key
53、 [ 單選題 ]
以下關於線程的說法中錯誤的一項是 ( D )
A、一個線程是一個Thread類的實例
B、Java中主線程的是最先開始,最后結束的
C、線程是進程的子集,一個進程可以有很多線程,每條線程用以執行不同的任務
D、當一個進程包含多個線程時候,每個線程的內存空間都是獨立的
55、 [ 多選題 ]
以下哪些方法是屬於Thread類的 ( ABC )
A、getId()
B、destory()
C、sleep()
D、exist()
59、 [ 多選題 ]
在Java中,下列關於類的定義的選項中,哪些可以通過new Thing()方法來創建該類的一個對象:
( AD )
A、public class Thing { public Thing() {}}
B、public class Thing { public Thing(void) {} }
C、public class Thing { public Thing(String s) {} } }
D、public class Thing { public void Thing(String s) {} }
60、 [ 單選題 ]
下列類定義中,不正確的是: ( D )
A、class x
B、class x extends y
C、class x implements y1,y2
D、public class x extends X1,X2
61、 [ 單選題 ]
下列敘述正確的是:
( C )
A、Java中類允許多重繼承
B、Java一個類只能實現一個接口
C、Java中類只能單重繼承
D、Java中一個類可以繼承多個抽象類
62、 [ 單選題 ]
在Java中,關於類的說法,正確的是:
( C )
A、編寫代碼時,聲明的類可以不繼承任何類
B、編寫代碼時,聲明的類可以繼承自多個類
C、編寫代碼時,聲明的類一定繼承自一個類
D、編寫代碼時,聲明的類可能繼承自一個類可能繼承自多個類,但不能不繼承某個類
63、 [ 單選題 ]
下列那些說法是正確的是: ( C )
A、final修飾是為了與abstract修飾符對應,沒有final的類,應該是abstract。
B、final的類不能創建對象。
C、final類可以創建對象。
D、final類不可以有父類。
64、 [ 單選題 ]
定義一個接口時,下列哪個關鍵字用不到: ( D )
A、public
B、extends
C、interface
D、class
65、 [ 單選題 ]
下列關於訪問器方法說法正確的是: ( A )
A、get方法可以讀取屬性的值
B、set方法用來讀取屬性的值
C、必須為每個private屬性提供訪問器方法
D、public屬性不能有訪問器方法
66、 [ 單選題 ]
拋出異常時使用下列哪個關鍵字:
( A )
A、throw
B、catch
C、try
D、throws
E、finally
68、 [ 單選題 ]
某個類中存在一個方法:void getSort(int x),以下能作為該方法的重載的聲明的是: ( B )
A、public getSort(float x)
B、double getSort(int x,int y)
C、int getSort(int y)
D、void get(int x,int y)
69、 [ 單選題 ]
創建二維數組a[3][4]后,a[0].length的值應該等於: ( D )
A、0
B、2
C、3
D、4
70、 [ 單選題 ]
在switch(expression)語句中,expression的數據類型不能是: ( C )
A、byte
B、char
C、float
D、short
71、 [ 單選題 ]
設 int x = 1 ;int y = 2 ;int z = 3;則表達式 y+=z--/++x中y的值是:
( A )
A、3
B、3.5
C、4
D、5
72、 [ 單選題 ]
下面的Java語句錯誤的是:
( C )
A、byte a=2;
B、double a=1.0;
C、float a=1.0
D、double a=1;
73、 [ 單選題 ]
下列有關Eclipse的說法錯誤的是:
( B )
A、Eclipse是集成開發環境,當Java文件保存時,Eclipse會自動編譯生成.class文件。
B、Eclipse是集成開發環境,在Eclipse中更改文件代碼后,Eclipse會自動保存該文件。
C、Eclipse是集成開發環境,但是沒有Eclipse,記事本也可以開發Java代碼。
D、Eclipse是集成開發環境,必須要先安裝java開發環境,才能開發Java程序。
第二部分:填空題
1、 [ 填空題 ]
寫出代碼運行結果______ Caught e _________
public class ExceptionDemo {
public static void mySqrt(int a) throws Exception {
if (a < 0)
throw new Exception();
}
public static void main(String args[]) {
try {
mySqrt(25);
mySqrt(-5);
} catch (Exception e) {
System.out.print("Caught e");
}
}
}
2、 [ 填空題 ]
寫出代碼運行結果______1977-8-16_________
class ParentConstructor {
public int year;
public int month;
public int day;
public static final int default_month = 2;
public static final int default_day = 16;
public ParentConstructor(int y, int m, int d) {
year = y;
month = m;
day = d;
}
public ParentConstructor(int y) {
this(y, default_month, default_day);
}
public ParentConstructor(int y1977, int m8) {
this(y, m, default_day16);
}
}
public class ChildConstructor extends ParentConstructor {
public ChildConstructor(int h) {
super(1977, 8);
}
public static void main(String[] args) {
ChildConstructor t = new ChildConstructor(12);
System.out.println(t.year + "-" + t.month + "-" + t.day);
}
}
3、 [ 填空題 ]
寫出代碼運行結果______ ABDCBDCB _________
public class Delta {
static boolean foo(char c) {
System.out.print(c);
return true;
}
public static void main(String[] argv) {
int i = 0;
for (foo('A'); foo('B') && (i < 2); foo('C')) { // abdcbdcb
i++;2
foo('D');
}
}
}
4、 [ 填空題 ]
寫出代碼運行結果_______ a=7,b=18
public static void main(String args[]) {
int a = 6, b;
b = a++ * 3;
System.out.print("a=" + a + ",b=" + b);
}
5、 [ 填空題 ]
寫出代碼運行結果______ sum=30_________
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (5 % 2 != 0)
continue;
else
sum += i;
}
System.out.println("sum=" + sum);
}
6、 [ 填空題 ]
執行以下程序
public static void main(String[] args){
String str1="str";
String str2=new String("str");
System.out.print(str1.equals(str2));
System.out.print(",");
System.out.print(str1==str2);
}
結果是_________ ture,false__________________
7、 [ 填空題 ]
要刪除book表中書籍,列名為bookName,值是"Java"的記錄,補全Java代碼的空行處,可使代碼正確執行。
String sql=”delete from book where bookName=?”;
PreparedStatement pst=con.prepareStatement(sql);
________ pst.setString(1,"Java");或者_ pst.setString("bookName","Java")_____________________;
pst.execute();
8、 [ 填空題 ]
在java中byte類型的取值范圍是___-128 到 127___
9、 [ 填空題 ]
在java代碼段中,有一個方法被調用代碼為double[] arrs = sort(""),該方法的聲明代碼為________ public double[] sort(String arr)___________(如果調用代碼錯誤,無法寫出方法聲明,請在橫線處填入“代碼錯誤”)
10、 [ 填空題 ]
二維數組初始化為Student[][] a = new Student[4][2],a.length的值為____4_______(如果數組初始化代碼錯誤,請在橫線處填入“代碼錯誤”)
11、 [ 填空題 ]
寫出代碼運行結果_______ y=0________
public static void main(String args[]) {
int x=2;
int y = x++/3;
System.out.println("y="+y);
}
12、 [ 填空題 ]
寫出代碼運行結果______ 0 2 4_________
public static void main(String args[]) {
int i = 0;
for ( int i=0;; i < 4; i += 2) {
System.out.print(i + "");
}
System.out.println(i);
}
13、 [ 填空題 ]
寫出代碼運行結果______23_________
public class ScopeTest {
public int i = 1;15
public void firstMethod() {
int i = 7, j = 8;
this.i = i + j;
secondMethod(this.i);
}
public void secondMethod(int i) {
int j = 8;
this.i = i + j;
}
public static void main(String[] args) {
ScopeTest obj = new ScopeTest();
obj.firstMethod();
System.out.println(obj.i);
}
}
14、 [ 填空題 ]
寫出代碼運行結果_______30 10 20________
class A1 {
int i, j;30 40
void setA(int i, int j) {
this.i = i;
this.j = j;
}
}
class B1 extends A1 {
int j, k;10 20
void setB(int j, int k) {
this.j = j;
this.k = k;
}
}
public class TestAB {
public static void main(String[] args) {
B1 sub = new B1();
sub.setB(10, 20);
sub.setA(30, 40);
System.out.println(sub.i + " " + sub.j + " " + sub.k);
}
}
15、 [ 填空題 ]
寫出代碼運行結果______ ACD _________
public static void main(String[] args) {
try {
badMethod();
System.out.print("A");
} catch (Exception ex) {
System.out.print("B");
} finally {
System.out.print("C");
}
System.out.print("D");
}
public static void badMethod() {
}
16、 [ 填空題 ]
在java中,使用代碼定義如下:
public class Test {
private static final int a;
public static void main(String[] args) {
a = 20;
}
}
請判斷代碼是否正確,如果錯誤,請指出問題 __ a不能使用final修飾,去掉final_______(如果正確,請在橫線處填入 正確,如果錯誤,請在橫線處填入 如何解決)
17、 [ 填空題 ]
在java中,計算字符串長度的語法是_ length() 方法、__,計算數組長度的語法是_ length屬性_,計算List長度方法是___ size()方法____
18、 [ 填空題 ]
java.lang.String是否可以再有子類____不可以_____,為什么____因為String是final類______
19、 [ 填空題 ]
Java中存在如下語句Double val=null;此時執行如下語句產生的情況分別是:
String.valueOf(val):______返回字符串null ________
val.toString(): ______引發空指針異常___
20、 [ 填空題 ]
String str=new String(“helolo”),此時內存中字符串對象個數是_____2_______個
21、 [ 填空題 ]
Java中所有類都是類__ Object ____的子類。
22、 [ 填空題 ]
任何一個Java程序都默認引入了一個包,這個包的名字叫java. __ lang ___。
23、 [ 填空題 ]
在java中short類型的取值范圍是____-32768 到 32767___
27、 [ 填空題 ]
寫出代碼運行結果__1,2,5,10___
public static void main(String[] args) {
int n = 10;
for (int i = 1; i <= n; i++) {
if (n % i != 0)
continue;
System.out.print(i + ",");
}
}
28、 [ 填空題 ]
寫出代碼運行結果___ i=10,j=40____
public class Pass {
static int j = 20;
public static void main(String argv[]) {
int i = 10;
Pass p = new Pass();
p.amethod(i);
System.out.println("i="+i+",j="+j);
}
public void amethod(int[] x) {
x = x * 2;20
j = j * 2;40
}
}
29、 [ 填空題 ]
寫出代碼運行結果____ parent child child_____
class Parent {
void printMe() {
System.out.println("parent");
}
}
class Child extends Parent {
void printMe() {
System.out.println("child");
}
void printAll() {
super.printMe();
this.printMe();
printMe();
}
}
public class T {
public static void main(String args[]) {
Child myC = new Child();
myC.printAll();
}
}
31、 [ 填空題 ]
在java中,使用代碼定義如下:
public class Test {
private static final int[] a = {10};
public static void main(String[] args) {
a[0] = 20;
}
}
請判斷代碼是否正確,如果錯誤,請指出問題 _____正確____(如果正確,請在橫線處填入 正確,如果錯誤,請在橫線處填入 如何解決)
41、 [ 填空題 ]
Java中最頂層的類是__ Object_
42、 [ 填空題 ]
程序中實現多線程的方法有兩種:繼承___Thread__類和實現Runnable接口
第三部分:問答題
1、 [ 問答題 ]
在Java中,數據類型有哪些,作為屬性默認值是什么?作為數組元素的初始值是什么?
1、整數類型(byte、short、int、long)的基本類型變量的默認值為0。
2、單精度浮點型(float)的基本類型變量的默認值為0.0f。
3、雙精度浮點型(double)的基本類型變量的默認值為0.0d。
4、字符型(char)的基本類型變量的默認為 “\u0000”。
5、布爾性的基本類型變量的默認值為 false。
6、引用類型的變量是默認值為 null。
2、 [ 問答題 ]
int和Integer有什么區別
int是Java的原始數據類型,也叫基本數據類型。
Integer是Java中為int提供的包裝類,它是類而不是基本數據類型,它的內部其實包含一個int型的數據。
裝箱和拆箱
3、 [ 問答題 ]
請簡述使用JDBC調用數據庫的步驟.
1.載入JDBC驅動程序
2.定義連接URL
3.建立連接
4.創建Statement對象
5.執行查詢或更新
6.結果處理
7.關閉連接
4、 [ 問答題 ]
在Java中,中斷循環的關鍵字有什么,簡述作用
提前中斷循環,需要在循環語句塊中添加break或continue語句。
break語句用於終止某個語句塊的執行。用在循環語句體中,可以強行退出循環。
continue語句用在循環語句體中,用於終止某次循環過程,跳過循環體中continue語句下未執行的循環,開始下一次循環過程。
5、 [ 問答題 ]
在Java中,進行方法調用需要注意哪些問題
形參必須注明數據類型
實參直接寫,不需要類型聲明
return只能返回一次
遇到return語句,方法結束執行,后續語句不執行
方法的返回值,必須與方法聲明中的返回值類型匹配
方法定義,不能寫在main()中
方法是不能嵌套的
6、 [ 問答題 ]
在Java中,構造器的特征和作用
1、構造器(構造方法/構造器,Constructor)特征:
具有與類相同的名稱
不含返回值類型
不能在方法中用return語句返回一個值
一般訪問權限為public
在一個類中,具有上述特征的方法就是構造器。
2、構造器的作用
完成對象的創建,即完成對象的實例化
一般使用構造器來完成對成員變量的初始化
7、 [ 問答題 ]
在Java中,簡述垃圾回收機制原理
Java的垃圾回收機制是自動的,實際上是JVM內部運行的一個優先級比較低的后台線程。
垃圾回收機制僅僅作用於堆內存,與棧內存無關。
確定對象為垃圾需要回收的條件如下:
對象的引用被賦值為null
一次性使用的匿名對象
超出生命周期
8、 [ 問答題 ]
在Java中,簡述this關鍵字概念及使用this關鍵字的情況
this關鍵字:
代表對象自身的引用,通常在類的方法定義中使用
用this關鍵字的情況:
方法中的變量與成員變量重名
在一個構造器中,調用其它重載的構造器
返回當前對象的引用
9、 [ 問答題 ]
說明Java中繼承的含義和規則,簡寫類繼承的語法
繼承的含義:
子類繼承父類的所有屬性和方法,同時也可以增加自己的屬性和方法。
繼承的規則:
Java中只能單繼承,也就是說每個類只能有一個直接父類;一個父類可以有多個子類。
繼承語法:
class 子類名 extends 父類名
10、 [ 問答題 ]
單例的作用是什么,使用Java編寫一個單例的程序
單例模式(singleton):保證一個類僅有一個實例,並提供一個訪問它的全局訪問點
11、 [ 問答題 ]
在Java中,詳細說明什么是多態,多態存在的條件,多態執行的效果是什么。
多態(動態綁定、Polymorphism ):
不同的對象對同一行為作出的不同響應
多態存在的三個必要條件:
要有繼承,或實現
要有重寫
父類引用指向子類對象
多態執行的效果:
當調用父類中被重寫的方法后,運行時創建的是哪個子類的對象,就調用該子類中重寫的那個方法
12、 [ 問答題 ]
在Java中,講述子類實例化的過程中,子類創建構造器要求有什么?
在子類中創建構造器時,必須調用父類的構造器
子類可以在自己的構造器中使用super關鍵字來調用父類的構造器,代碼如下:
super (參數1,參數2,…);
如果使用super關鍵字調用父類構造器,必須寫在該子類構造器的第一行
如調用的是父類中無參的構造器,則可以不寫super( )
如果子類中調用了父類無參的構造器,而父類中沒有無參構造器則系統編譯出錯
15、 [ 問答題 ]
描述Set、List、Map三個接口,在保存元素時,各有什么特點
Set、List中只能存儲單列元素。--1分
Map存儲鍵值對。--1分
Set保存元素時,不允許重復、無序。--1分
List保存元素時,允許重復、有序。--1分
Map保存元素時,不允許鍵重復。--1分
16、 [ 問答題 ]
Collection 和 Collections的區別
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的接口,它是各種集合結構的父接口
18、 [ 問答題 ]
請詳細描述"=="和equals方法的區別
equals()方法是Object類的方法,在Object類中比較兩個對象引用是否指向同一個對象,一般都被子類方法覆蓋,不再比較引用的值 --2分
"=="是比較運算符:,當比較基本數據類型時,比較兩個數據值是否相等;當比較引用數據類型時,比較兩個引用是否指向同一個對象。--2分
19、 [ 問答題 ]
String類與StringBuilder類的比較,StringBuffer與StringBuilder的比較。
1、String類與StringBuilder類的比較
1.1) String類與StringBuilder類相同點:
1.1.1) String與StringBuffer兩個類都完成對字符串的各種操作;
1.1.2) String類與StringBuffer類都被放到了java.lang包中
1.2) String類與StringBuilder類兩者的主要區別在於:
1.2.1) String類對象中的內容初始化不可以改變
1.2.2)StringBuffer類對象中的內容可以改變
2、StringBuffer與StringBuilder的比較
2.1) StringBuffer與StringBuilder的相同點
2.1.1) StringBuffer和StringBuilder都是長度可變的字符串。
2.1.2) 兩者的操作基本相同。
2.2) 兩者的主要區別在於
2.2.1)StringBuffer類是線程安全的;
2.2.2)StringBuilder類是線程不安全的。
2.2.3)StringBuffer在JDK1.0中就有,而StringBuilder是在JDK5.0后才出現的。
2.2.4)StringBuilder的一些方法實現要比StringBuffer快些。
20、 [ 問答題 ]
在Java中,如何實現方法重載,重載規則是什么
方法的重載(overload):方法的重載就是在同一個類中允許同時存在一個以上同名的方法
方法重載的規則:
方法名稱相同
方法的參數必須不同
參數個數不同 或
參數類型不同
方法的返回值類型可以相同,也可以不同
22、 [ 問答題 ]
在Java中,類變量、局部變量、實例變量定義有什么不同,作用域都是什么
類變量:
用static修飾的成員變量,它們在類被載入時創建,只要類存在,static變量就存在
實例變量:
類體中聲明的成員變量,即非static的屬性,創建對象后存在
局部變量:
方法體中聲明的變量,方法中的參數,或代碼塊中聲明的變量,都是局部變量。局部變量只在方法調用的過程中有效,方法調用結束后失效
23、 [ 問答題 ]
在Java中,說明權限修飾符有哪些,及作用,並說明每個權限含義
權限修飾符作用:
用來控制類的成員和類的使用范圍
權限修飾符有:
類成員的訪問權限修飾符:private、default、protected、public
類的訪問權限修飾符:public、default
權限含義:
24、 [ 問答題 ]
在Java中,static關鍵字可以修飾的元素有哪些?說明靜態變量(類變量)的特點和訪問形式,說明靜態方法(類方法)的特點、訪問形式、作用和使用的注意事項,什么是靜態代碼塊,靜態代碼塊中的代碼什么時候執行,靜態代碼塊作用
static可以修飾的元素:
屬性、方法、代碼塊
1)靜態變量特點:
所有對象共享
在類被載入時創建,只要類存在,static變量就存在
兩種方式訪問:
直接訪問:類名.屬性;
實例化后訪問:對象名.屬性
2)靜態方法特點:
不需要實例化,可以直接訪問
兩種方式訪問:
直接訪問:類名.方法名()
實例化后訪問:對象名.方法名()
static方法的作用:
簡化方法的使用;
便於訪問靜態屬性;
注意事項
靜態方法里只能直接訪問靜態成員,而不能直接訪問類中的非靜態成員
靜態方法中不能使用this、super關鍵字
靜態方法不能被非靜態方法覆蓋,靜態方法不能修飾構造器
3)靜態代碼塊: 一個類中由static關鍵字修飾的,不包含在任何方法體中的代碼塊
當類被載入時,靜態代碼塊被執行,且只被執行一次
靜態塊經常用來進行類屬性的初始化
32、 [ 問答題 ]
Java中有幾種類型的流,JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
從傳輸單位的不同分為:字節流,字符流 --1分
從傳輸方向的不同分為:輸入流 輸出流 ----1分
對應的提供的API類包括:FileInputStream FileOutputStream FileReader FileWriter DataInputStream DataOutputStream 等等 --2分
33、 [ 問答題 ]
請描述ArrayList和LinkedList的區別
Arraylist采用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,所以最大的缺點就是插入刪除時非常麻煩
。 --2分
Linkedlist采用的將對象存放在獨立的空間中,而且在每個空間中還保存下一個鏈接的索引 但是缺點就是查找非常麻煩 要從第一個索引開始
35、 [ 問答題 ]
描述HashMap和HashTable的區別
兩者都屬於Map接口的實現類,都實現了鍵值對映射。
區別在於:
HashMap 允許一個 null 鍵和多個 null 值,HashTable 不允許 null 鍵和 null 值。 --2分
由於HashTable諸多方法是線程同步的,因此性能上要比HashMap差 。--2分
37、 [ 問答題 ]
描述如何創建和啟動多線程。
第一種方法:繼承Thread類,重寫run()方法。
第二種方法:實現Runnable接口,實現run()方法。
啟動:
調用start()方法來啟動線程
38、 [ 問答題 ]
下列程序是否正確,如果正確輸出結果是:
class Parent {
public String getInfo() {
return "Parent getInfo invoked";
}
}
class Child extends Parent {
public String getInfo() {
return "Child getInfo invoked";
}
}
public class VirtualMethod {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.getInfo());
}
}
Child getInfo invoked
39、 [ 問答題 ]
下列程序是否正確,如果正確輸出結果是:
public class OverridingChild extends OverridingParent {
public void method(int a) {
System.out.println("Invocation child class");
}
public static void main(String[] args) {
OverridingChild t = new OverridingChild();
t.method();
}
}
class OverridingParent {
public void method() {
System.out.println("Invocation parent class");
}
}
Invocation parent class
41、 [ 問答題 ]
下列程序是否正確,如果正確輸出結果是:
public class Cruncher {
void crunch(int i) {
System.out.print("int");
}
void crunch(String s) {
System.out.print("String");
}
public static void main(String args[]) {
Cruncher crun = new Cruncher();
char ch = 'p';
int c = 12;
crun.crunch(ch);
System.out.print(";");
crun.crunch(c);
}
}
int;int
47、 [ 問答題 ]
請描述線程都包含哪些狀態(包含不同的阻塞狀態),並說明狀態之間如何轉換。
主要狀態包括:新建、就緒、運行、阻塞、死亡狀態。 --2分
其中阻塞狀態又可分為:等待阻塞、同步阻塞、其他阻塞狀態。 --1分
各狀態之間切換如下:
1.新建狀態(New):用new語句創建的線程對象處於新建狀態 --1分
2.就緒狀態(Runnable):當一個線程對象被創建后,其他線程調用它的start()方法后,該線程就進入就緒狀態,Java虛擬機會為它創建方法調用棧和程序計數器,處於這個狀態的線程位於可運行池中,等待獲得CPU 的使用權。 --1分
3.運行狀態(Running):當處於就緒狀態的線程對象獲得CPU 的使用權之后,該線程就進入運行狀態,處於這個狀態的線程對象占用CPU,執行線程體程序代碼。在並發運行環境中,如果計算機中有只有一個CPU,那么任何時刻只會有一個線程對象處於這個狀態。如果計算機有多個CPU,那么同一時刻可以讓幾個線程對象占用不同的CPU,使它們處於運行狀態。只有處於就緒狀態的線程才有機會轉到運行狀態。--1分
4.阻塞狀態(Blocked):阻塞狀態是指線程因某些原因放棄CPU,暫時停止運行。當線程處於阻塞狀態時,Java虛擬機不會給線程分配CPU,直到線程重新進入就緒狀態,它才有機會轉到運行狀態。
阻塞狀態可分為以下3種,分別是:
等待阻塞狀態:也叫位於對象等待池中的阻塞狀態(BlockedinObject’swaitpool),當正在運行的線程執行某個對象的wait()方法時,Java虛擬機就會把該線程放到這個對象的等待池中。 --1分
同步阻塞狀態:也叫位於對象鎖池中的等待狀態(BlockedinObject’slockpool),當正在運行的線程試圖獲得某個對象的同步鎖時,如果該對象的同步鎖已經被其他線程占用,Java虛擬機就會把這個線程放到這個對象的鎖池中。 --1分
其他阻塞狀態:當正在運行的線程執行了sleep()方法,或者調用了其他線程的join()方法,或者發出了I/O 請求時,就會進入這個狀態。當sleep()方法超時、join()等待線程終止或者超時、或者I/O 處理完畢時,線程重新轉入就緒狀態。 --1分
5.死亡狀態(Dead):當線程結束run()方法的執行時,就進入死亡狀態,該線程結束生命周期。線程有可能是正常執行完run()方法退出,也有可能是遇到異常而退出,不管線程正常結束還是異常結束,都不會對其他線程造成影響。--1分
第四部分:組合題
1、 [ 組合題 ]
解決圖形問題,根據如下要求,編寫程序:
1) [ 問答題 ]
設計Shape表示圖形類,有面積屬性area、周長屬性per,顏色屬性color,有兩個構造方法(一個是默認的、一個是為顏色賦值的),還有3個抽象方法,分別是:getArea計算面積、getPer計算周長、showAll輸出所有信息。
1) 【問答題】 答案:
public abstract class Shape { -- 抽象類
double area;
double per;
char color;
Shape(){
}
Shape(char color){
this.color = color;
}
public abstract double getArea();
public abstract double getPer();
public abstract void showAll();
}
2) [ 問答題 ]
為Shape圖形類設計2個子類:
Rectangle表示矩形類,增加2個屬性,width表示長度、height表示寬度,重寫getPer、getArea和showAll三個方法,另外又增加一個構造方法(一個是默認的、一個是為高度、寬度、顏色賦值的)。
Circle表示圓類,增加1個屬性,radius表示半徑,重寫getPer、getArea和showAll三個方法,另外又增加兩個構造方法(為半徑、顏色賦值的)。
設計2個子類:
Rectangle表示矩形類,增加兩個屬性,width表示長度、height表示寬度,重寫getPer、getArea和showAll三個方法,另外又增加一個構造方法(一個是默認的、一個是為高度、寬度、顏色賦值的)。
參考答案:
public class Rectangle extends Shape { --繼承
double width;
double height;
Rectangle(){
}
Rectangle(double width, double height,char color){
super(color);
this.width = width;
this.height = height;
}
public double getArea() {
area = width*height;
return area;
}
public double getPer() {
per = 2*(width+height);
return per;
}
public void showAll() {
System.out.println("長:"+width);
System.out.println("寬:"+height);
System.out.println("面積:"+getArea());
System.out.println("周長:"+getPer());
System.out.println("顏色:"+getColor());
}
}
Circle表示圓類,增加1個屬性,radius表示半徑,重寫getPer、getArea和showAll三個方法,另外又增加兩個構造方法(為半徑、顏色賦值的)。
public class Circle extends Shape {
final double pi = 3.14;
double radius;
Circle(){
}
Circle(double radius,char color){
super(color);
this.radius = radius;
}
public double getArea() {
area = pi*radius*radius;
return area;
}
public double getPer() {
per = 2*pi*radius;
return per;
}
public void showAll() {
System.out.println("半徑:"+radius);
System.out.println("面積:"+getArea());
System.out.println("周長:"+getPer());
System.out.println("顏色:"+getColor());
}
}
3) [ 問答題 ]
編寫測試類,在main方法中,創建一個長度為2的Shape數組shapes,創建一個顏色為藍色,邊長為1和2的Rectangle對象為數組的第一個元素,創建一個顏色為紅色,半徑為1.2的Circle對象為數組的第二個元素,使用for..each方式遍歷該數組,調用每個元素的showAll方法得到圖形的資料。
public class PolyDemo {
public static void main(String[] args) {
Shape[] shapes = new Shape[2];
shapes[0] = new Rectangle(1,2,'藍');
shapes[1] = new Circle(1.2,'紅');
for(Shape s : shapes){
s.showAll();
}
}
}
2、 [ 組合題 ]
根據如下要求,編寫程序:
1) [ 問答題 ]
(1)創建一個抽象員工類ColaEmployee,包含如下屬性和方法 屬性:員工的姓名(字符串類型);員工的生日月份(整型) 抽象方法:getSalary(int month)。
public abstract class ColaEmployee { String name; int month; ColaEmployee() { } ColaEmployee(String name, int month) { this.name = name; this.month = month; } abstract double getSalary(int month); }
2) [ 問答題 ]
(2)創建ColaEmployee的三個子類SalariedEmployee (拿固定工資的員工)、HourlyEmployee(拿小時工資的員工)、SalesEmployee(按月銷售額和提成率拿工資的員工),並在各類中分別覆蓋父類的抽象方法getSalary(),其中每個類中的方法實現說明如下: SalariedEmployee類:拿固定工資的員工。參數:固定工資 HourlyEmployee:按小時拿工資的員工,每月工作超出160 小時的部分按照1.5 倍工資發放。參數:每小時的工資(整型),每月工作的小時數(整型)。 SalesEmployee:按月銷售額和提成率拿工資的員工,參數:月銷售額(整型),提成率(浮點型)
public class SalariedEmployee extends ColaEmployee {
double salary;
SalariedEmployee() {
}
SalariedEmployee(String name, int month, double salary) {
super(name, month);
this.salary = salary;
}
@Override
double getSalary(int month) {
return salary;
}
}
public class HourlyEmployee extends ColaEmployee {
int hourSalary;
int hour;
HourlyEmployee() {
}
HourlyEmployee(String name, int month, int hourSalary, int hour) {
super(name, month);
this.hourSalary = hourSalary;
this.hour = hour;
}
@Override
double getSalary(int month) {
double salary = 0;
if (hour <= 160) {
salary = hour * hourSalary;
} else {
salary = 160 * hourSalary + (hour - 160) * hourSalary * 1.5;
}
return salary;
}
}
public class SalesEmployee extends ColaEmployee {
int monthSalary;
float rate;
SalesEmployee() {
}
========101TEST========SalesEmployee========101TEST========(String name, int month, int monthSalary, float rate) {
super(name, month);
this.monthSalary = monthSalary;
this.rate = rate;
}
@Override
double getSalary(int month) {
double salary = monthSalary * rate;
return salary;
}
}
3) [ 問答題 ]
(3)創建一個測試類,包含兩個方法,分別為: payWage(ColaEmployee emp,int month):計算不同類型員工某個月工資。 主方法main(String[] args):在主方法中分別創建一個拿固定工資的員工、拿小時工資的員工、按月銷售額和提成率拿工資員工的對象,並把這三個對象放入一個ColaEmployee類型數組中,然后遍歷數組,分別計算這個數組中每個員工某個月的工資。
public class TestCompany {
public static void main(String[] args) {
// TODO Auto-generated method stub
ColaEmployee[] a = new ColaEmployee[3];
a[0]=new SalariedEmployee("大川",2,3500);
a[1]=new HourlyEmployee("海鷗",2,20,200);
a[2]=new SalesEmployee("abc",5,30000,0.1f);
for(ColaEmployee c:a){
payWage(c,2);
}
}
public static void payWage(ColaEmployee emp,int month){
System.out.println(emp.name+"的工資:"+emp.getSalary(month));
}
}
第五部分:編程題
1、 [ 編程題 ]
判斷101-200之間有多少個素數,並輸出所有素數。(素數(質數)就是除了1和它本身以外,沒有其他的數可以被它整除)
package com.neuedu;
public class PrimeNumber
{
public static void main(String[] args)
{
//for循環遍歷101-200
for(int i = 101; i < 200; i++)
{
boolean b = false;
//內層循環判斷i是否為素數
for(int j = 2; j <= i-1; j++)
{
//除了1和它本身以外,如果i可以整除其他數就b = false
if( i % j == 0 )
{
b = false;
break;
}
//如果不能整除就b = true
else
{
b = true;
}
}
//如果b = true就打印出來
if(b == true)
{
System.out.println(i);
}
}
}
}
2、 [ 編程題 ]
打印出100-999所有的“水仙花數”。
思路:
水仙花數是指一個 n 位數 ( n≥3 ),它的每個位上的數字的 n 次冪之和等於它本身。
(例如:1^3 + 5^3+ 3^3 = 153)
package com.neuedu;
public class NarcissisticNumber
{
public static void main(String[] args)
{
int b, s, g;
for(int i = 100; i < 1000; i++)
{
g = i % 10; //g存個位數
s = ( i / 10 ) % 10; //s存十位數
b = i / 100; //b存百位數
//如果它的個十百位數字的3次冪之和等於它本身則打出
if( i == ( (g*g*g) + (s*s*s) + (b*b*b) ) )
{
System.out.println(i + "是水仙花數");
}
}
}
}
3、 [ 編程題 ]
現有如下HashMap:
Map<String,String> data=new HashMap<>();
data.put("empno", "10001");
data.put("ename", "scott");
data.put("job", "添坑隊長");
請解析出每個鍵及其對應的值,並打印到控制台
參考答案:
Map<String,String> data=new HashMap<>();
data.put("empno", "10001");
data.put("ename", "scott");
data.put("job", "添坑隊長");
Set<Map.Entry<String, String>> entrySet=data.entrySet(); //2分
for(Map.Entry<String, String> entry:entrySet) //1分
{
System.out.println(entry.getKey()+" : "+entry.getValue());//2分
}
4、 [ 編程題 ]
編寫一個程序,從文件(文件名鍵盤輸入)得到該文件保存的10個正整數,並輸出這10個整數的最大值和最小值。
public class GetMaxMin{
public static void main(String[] args) throws Exception {
String file = new Scanner(System.in);
int i, n=10, max=0, min=0 , temp = 0;
try{
Reader in = new FileReader(file);
BufferedReader br=new BufferedReader(new InputStreamReader(in);
max=min=Integer.parseInt(br.readLine( ));
} catch ( Exception e ) {
System.out.println("文件錯誤");
}
for ( i = 2 ; i <= n ; i ++ ) {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
temp=Integer.parseInt(br.readLine( ));
if (temp > max ) max=temp;
if (temp < min) min=temp;
}catch( IOException e ) { } ;
}
System.out.println("max="+max+"\nmin="+min);
}
}
5、 [ 編程題 ]
有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
提示:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。
package com.neuedu;
public class EleventhNumberRange {
public static void main(String[] args) {
int count = 0;
for(int x=1; x<5; x++) {
for(int y=1; y<5; y++) {
for(int z=1; z<5; z++) {
if(x != y && y != z && x != z) {
count ++;
System.out.print(x*100 + y*10 + z + " ");
if(count % 4 == 0) {
System.out.println();
}
}
}
}
}
System.out.println("共有" + count + "個三位數");
}
}
7、 [ 編程題 ]
請編寫一個方法,計算兩個日期之間的實際天數
要求:
1.日期參數以字符串類型接收。
2.實際天數包含開始日期和結束日期。如:
Date1:”2017-01-01”
Date2:”2017-01-04”
實際天數為4天
public static void date(String bdate,String edate) throws Exception{//方法參數正確1分
DateFormat df=new SimpleDateFormat("yyyy-MM-dd"); //1分
Date date1=df.parse(bdate); //調用parse方法1分
Date date2=df.parse(edate);
long btime=date1.getTime(); //調用getTime方法1分
long etime=date2.getTime();
long time=etime-btime;
long day=time/1000/60/60/24+1;// 1分
System.out.println(day);
}
8、 [ 編程題 ]
寫一個方法,輸入一個文件名和一個字符串,統計這個字符串在這個文件中出現的次數.
public int countWords(String file, String find) throws Exception
{
int count = 0;
Reader in = new FileReader(file); --1分
int c;
while ((c = in.read()) != -1) { --2分
while (c == find.charAt(0)) { --2分
for (int i = 1; i < find.length(); i++) { --2分
c = in.read(); --1分
if (c != find.charAt(i)) break; --1分
if (i == find.length() – 1) count++; --2分
}
}
}
return count;
}
9、 [ 編程題 ]
使用for循環,求1到100之間所有能被3整除的整數的和。
public static void main(String[] args) {
int i;
int sum = 0;
for (i = 1; i <= 100; i++) { --4分
if (i % 3 == 0) { --4分
sum += i; --2分
}
}
System.out.println("sum:" + sum);
}
題目解析:
10、 [ 編程題 ]
在一個有8個整數(18,25,7,36,13,2,89,63)的數組中找出其中最大的數及其下標。
public static void main(String[] args) {
int[] a = { 18, 25, 7, 36, 13, 2, 89, 63 }; //-----------2分
int x = 0; //-----------1分
int max = a[0]; //-----------1分
for (int i = 1; i < a.length - 1; i++) { //-----------2分
if (a[i] > max) { //-----------2分
max = a[i]; //-----------1分
x = i; //-----------1分
}
}
System.out.println("最大元素:" + max + ";下標:" + x);
}
11、 [ 組合題 ]
根據如下要求,編寫程序:
1) [ 問答題 ]
(1)定義一個名為Card的撲克牌類,該類有兩個private訪問權限的字符串屬性face和suit,分別用來描述一張牌的牌面值(如:A、K、Q、J、10、9、…、3、2等)和花色(如:“黑桃”、“紅桃”、“梅花”和“方塊”)。
(2)定義Card類中的public訪問權限的構造方法,為類中的屬性賦值。
(3)定義protected訪問權限的方法getFace(),得到撲克牌的牌面值。
(4)定義protected訪問權限的方法getSuit(),得到撲克牌的花色。
(5)定義方法toString(),返回表示撲克牌的花色和牌面值字符串(如“紅桃A”、“梅花10”等)。
1) 【問答題】 答案: public class Card {
private String face;
private String suit; //-----------1分
public Card(String face,String suit){ //-----------1分
this.face=face;
this.suit=suit; //-----------1分
}
protected String getFace() { //-----------1分
return this.face; //-----------1分
}
protected String getSuit() { //-----------1分
return this.suit; //-----------1分
}
public String toString(){ //-----------1分
return this.suit+this.face; //-----------1分
}
}
2) [ 問答題 ]
(6)編寫main方法,在其中定義字符串數組f和s,分別表示撲克牌的牌面值和花色;定義一個數組存儲52個Card對象,並為這些對象分別賦值。
2) 【問答題】 答案: public static void main(String[] args) {//-----------1分
String[] f = { "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3", "2" };
String[] s = { "黑桃", "紅桃", "梅花", "方塊" };//-----------1分
Card[] card = new Card[52]; //-----------1分
for (int j = 0; j < s.length; j++) {//-----------1分
for (int k = 0; k < f.length; k++) {//-----------1分
card[k * 4 + j] = new Card(f[k], s[j]); //-----------1分
}
}
}
