古詩詞大全網 - 經典古詩 - 求java考題,筆試題

求java考題,筆試題

Java面向對象

1. super()與this()的區別?

This():當前類的對象,super父類對象。

Super():在子類訪問父類的成員和行為,必須受類繼承規則的約束

而this他代表當前對象,當然所有的資源都可以訪問.

在構造函數中,如果第壹行沒有寫super(),編譯器會自動插入.但是如果父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時妳必須加入對父類的實例化構造.而this就沒有這個要求,因為它本身就進行實例化的構造.

而在方法中super和this使用的方法就差不多了.只不過super 要考慮是否能訪問其父類的資源.

2. 作用域public,protected,private,以及不寫時的區別?

Public:不同包、 同壹包、 類內都可用

Private: 類內

Protected:不同包的子類、同壹包、 類內都可用

不寫時: 同壹包內、類內

3. 編程輸出如下圖形。

* * * * *

* * * *

* * *

* *

*

代碼如下:

public class Print {

publicstatic void main(String[] args) {

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

for(int j = 5; j > i; j--) {

System.out.print("*");

}

System.out.println();

}

}

}

4. JAVA的事件委托機制和垃圾回收機制

Java事件委托機制的概念,壹個源產生壹個事件並將它送到壹個或多個監聽器那裏。在這種方案中,監聽器簡單的等待,直到它收到壹個事件。壹旦事件被接受,監聽器將處理這個事件,然後返回。

垃圾回收機制垃圾收集是將分配給對象但不再使用的內存回收或釋放的過程。如果壹個對象沒有指向它的引用或者其賦值為null,則次對象適合進行垃圾回收

5. 在JAVA中,如何跳出當前的多重嵌套循環?

用break; return 方法。

6. 什麽是java序列化,如何實現java序列化?(寫壹個實例)

序列化:處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。

序列化的實現:將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implementsSerializable只是為了標註該對象是可被序列化的,然後使用壹個輸出流(如:FileOutputStream)來構造壹個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

7. 壹個".java"源文件中是否可以包括多個類(不是內部類)?有什麽限制?

可以。如果這個類的修飾符是public,其類名與文件名必須相同。

8. 排序都有哪幾種方法?請列舉。用JAVA實現壹個快速排序?

排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸並排序,分配排序(箱排序、基數排序)

快速排序的偽代碼。

9. Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?

重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的還是子類的方法。

重載Overloading 壹個類多個方法,名稱相同,參數個數類型不同。

兩者都是Java多態性的不同表現。

Overloaded的方法是可以改變返回值的類型。

1, public class Ctest(){

Public static void main(){

System.out.prinln(8+8+”88”+8+8);

}

} 168888

(方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的壹種表現,重載Overloading是壹個類中多態性的壹種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在壹個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。

Overloaded的方法是可以改變返回值的類型。)

10. Final類有什麽特點?

屬性常量 方法不可以overridding 類不可以繼承

11. 繼承時候類的執行順序問題,壹般都是選擇題,問妳將會打印出什麽?

答:父類:

package test;

public class FatherClass {

public FatherClass() {

System.out.println("FatherClassCreate");

}

}

子類:

package test;

import test.FatherClass;

public class ChildClass extends FatherClass{

public ChildClass() {

System.out.println("ChildClassCreate");

}

public static void main(String[] args) {

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

}

}

輸出結果:

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

12. 內部類的實現方式?

package test;

public class OuterClass {

private class InterClass {

Public Interlass(){

System.out.println("InterClassCreate");

}

}

public OuterClass(){

InterClass ic = new InterClass();

System.out.println("OuterClassCreate");

}

public static void main(String[] args){

OuterClass oc = new OuterClass();

}

}

輸出結果:

C:>java test/OuterClass InterClass Create OuterClass Create

13. 用JAVA實現壹種排序,JAVA類實現序列化的方法(二種)?

14. 如在COLLECTION框架中,實現比較要實現什麽樣的接口?

15. 用插入法進行排序代碼如下

package test;

import java.util.*;

class InsertSort {

ArrayList al;

public InsertSort(int num,int mod) {

al = new ArrayList(num);

Random rand = new Random();

System.out.println("The ArrayList SortBefore:");

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

al.add(new Integer(Math.abs(rand.nextInt())% mod + 1));

System.out.println("al["+i+"]="+al.get(i));

}

}

public void SortIt(){

Integer tempInt;

int MaxSize=1;

for(int i=1;i<al.size();i++){

tempInt = (Integer)al.remove(i);

if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()){

al.add(MaxSize,tempInt);

MaxSize++;

System.out.println(al.toString());

} else {

for (int j=0;j<MaxSize ;j++ ){

if(((Integer)al.get(j)).intValue()>=tempInt.intValue()){

al.add(j,tempInt);

MaxSize++;

System.out.println(al.toString());

break;

}

}

}

}

System.out.println("The ArrayList SortAfter:");

for(int i=0;i<al.size();i++) {

System.out.println("al["+i+"]="+al.get(i));

}

}

public static void main(String[] args) {

InsertSort is = new InsertSort(10,100);

is.SortIt();

}

}

JAVA類實現序例化的方法是實現java.io.Serializable接口

Collection框架中實現比較要實現Comparable 接口和 Comparator 接口

16. 編程:編寫壹個截取字符串的函數,輸入為壹個字符串和字節數,輸出為按字節截取的字符串。但是要保證漢字不被截半個,如"我ABC"4,應該截為"我AB",輸入"我ABC漢DEF",6,應該輸出為"我ABC"而不是"我ABC+漢的半個"。

public static void split(String source,intnum) throws Exception{

intk=0;

Stringtemp="";

for(int i = 0; i <source.length(); i++){

byte[]b=(source.charAt(i)+"").getBytes();

k=k+b.length;

if(k>num){

break;

}

temp=temp+source.charAt(i);

}

System.out.println(temp);

}

15、Java編程,打印昨天的當前時刻

public class YesterdayCurrent{

public void main(String[] args){

Calendar cal = Calendar.getInstance();

cal.add(Calendar.DATE, -1);

System.out.println(cal.getTime());

}

}

16、文件讀寫,實現壹個計數器

public int getNum(){

int i = -1;

try{

String stri="";

BufferedReader in = new BufferedReader(newFileReader(f));

while((stri=in.readLine())!=null){

i = Integer.parseInt(stri.trim());

}

in.close();

}catch(Exception e){

e.printStackTrace();

}

return i;

}

public void setNum(){

int i = getNum();

i++;

try{

PrintWriter out=new PrintWriter(newBufferedWriter(new FileWriter(f,false)));

out.write(String.valueOf(i)); //可能是編碼的原因,如果直接寫入int的話,將出現java編碼和windows編碼的混亂,因此此處寫入的是String

out.close() ;

}catch(Exception e){

e.printStackTrace();

}

}

17、指出下面程序的運行結果。

class A{

static{

System.out.print("1");

}

public A(){

System.out.print("2");

}

}

class B extends A{

static{

System.out.print("a");

}

public B(){

System.out.print("b");

}

}

public class Hello{

public static void main(String[] ars){

A ab = new B(); //執行到此處,結果: 1a2b

ab = new B(); //執行到此處,結果: 1a2b2b

}

}註:類的static 代碼段,可以看作是類首次加載(被虛擬機加載)執行的代碼,而對於類的加載,首先要執行其基類的構造,再執行其本身的構造

18、抽象類和接口的區別?

(1)接口可以被多重implements,抽象類只能被單壹extends(2)接口只有定義,抽象類可以有定義和實現(3)接口的字段定義默認為:publicstatic final, 抽象類字段默認是"friendly"(本包可見)

當功能需要累積時用抽象類,不需要累積時用接口。

19、什麽是類的反射機制?

通過類(Class對象),可以得出當前類的fields、method、construtor、interface、superClass、modified等,同是可以通過類實例化壹個實例、設置屬性、喚醒方法。Spring中壹切都是返射、struts、hibernate都是通過類的返射進行開發的。

20、類的返射機制中的包及核心類?

①java.lang.Class②java.lang.refrection.Method③java.lang.refrection.Field

④java.lang.refrection.Constructor⑤java.lang.refrection.Modifier⑥java.lang.refrection.Interface

21、得到Class的三個過程是什麽?

①對象.getClass()②類.class或Integer.type(int) Integer.class(java.lang.Integer)③Class.forName();

22、如何喚起類中的壹個方法?

①產生壹個Class數組,說明方法的參數②通過Class對象及方法參數得到Method③通過method.invoke(實例,參數值數組)喚醒方法

23、如何將數值型字符轉換為數字(Integer,Double)?

Integer.parseInt(“1234”) Double.parseDouble(“123.2”)

24、如何將數字轉換為字符?

1+”” 1.0+””

25、如何去小數點前兩位,並四舍五入。

double d=1256.22d; d=d/100; System.out.println(Math.round(d)*100);

26、如何取得年月日,小時分秒?

Calendar c=Calendar.getInstance();

c.set(Calendar.YEAR,2004);

c.set(Calendar.MONTH,0);

c.set(Calendar.DAY_OF_MONTH,31);

System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH));

27、如何取得從1970年到現在的毫秒數

Java.util.Date dat=new Date(); long now=dat.getTime();

或System.currentTimeMillis()

28、如何獲取某個日期是當月的最後壹天?

當前日期加壹天,若當前日期與結果的月份不相同,就是最後壹天。

取下壹個月的第壹天,下壹個月的第壹天-1

public static void main(String[] args){

Calendarc=Calendar.getInstance();

c.set(Calendar.YEAR,2004);

c.set(Calendar.MONTH,0);

c.set(Calendar.DAY_OF_MONTH,30);

Calendarc1=(Calendar)c.clone();

System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH));

c.add(Calendar.DAY_OF_MONTH,1);

if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH)){

System.out.println("是最後壹天");

}else{

System.out.println("不是取後壹天");

}

}

29、如何格式化日期?

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date dat=new Date();

String str=sdf.format(dat); //把日期轉化為字符串

System.out.println(str);

Java.util.Date d1=sdf.parse(“yyyy-mm-dd”); //將字符串轉化為日期

30、編碼轉換,怎樣實現將GB2312編碼的字符串轉換為ISO-8859-1編碼的字符串。

String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a=new String("中".getBytes("iso-8859-1"));

應該是String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a1=newString(a.getBytes("iso-8859-1"));