Java面试题编程题.docx
- 文档编号:4100304
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:33
- 大小:32.75KB
Java面试题编程题.docx
《Java面试题编程题.docx》由会员分享,可在线阅读,更多相关《Java面试题编程题.docx(33页珍藏版)》请在冰豆网上搜索。
Java面试题编程题
48、编程题:
写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式:
定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
publicclassSingleton{
privateSingleton(){}
privatestaticSingletoninstance=newSingleton();
publicstaticSingletongetInstance(){
returninstance;
}
}
第二种形式:
publicclassSingleton{
privatestaticSingletoninstance=null;
publicstaticsynchronizedSingletongetInstance(){
if(instance==null)
instance=newSingleton();
returninstance;
}
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
10.如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。
publicclassBigInt(){int[]ArrOne=newArrOne[1000];StringintString="";publicint[]Arr(Strings){intString=s;for(inti=0;i 68、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? publicStringtranslate(Stringstr){ StringtempStr=""; try{ tempStr=newString(str.getBytes("ISO-8859-1"),"GBK"); tempStr=tempStr.trim(); }catch(Exceptione){ System.err.println(e.getMessage()); } returntempStr; } 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。 写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 publicclassThreadTest1{ privateintj; publicstaticvoidmain(Stringargs[]){ ThreadTest1tt=newThreadTest1(); Incinc=tt.newInc(); Decdec=tt.newDec(); for(inti=0;i<2;i++){ Threadt=newThread(inc); t.start(); t=newThread(dec); t.start(); } } privatesynchronizedvoidinc(){ j++; System.out.println(Thread.currentThread().getName() +"-inc: "+j); } privatesynchronizedvoiddec(){ j--; System.out.println(Thread.currentThread().getName() +"-dec: "+j); } classIncimplementsRunnable{ publicvoidrun(){ for(inti=0;i<100;i++){ inc(); } } } classDecimplementsRunnable{ publicvoidrun(){ for(inti=0;i<100;i++){ dec(); } } } } JAVA代码查错 abstractclassName{ privateStringname; publicabstractbooleanisStupidName(Stringname){} } 大侠们,这有何错误? 答案: 错。 abstractmethod必须以分号结尾,且不带花括号。 2.publicclassSomething{ voiddoSomething(){ privateStrings=""; intl=s.length(); } } 有错吗? 答案: 错。 局部变量前不能放置任何访问修饰符(private,public,和protected)。 final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。 3.abstractclassSomething{ privateabstractStringdoSomething(); } 这好像没什么错吧? 答案: 错。 abstract的methods不能以private修饰。 abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢? (同理,abstractmethod前不能加final)。 4.publicclassSomething{ publicintaddOne(finalintx){ return++x; } } 这个比较明显。 答案: 错。 intx被修饰成final,意味着x不能在addOnemethod中被修改。 5.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并没有改变。 6.classSomething{ inti; publicvoiddoSomething(){ System.out.println("i="+i); } } 有什么错呢? 看不出来啊。 答案: 正确。 输出的是"i=0"。 inti属於instantvariable(实例变量,或叫成员变量)。 instantvariable有defaultvalue。 int的defaultvalue是0。 7.classSomething{ finalinti; publicvoiddoSomething(){ System.out.println("i="+i); } } 和上面一题只有一个地方不同,就是多了一个final。 这难道就错了吗? 答案: 错。 finalinti是个final的instantvariable(实例变量,或叫成员变量)。 final的instantvariable没有defaultvalue,必须在constructor(构造器)结束之前被赋予一个明确的值。 可以修改为"finalinti=0;"。 8.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。 9.此处,Something类的文件名叫OtherThing.java classSomething{ privatestaticvoidmain(String[]something_to_do){ System.out.println("Dosomething..."); } } 这个好像很明显。 答案: 正确。 从来没有人说过Java的Class名字必须和其文件名相同。 但publicclass的名字必须和文件名相同。 10.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来明确。 11.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");"这里显示有错。 10.写一个方法,实现字符串的反转,如: 输入abc,输出cba publicstaticStringreverse(Strings){ intlength=s.length(); StringBufferresult=newStringBuffer(length); for(inti=length-1;i>=0;i--) result.append(s.charAt(i)); returnresult.toString(); } JAVA编程题 1.现在输入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[i]=commaToker.nextToken(); i++; } returnresult; } publicstaticvoidmain(Stringargs[]){ String[]s=splitStringByComma("5,8,7,4,3,9,1"); int[]ii=newint[s.length]; for(inti=0;i ii[i]=Integer.parseInt(s[i]); } Arrays.sort(ii);//asc for(inti=0;i System.out.println(ii[i]); }//desc for(inti=(s.length-1);i>=0;i--){ System.out.println(ii[i]); } } } 2.金额转换,阿拉伯数字的金额转换成中国传统的形式如: (¥1011)->(一千零一拾一元整)输出。 packagetest.format; importjava.text.NumberFormat; importjava.util.HashMap; publicclassSimpleMoneyFormat{ publicstaticfinalStringEMPTY=""; publicstaticfinalStringZERO="零"; publicstaticfinalStringONE="壹"; publicstaticfinalStringTWO="贰"; publicstaticfinalStringTHREE="叁"; publicstaticfinalStringFOUR="肆"; publicstaticfinalStringFIVE="伍"; publicstaticfinalStringSIX="陆"; publicstaticfinalStringSEVEN="柒"; publicstaticfinalStringEIGHT="捌"; publicstaticfinalStringNINE="玖"; publicstaticfinalStringTEN="拾"; publicstaticfinalStringHUNDRED="佰"; publicstaticfinalStringTHOUSAND="仟"; publicstaticfinalStringTEN_THOUSAND="万"; publicstaticfinalStringHUNDRED_MILLION="亿"; publicstaticfinalStringYUAN="元"; publicstaticfinalStringJIAO="角"; publicstaticfinalStringFEN="分"; publicstaticfinalStringDOT="."; privatestaticSimpleMoneyFormatformatter=null; privateHashMapchineseNumberMap=newHashMap(); privateHashMapchineseMoneyPattern=newHashMap(); privateNumberFormatnumberFormat=NumberFormat.getInstance(); privateSimpleMoneyFormat(){ numberFormat.setMaximumFractionDigits(4); numberFormat.setMinimumFractionDigits (2); numberFormat.setGroupingUsed(false); chineseNumberMap.put("0",ZERO); chineseNumberMap.put("1",ONE); chineseNumberMap.put("2",TWO); chineseNumberMap.put("3",THREE); chineseNumberMap.put("4",FOUR); chineseNumberMap.put("5",FIVE); chineseNumberMap.put("6",SIX); chineseNumberMap.put("7",SEVEN); chineseNumberMap.put("8",EIGHT); chineseNumberMap.put("9",NINE); chineseNumberMap.put(DOT,DOT); chineseMoneyPattern.put("1",TEN); chineseMoneyPattern.put("2",HUNDRED); chineseMoneyPattern.put("3",THOUSAND); chineseMoneyPattern.put("4",TEN_THOUSAND); chineseMoneyPattern.put("5",TEN); chineseMoneyPattern.put("6",HUNDRED); chineseMoneyPattern.put("7",THOUSAND); chineseMoneyPattern.put("8",HUNDRED_MILLION); } publicstaticSimpleMoneyFormatgetInstance(){ if(formatter==null) formatter=newSimpleMoneyFormat(); returnformatter; } publicStringformat(StringmoneyStr){ checkPrecision(moneyStr); Stringresult; result=convertToChineseNumber(moneyStr); result=addUnitsToChineseMoneyString(result); returnresult; } publicStringformat(doublemoneyDouble){ returnformat(numberFormat.format(moneyDouble)); } publicStringformat(intmoneyInt){ returnformat(numberFormat.format(moneyInt)); } publicStringformat(longmoneyLong){ returnformat(numberFormat.format(moneyLong)); } publicStringformat(NumbermoneyNum){ returnfor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 试题 编程