Java面试题目.docx
《Java面试题目.docx》由会员分享,可在线阅读,更多相关《Java面试题目.docx(106页珍藏版)》请在冰点文库上搜索。
Java面试题目
101,内部类的实现方式?
答:
示例代码如下:
packagetest;
publicclassOuterClass
{
privateclassInterClass
publicInterClass()
System.out.println("InterClassCreate");
}
publicOuterClass()
InterClassic=newInterClass();
System.out.println("OuterClassCreate");
publicstaticvoidmain(String[]args)
OuterClassoc=newOuterClass();
输出结果:
C:
>javatest/OuterClass
InterClassCreate
OuterClassCreate
再一个例题:
publicclassOuterClass{
privatedoubled1=1.0;
//insertcodehere
Youneedtoinsertaninnerclassdeclarationatline3.Whichtwoinnerclassdeclarationsare
valid?
(Choosetwo.)
A.classInnerOne{
publicstaticdoublemethoda(){returnd1;}
B.publicclassInnerOne{
staticdoublemethoda(){returnd1;}
C.privateclassInnerOne{
doublemethoda(){returnd1;}
D.staticclassInnerOne{
protecteddoublemethoda(){returnd1;}
E.abstractclassInnerOne{
publicabstractdoublemethoda();
说明如下:
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
故A、B错
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;returnd1出错。
故D错
三.非静态内部类的非静态成员可以访问外部类的非静态变量。
故C正确
四.答案为C、E。
102,Java的通信编程,编程题(或问答),用JAVASOCKET编程,读服务器几个字符,再写入本地显示?
答:
Server端程序:
import.*;
importjava.io.*;
publicclassServer
privateServerSocketss;
privateSocketsocket;
privateBufferedReaderin;
privatePrintWriterout;
publicServer()
try
ss=newServerSocket(10000);
while(true)
socket=ss.accept();
StringRemoteIP=socket.getInetAddress().getHostAddress();
StringRemotePort=":
"+socket.getLocalPort();
System.out.println("Aclientcomein!
IP:
"+RemoteIP+RemotePort);
in=newBufferedReader(new
InputStreamReader(socket.getInputStream()));
Stringline=in.readLine();
System.out.println("Cleintsendis:
"+line);
out=newPrintWriter(socket.getOutputStream(),true);
out.println("YourMessageReceived!
");
out.close();
in.close();
socket.close();
}catch(IOExceptione)
out.println("wrong");
newServer();
};
Client端程序:
publicclassClient
Socketsocket;
BufferedReaderin;
PrintWriterout;
publicClient()
System.out.println("TrytoConnectto127.0.0.1:
10000");
socket=newSocket("127.0.0.1",10000);
System.out.println("TheServerConnected!
System.out.println("PleaseentersomeCharacter:
BufferedReaderline=newBufferedReader(new
InputStreamReader(System.in));
out.println(line.readLine());
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.println("Wrong");
newClient();
103,用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?
如在COLLECTION框架中,实现比较要实现什么样的接口?
用插入法进行排序代码如下
importjava.util.*;
classInsertSort
ArrayListal;
publicInsertSort(intnum,intmod)
al=newArrayList(num);
Randomrand=newRandom();
System.out.println("TheArrayListSortBefore:
for(inti=0;i{al.add(newInteger(Math.abs(rand.nextInt())%mod+1));System.out.println("al["+i+"]="+al.get(i));}}publicvoidSortIt(){IntegertempInt;intMaxSize=1;for(inti=1;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(intj=0;j{if(((Integer)al.get(j)).intValue()>=tempInt.intValue()){al.add(j,tempInt);MaxSize++;System.out.println(al.toString());break;}}}}System.out.println("TheArrayListSortAfter:");for(inti=0;i{System.out.println("al["+i+"]="+al.get(i));}}publicstaticvoidmain(String[]args){InsertSortis=newInsertSort(10,100);is.SortIt();}}JAVA类实现序例化的方法是实现java.io.Serializable接口Collection框架中实现比较要实现Comparable接口和Comparator接口。104,编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。答:代码如下:packagetest;classSplitString{StringSplitStr;intSplitByte;publicSplitString(Stringstr,intbytes){SplitStr=str;SplitByte=bytes;System.out.println("TheStringis:′"+SplitStr+"′;SplitBytes="+SplitByte);}publicvoidSplitIt(){intloopCount;loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);System.out.println("WillSplitinto"+loopCount);for(inti=1;i<=loopCount;i++){if(i==loopCount){System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));}else{System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));}}}publicstaticvoidmain(String[]args){SplitStringss=newSplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);ss.SplitIt();}}105,STRING与STRINGBUFFER的区别。答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法JAVA代码查错106,abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大侠们,这有何错误?答案:错。abstractmethod必须以分号结尾,且不带花括号。107,publicclassSomething{voiddoSomething(){privateStrings="";intl=s.length();}}有错吗?答案:错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。108,abstractclassSomething{privateabstractStringdoSomething();}这好像没什么错吧?答案:错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢?(同理,abstractmethod前不能加final)。109,publicclassSomething{publicintaddOne(finalintx){return++x;}}这个比较明显。答案:错。intx被修饰成final,意味着x不能在addOnemethod中被修改。110,publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);} publicvoidaddOne(finalOthero){ o.i++;}} classOther{publicinti;}和上面的很相似,都是关于final的问题,这有错吗?答案:正确。在addOnemethod中,参数o被修饰成final。如果在addOnemethod里我们修改了o的reference,(比如:o=newOther();),那么如同上例这题也是错的。但这里修改的是o的membervairable(成员变量),而o的reference并没有改变。111,classSomething{inti;publicvoiddoSomething(){ System.out.println("i="+i);}}有什么错呢?看不出来啊。答案:正确。输出的是"i=0"。inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有defaultvalue。int的defaultvalue是0。112,classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?答案:错。finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为"finalinti=0;"。113,publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething(); System.out.println("s.doSomething()returns"+doSomething()); } publicStringdoSomething(){ return"Dosomething...";}}看上去很完美。答案:错。看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。staticmethod不能直接callnon-staticmethods。可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。同理,staticmethod不能访问non-staticinstantvariable。114,此处,Something类的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething...");}}这个好像很明显。答案:正确。从来没有人说过Java的Class名字必须和其文件名相同。但publicclass的名字必须和文件名相同。115,interfaceA{intx=0;} classB{intx=1;}classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确。116,interfacePlayable{voidplay();} interfaceBounceable{voidplay();} interfaceRollableextendsPlayable,Bounceable{ Ballball=newBall("PingPang");}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall("Football");System.out.println(ball.getName());}}这个错误不容易发现。答案:错。"interfaceRollableextendsPlayable,Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的"Ballball=newBall("PingPang");"。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。也就是说"Ballball=newBall("PingPang");"实际上是"publicstaticfinalBallball=newBall("PingPang");"。在Ball类的Play()方法中,"ball=newBall("Football");"改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在"ball=newBall("Football");"这里显示有错。JAVA编程题117,现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimportjava.util.*;publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals("")) returnnull;StringTokenizercommaToker=newStringTokenizer(source,","); String[]result=newString[commaToker.countTokens()];inti=0; while(commaToker.hasMoreTokens()){ result=c
al.add(newInteger(Math.abs(rand.nextInt())%mod+1));
System.out.println("al["+i+"]="+al.get(i));
publicvoidSortIt()
IntegertempInt;
intMaxSize=1;
for(inti=1;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(intj=0;j{if(((Integer)al.get(j)).intValue()>=tempInt.intValue()){al.add(j,tempInt);MaxSize++;System.out.println(al.toString());break;}}}}System.out.println("TheArrayListSortAfter:");for(inti=0;i{System.out.println("al["+i+"]="+al.get(i));}}publicstaticvoidmain(String[]args){InsertSortis=newInsertSort(10,100);is.SortIt();}}JAVA类实现序例化的方法是实现java.io.Serializable接口Collection框架中实现比较要实现Comparable接口和Comparator接口。104,编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。答:代码如下:packagetest;classSplitString{StringSplitStr;intSplitByte;publicSplitString(Stringstr,intbytes){SplitStr=str;SplitByte=bytes;System.out.println("TheStringis:′"+SplitStr+"′;SplitBytes="+SplitByte);}publicvoidSplitIt(){intloopCount;loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);System.out.println("WillSplitinto"+loopCount);for(inti=1;i<=loopCount;i++){if(i==loopCount){System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));}else{System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));}}}publicstaticvoidmain(String[]args){SplitStringss=newSplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);ss.SplitIt();}}105,STRING与STRINGBUFFER的区别。答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法JAVA代码查错106,abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大侠们,这有何错误?答案:错。abstractmethod必须以分号结尾,且不带花括号。107,publicclassSomething{voiddoSomething(){privateStrings="";intl=s.length();}}有错吗?答案:错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。108,abstractclassSomething{privateabstractStringdoSomething();}这好像没什么错吧?答案:错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢?(同理,abstractmethod前不能加final)。109,publicclassSomething{publicintaddOne(finalintx){return++x;}}这个比较明显。答案:错。intx被修饰成final,意味着x不能在addOnemethod中被修改。110,publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);} publicvoidaddOne(finalOthero){ o.i++;}} classOther{publicinti;}和上面的很相似,都是关于final的问题,这有错吗?答案:正确。在addOnemethod中,参数o被修饰成final。如果在addOnemethod里我们修改了o的reference,(比如:o=newOther();),那么如同上例这题也是错的。但这里修改的是o的membervairable(成员变量),而o的reference并没有改变。111,classSomething{inti;publicvoiddoSomething(){ System.out.println("i="+i);}}有什么错呢?看不出来啊。答案:正确。输出的是"i=0"。inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有defaultvalue。int的defaultvalue是0。112,classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?答案:错。finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为"finalinti=0;"。113,publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething(); System.out.println("s.doSomething()returns"+doSomething()); } publicStringdoSomething(){ return"Dosomething...";}}看上去很完美。答案:错。看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。staticmethod不能直接callnon-staticmethods。可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。同理,staticmethod不能访问non-staticinstantvariable。114,此处,Something类的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething...");}}这个好像很明显。答案:正确。从来没有人说过Java的Class名字必须和其文件名相同。但publicclass的名字必须和文件名相同。115,interfaceA{intx=0;} classB{intx=1;}classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确。116,interfacePlayable{voidplay();} interfaceBounceable{voidplay();} interfaceRollableextendsPlayable,Bounceable{ Ballball=newBall("PingPang");}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall("Football");System.out.println(ball.getName());}}这个错误不容易发现。答案:错。"interfaceRollableextendsPlayable,Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的"Ballball=newBall("PingPang");"。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。也就是说"Ballball=newBall("PingPang");"实际上是"publicstaticfinalBallball=newBall("PingPang");"。在Ball类的Play()方法中,"ball=newBall("Football");"改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在"ball=newBall("Football");"这里显示有错。JAVA编程题117,现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimportjava.util.*;publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals("")) returnnull;StringTokenizercommaToker=newStringTokenizer(source,","); String[]result=newString[commaToker.countTokens()];inti=0; while(commaToker.hasMoreTokens()){ result=c
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(intj=0;j{if(((Integer)al.get(j)).intValue()>=tempInt.intValue()){al.add(j,tempInt);MaxSize++;System.out.println(al.toString());break;}}}}System.out.println("TheArrayListSortAfter:");for(inti=0;i{System.out.println("al["+i+"]="+al.get(i));}}publicstaticvoidmain(String[]args){InsertSortis=newInsertSort(10,100);is.SortIt();}}JAVA类实现序例化的方法是实现java.io.Serializable接口Collection框架中实现比较要实现Comparable接口和Comparator接口。104,编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。答:代码如下:packagetest;classSplitString{StringSplitStr;intSplitByte;publicSplitString(Stringstr,intbytes){SplitStr=str;SplitByte=bytes;System.out.println("TheStringis:′"+SplitStr+"′;SplitBytes="+SplitByte);}publicvoidSplitIt(){intloopCount;loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);System.out.println("WillSplitinto"+loopCount);for(inti=1;i<=loopCount;i++){if(i==loopCount){System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));}else{System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));}}}publicstaticvoidmain(String[]args){SplitStringss=newSplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);ss.SplitIt();}}105,STRING与STRINGBUFFER的区别。答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法JAVA代码查错106,abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大侠们,这有何错误?答案:错。abstractmethod必须以分号结尾,且不带花括号。107,publicclassSomething{voiddoSomething(){privateStrings="";intl=s.length();}}有错吗?答案:错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。108,abstractclassSomething{privateabstractStringdoSomething();}这好像没什么错吧?答案:错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢?(同理,abstractmethod前不能加final)。109,publicclassSomething{publicintaddOne(finalintx){return++x;}}这个比较明显。答案:错。intx被修饰成final,意味着x不能在addOnemethod中被修改。110,publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);} publicvoidaddOne(finalOthero){ o.i++;}} classOther{publicinti;}和上面的很相似,都是关于final的问题,这有错吗?答案:正确。在addOnemethod中,参数o被修饰成final。如果在addOnemethod里我们修改了o的reference,(比如:o=newOther();),那么如同上例这题也是错的。但这里修改的是o的membervairable(成员变量),而o的reference并没有改变。111,classSomething{inti;publicvoiddoSomething(){ System.out.println("i="+i);}}有什么错呢?看不出来啊。答案:正确。输出的是"i=0"。inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有defaultvalue。int的defaultvalue是0。112,classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?答案:错。finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为"finalinti=0;"。113,publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething(); System.out.println("s.doSomething()returns"+doSomething()); } publicStringdoSomething(){ return"Dosomething...";}}看上去很完美。答案:错。看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。staticmethod不能直接callnon-staticmethods。可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。同理,staticmethod不能访问non-staticinstantvariable。114,此处,Something类的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething...");}}这个好像很明显。答案:正确。从来没有人说过Java的Class名字必须和其文件名相同。但publicclass的名字必须和文件名相同。115,interfaceA{intx=0;} classB{intx=1;}classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确。116,interfacePlayable{voidplay();} interfaceBounceable{voidplay();} interfaceRollableextendsPlayable,Bounceable{ Ballball=newBall("PingPang");}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall("Football");System.out.println(ball.getName());}}这个错误不容易发现。答案:错。"interfaceRollableextendsPlayable,Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的"Ballball=newBall("PingPang");"。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。也就是说"Ballball=newBall("PingPang");"实际上是"publicstaticfinalBallball=newBall("PingPang");"。在Ball类的Play()方法中,"ball=newBall("Football");"改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在"ball=newBall("Football");"这里显示有错。JAVA编程题117,现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimportjava.util.*;publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals("")) returnnull;StringTokenizercommaToker=newStringTokenizer(source,","); String[]result=newString[commaToker.countTokens()];inti=0; while(commaToker.hasMoreTokens()){ result=c
if
(((Integer)al.get(j)).intValue()>=tempInt.intValue())
al.add(j,tempInt);
break;
System.out.println("TheArrayListSortAfter:
for(inti=0;i{System.out.println("al["+i+"]="+al.get(i));}}publicstaticvoidmain(String[]args){InsertSortis=newInsertSort(10,100);is.SortIt();}}JAVA类实现序例化的方法是实现java.io.Serializable接口Collection框架中实现比较要实现Comparable接口和Comparator接口。104,编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。答:代码如下:packagetest;classSplitString{StringSplitStr;intSplitByte;publicSplitString(Stringstr,intbytes){SplitStr=str;SplitByte=bytes;System.out.println("TheStringis:′"+SplitStr+"′;SplitBytes="+SplitByte);}publicvoidSplitIt(){intloopCount;loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);System.out.println("WillSplitinto"+loopCount);for(inti=1;i<=loopCount;i++){if(i==loopCount){System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));}else{System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));}}}publicstaticvoidmain(String[]args){SplitStringss=newSplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);ss.SplitIt();}}105,STRING与STRINGBUFFER的区别。答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法JAVA代码查错106,abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大侠们,这有何错误?答案:错。abstractmethod必须以分号结尾,且不带花括号。107,publicclassSomething{voiddoSomething(){privateStrings="";intl=s.length();}}有错吗?答案:错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。108,abstractclassSomething{privateabstractStringdoSomething();}这好像没什么错吧?答案:错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢?(同理,abstractmethod前不能加final)。109,publicclassSomething{publicintaddOne(finalintx){return++x;}}这个比较明显。答案:错。intx被修饰成final,意味着x不能在addOnemethod中被修改。110,publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);} publicvoidaddOne(finalOthero){ o.i++;}} classOther{publicinti;}和上面的很相似,都是关于final的问题,这有错吗?答案:正确。在addOnemethod中,参数o被修饰成final。如果在addOnemethod里我们修改了o的reference,(比如:o=newOther();),那么如同上例这题也是错的。但这里修改的是o的membervairable(成员变量),而o的reference并没有改变。111,classSomething{inti;publicvoiddoSomething(){ System.out.println("i="+i);}}有什么错呢?看不出来啊。答案:正确。输出的是"i=0"。inti属於instantvariable(实例变量,或叫成员变量)。instantvariable有defaultvalue。int的defaultvalue是0。112,classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?答案:错。finalinti是个final的instantvariable(实例变量,或叫成员变量)。final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为"finalinti=0;"。113,publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething(); System.out.println("s.doSomething()returns"+doSomething()); } publicStringdoSomething(){ return"Dosomething...";}}看上去很完美。答案:错。看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。staticmethod不能直接callnon-staticmethods。可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。同理,staticmethod不能访问non-staticinstantvariable。114,此处,Something类的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething...");}}这个好像很明显。答案:正确。从来没有人说过Java的Class名字必须和其文件名相同。但publicclass的名字必须和文件名相同。115,interfaceA{intx=0;} classB{intx=1;}classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确。116,interfacePlayable{voidplay();} interfaceBounceable{voidplay();} interfaceRollableextendsPlayable,Bounceable{ Ballball=newBall("PingPang");}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall("Football");System.out.println(ball.getName());}}这个错误不容易发现。答案:错。"interfaceRollableextendsPlayable,Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interfaceRollable里的"Ballball=newBall("PingPang");"。任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。也就是说"Ballball=newBall("PingPang");"实际上是"publicstaticfinalBallball=newBall("PingPang");"。在Ball类的Play()方法中,"ball=newBall("Football");"改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。因此编译器将在"ball=newBall("Football");"这里显示有错。JAVA编程题117,现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimportjava.util.*;publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals("")) returnnull;StringTokenizercommaToker=newStringTokenizer(source,","); String[]result=newString[commaToker.countTokens()];inti=0; while(commaToker.hasMoreTokens()){ result=c
InsertSortis=newInsertSort(10,100);
is.SortIt();
JAVA类实现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable接口和Comparator接口。
104,编程:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
代码如下:
classSplitString
StringSplitStr;
intSplitByte;
publicSplitString(Stringstr,intbytes)
SplitStr=str;
SplitByte=bytes;
System.out.println("TheStringis:
′"+SplitStr+"′;SplitBytes="+SplitByte);
publicvoidSplitIt()
intloopCount;
loopCount=(SplitStr.length()%SplitByte==0)?
(SplitStr.length()/SplitByte):
(SplitStr.length()/Split
Byte+1);
System.out.println("WillSplitinto"+loopCount);
for(inti=1;i<=loopCount;i++)
if(i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
SplitStringss=newSplitString("test中dd文dsaf中男大3443n中国43中国人
0ewldfls=103",4);
ss.SplitIt();
105,STRING与STRINGBUFFER的区别。
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。
如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
JAVA代码查错
106,abstractclassName{privateStringname;publicabstractbooleanisStupidName(Stringname){}}大侠们,这有何错误?
答案:
错。
abstractmethod必须以分号结尾,且不带花括号。
107,publicclassSomething{voiddoSomething(){privateStrings="";intl=s.length();}}有错吗?
局部变量前不能放置任何访问修饰符(private,public,和protected)。
final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。
108,abstractclassSomething{privateabstractStringdoSomething();}这好像没什么错吧?
abstract的methods不能以private修饰。
abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢?
(同理,abstractmethod前不能加final)。
109,publicclassSomething{publicintaddOne(finalintx){return++x;}}这个比较明显。
intx被修饰成final,意味着x不能在addOnemethod中被修改。
110,publicclassSomething{publicstaticvoidmain(String[]args){Othero=newOther();newSomething().addOne(o);} publicvoidaddOne(finalOthero){ o.i++;}} classOther{publicinti;}和上面的很相似,都是关于final的问题,这有错吗?
正确。
在addOnemethod中,参数o被修饰成final。
如果在addOnemethod里我们修改了o的reference,(比如:
o=newOther();),那么如同上例这题也是错的。
但这里修改的是o的membervairable(成员变量),而o的reference并没有改变。
111,classSomething{inti;publicvoiddoSomething(){ System.out.println("i="+i);}}有什么错呢?
看不出来啊。
输出的是"i=0"。
inti属於instantvariable(实例变量,或叫成员变量)。
instantvariable有defaultvalue。
int的defaultvalue是0。
112,classSomething{finalinti;publicvoiddoSomething(){System.out.println("i="+i);}}和上面一题只有一个地方不同,就是多了一个final。
这难道就错了吗?
finalinti是个final的instantvariable(实例变量,或叫成员变量)。
final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。
可以修改为"finalinti=0;"。
113,publicclassSomething{publicstaticvoidmain(String[]args){Somethings=newSomething(); System.out.println("s.doSomething()returns"+doSomething()); } publicStringdoSomething(){ return"Dosomething...";}}看上去很完美。
看上去在main里calldoSomething没有什么问题,毕竟两个methods都在同一个class里。
但仔细看,main是static的。
staticmethod不能直接callnon-staticmethods。
可改成"System.out.println("s.doSomething()returns"+s.doSomething());"。
同理,staticmethod不能访问non-staticinstantvariable。
114,此处,Something类的文件名叫OtherThing.javaclassSomething{privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething...");}}这个好像很明显。
从来没有人说过Java的Class名字必须和其文件名相同。
但publicclass的名字必须和文件名相同。
115,interfaceA{intx=0;} classB{intx=1;}classCextendsBimplementsA{publicvoidpX(){System.out.println(x);}publicstaticvoidmain(String[]args){newC().pX();}}
答案:
错误。
在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时importjava.util和java.sql两个包时直接声明Date一样)。
对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为publicstaticfinal.所以可以通过A.x来明确。
116,interfacePlayable{voidplay();} interfaceBounceable{voidplay();} interfaceRollableextendsPlayable,Bounceable{ Ballball=newBall("PingPang");}classBallimplementsRollable{privateStringname;publicStringgetName(){returnname;}publicBall(Stringname){this.name=name;}publicvoidplay(){ball=newBall("Football");System.out.println(ball.getName());}}这个错误不容易发现。
"interfaceRollableextendsPlayable,Bounceable"没有问题。
interface可继承多个interfaces,所以这里没错。
问题出在interfaceRollable里的"Ballball=newBall("PingPang");"。
任何在interface里声明的interfacevariable(接口变量,也可称成员变量),默认为publicstaticfinal。
也就是说"Ballball=newBall("PingPang");"实际上是"publicstaticfinalBallball=newBall("PingPang");"。
在Ball类的Play()方法中,"ball=newBall("Football");"改变了ball的reference,而这里的ball来自Rollableinterface,Rollableinterface里的ball是publicstaticfinal的,final的object是不能被改变reference的。
因此编译器将在"ball=newBall("Football");"这里显示有错。
JAVA编程题
117,现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
publicclassbycomma{publicstaticString[]splitStringByComma(Stringsource){if(source==null||source.trim().equals("")) returnnull;StringTokenizercommaToker=newStringTokenizer(source,","); String[]result=newString[commaToker.countTokens()];inti=0; while(commaToker.hasMoreTokens()){ result=c
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2