Java面试题目.docx
- 文档编号:10064106
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:106
- 大小:82.44KB
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端程序:
packagetest;
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");
}
}
publicstaticvoidmain(String[]args)
{
newServer();
}
};
Client端程序:
packagetest;
importjava.io.*;
import.*;
publicclassClient
{
Socketsocket;
BufferedReaderin;
PrintWriterout;
publicClient()
{
try
{
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=newPrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in=newBufferedReader(newInputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOExceptione)
{
out.println("Wrong");
}
}
publicstaticvoidmain(String[]args)
{
newClient();
}
};
103,用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?
如在COLLECTION框架中,实现比较要实现什么样的接口?
答:
用插入法进行排序代码如下
packagetest;
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()/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())); }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个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset importjava.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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面试 题目