欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    Java程序员面试宝典Java代码查错(1).docx

    • 资源ID:3159673       资源大小:43.74KB        全文页数:18页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java程序员面试宝典Java代码查错(1).docx

    Java程序员面试宝典 Java代码查错JAVA代码查错 1.abstract class Name private String name; public abstract boolean isStupidName(String name) 大侠们,这有何错误?答案: 错。abstract method必须以分号结尾,且不带花括号。 2.public class Something void doSomething private String s = "" int l = s.length; 有错吗? 答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。 3.abstract class Something private abstract String doSomething ; 这好像没什么错吧? 答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。 4.public class Something public int addOne(final int x) return +x; 这个比较明显。 答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。 5.public class Something public static void main(String args) Other o = new Other; new Something.addOne(o); public void addOne(final Other o) o.i+; class Other public int i; 和上面的很相似,都是关于final的问题,这有错吗? 答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference,(比如: o = new Other;),那么如同上例这题也是错的。但这里修改的是o的member vairable(成员变量),而o的reference并没有改变。 6.class Something int i; public void doSomething System.out.println("i = " + i); 有什么错呢? 看不出来啊。 答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。 7.class Something final int i; public void doSomething System.out.println("i = " + i); 和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗? 答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"。 8.public class Something public static void main(String args) Something s = new Something; System.out.println("s.doSomething returns " + doSomething); public String doSomething return "Do something ." 看上去很完美。 答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething returns " + s.doSomething);"。同理,static method不能访问non-static instant variable。 9.此处,Something类的文件名叫 OtherThing.javaclass Something private static void main(String something_to_do) System.out.println("Do something ."); 这个好像很明显。 答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。 10.interface A int x = 0; class B int x =1; class C extends B implements A public void pX System.out.println(x); public static void main(String args) new C.pX; 答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。 11.interface Playable void play; interface Bounceable void play; interface Rollable extends Playable, Bounceable Ball ball = new Ball("PingPang"); class Ball implements Rollable private String name; public String getName return name; public Ball(String name) this.name = name; public void play ball = new Ball("Football"); System.out.println(ball.getName); 这个错误不容易发现。 答案: 错。"interface Rollable extends Playable, Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说"Ball ball = new Ball("PingPang");"实际上是"public static final Ball ball = new Ball("PingPang");"。在Ball类的Play方法中,"ball = new Ball("Football");"改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。 JAVA编程题 1现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset import java.util.*; public class bycomma public static String splitStringByComma(String source) if(source=null|source.trim.equals("") return null; StringTokenizer commaToker=new tringTokenizer(source,","); String result = new StringcommaToker.countTokens; int i=0; while(commaToker.hasMoreTokens) resulti = commaToker.nextToken; i+; return result; public static void main(String args) String s = splitStringByComma("5,8,7,4,3,9,1"); int ii = new ints.length; for(int i = 0;i<s.length;i+) iii =Integer.parseInt(si); Arrays.sort(ii); /asc for(int i=0;i<s.length;i+) System.out.println(iii); /desc for(int i=(s.length-1);i>=0;i-) System.out.println(iii); 2金额转换,阿拉伯数字的金额转换成中国传统的形式如:>输出。 package test.format; import java.text.NumberFormat; import java.util.HashMap; public class SimpleMoneyFormat public static final String EMPTY = "" public static final String ZERO = "零" public static final String ONE = "壹" public static final String TWO = "贰" public static final String THREE = "叁" public static final String FOUR = "肆" public static final String FIVE = "伍" public static final String SIX = "陆" public static final String SEVEN = "柒" public static final String EIGHT = "捌" public static final String NINE = "玖" public static final String TEN = "拾" public static final String HUNDRED = "佰" public static final String THOUSAND = "仟" public static final String TEN_THOUSAND = "万" public static final String HUNDRED_MILLION = "亿" public static final String YUAN = "元" public static final String JIAO = "角" public static final String FEN = "分" public static final String DOT = "." private static SimpleMoneyFormat formatter = null; private HashMap chineseNumberMap = new HashMap; private HashMap chineseMoneyPattern = new HashMap; private NumberFormat numberFormat NumberFormat.getInstance; private SimpleMoneyFormat 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); public static SimpleMoneyFormat getInstance if (formatter = null) formatter = new SimpleMoneyFormat; return formatter; public String format(String moneyStr) checkPrecision(moneyStr); String result; result = convertToChineseNumber(moneyStr); result = addUnitsToChineseMoneyString(result); return result; public String format(double moneyDouble) return format(numberFormat.format(moneyDouble); public String format(int moneyInt) return format(numberFormat.format(moneyInt); public String format(long moneyLong) return format(numberFormat.format(moneyLong); public String format(Number moneyNum) return format(numberFormat.format(moneyNum); private String convertToChineseNumber(String moneyStr) String result; StringBuffer cMoneyStringBuffer = new StringBuffer; for (int i = 0; i < moneyStr.length; i+) cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1); /拾佰仟万亿等都是汉字里面才有的单位,加上它们 int indexOfDot = cMoneyStringBuffer.indexOf(DOT); int moneyPatternCursor = 1; for (int i = indexOfDot - 1; i > 0; i-) cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor); moneyPatternCursor = moneyPatternCursor = 8 ? 1 : moneyPatternCursor + 1; String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."); cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."), cMoneyStringBuffer.length); while (cMoneyStringBuffer.indexOf("零拾") != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾") + 2, ZERO); while (cMoneyStringBuffer.indexOf("零佰") != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO); while (cMoneyStringBuffer.indexOf("零仟") != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO); while (cMoneyStringBuffer.indexOf("零万") != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"), cMoneyStringBuffer.indexOf("零万") + 2, TEN_THOUSAND); while (cMoneyStringBuffer.indexOf("零亿") != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"), cMoneyStringBuffer.indexOf("零亿") + 2, HUNDRED_MILLION); while (cMoneyStringBuffer.indexOf("零零") != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO); if (cMoneyStringBuffer.lastIndexOf(ZERO) = cMoneyStringBuffer.length - 1) cMoneyStringBuffer.delete(cMoneyStringBuffer.length - 1, cMoneyStringBuffer.length); cMoneyStringBuffer.append(fractionPart); result = cMoneyStringBuffer.toString; return result; private String addUnitsToChineseMoneyString(String moneyStr) String result; StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr); int indexOfDot = cMoneyStringBuffer.indexOf(DOT); cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN); cMoneyStringBuffer.insert(cMoneyStringBuffer.length - 1, JIAO); cMoneyStringBuffer.insert(cMoneyStringBuffer.length, FEN); if (cMoneyStringBuffer.indexOf("零角零分") != -1)/没有零头,加整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length, "整"); else if (cMoneyStringBuffer.indexOf("零分") != -1)/没有零分,加整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length, "整"); else if(cMoneyStringBuffer.indexOf("零角")!=-1) cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),cMoneyStringBuffer.indexOf("零角")+2); tmpBuffer.append("整"); result = cMoneyStringBuffer.toString; return result; private void checkPrecision(String moneyStr) int fractionDigits = moneyStr.length - moneyStr.indexOf(DOT) - 1; if (fractionDigits > 2) throw new RuntimeException("金额" + moneyStr + "的小数位多于两位。"); /精度不能比分低 public static void main(String args) System.out.println(getInstance.format(new Double(10010001.01); 3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 答:父类: package test; public class FatherClass public FatherClass System.out.println("FatherClass Create"); 子类: package test; import test.FatherClass; public class ChildClass extends FatherClass public ChildClass System.out.println("ChildClass Create"); public static void main(String args) FatherClass fc = new FatherClass; ChildClass cc = new ChildClass; 输出结果: C:>java test.ChildClass FatherClass FatherClass Create ChildClass Create 4、内部类的实现方式? 答:示例代码如下: package test; public class OuterClass private class InterClass public InterClass System.out.println("InterClass Create"); public OuterClass InterClass ic = new InterClass; System.out.println("OuterClass Create"); public static void main(String args) OuterClass oc = new OuterClass; Create 输出结果: C:>java test/OuterClass InterClass Create OuterClass Create 再一个例题: public class OuterClass private double d1 = 1.0; /insert code here You need to insert an inner class declaration at line 3. Which two inner class declarations are valid?(Choose two.) A. class InnerOne public static double methoda return d1; B. public class InnerOne static double methoda return d1; C. private class InnerOne double methoda return d1; D. static class InnerOne protected double methoda return d1; E. abstract class InnerOne public abstract double methoda; 说明如下: 一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错 二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。故 D 错 三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确 四.答案为C、E 5、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 答:Server端程序: package test; import .*; import java.io.*; public class Server private ServerSocket ss; private Socket socket; private BufferedReader in; private PrintWriter out; public Server try ss=new ServerSocket(10000); while(true) socket = ss.accept; String RemoteIP = socket.getInetAddress.getHostAddress; String RemotePort = ":"+socket.getLocalPort; System.out.println("A in!IP:"+RemoteIP+RemotePort); in = new BufferedReader(new client come InputStreamReader(socket.getInputStream); String line = in.readLine; System.out.println("Cleint send is :" + line); out = new PrintWriter(socket.getOutputStream,true); out.println("Your Message Received!"); out.close; in.close; socket.close; catch (IOException e) out.println("wrong"); public static void main(String args) new Server; Client端程序: package test; import java.io.*; import .*; public class Client Socket socket; BufferedReader in; PrintWriter out; public Client try System.out.println("Try to Connect to 127.0.0.1:10000"); socket = new Socket("127.0.0.1",10000); System.out.println("The Server Connected!"); System.out.println("Please enter some Character:"); BufferedReader line = new BufferedReader(new InputStreamReader(System.in); out = new PrintWriter(socket.getOutputStream,true); Out 3、 接口和内部类、抽象类的特征答:接口:在一个类里,只有申明没有实现。内部类:是在一个类的内部定义的一个类;抽象类:是以abstract 定义的,里面至少有一个抽象方法。 4、 文件读写的基本类 答:File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read或 write方法。 6、 线程的基本概念、线程的本状态以及状态之间的关系 ?新建 (Born) : 新建的线程处于新建状态?就绪 (Ready) : 在创建线程后,它将处于就绪状态,等待 start 方法被调用?运行 (Running) : 线程在开始执行时进入运行状态?睡眠 (Sleeping) : 线程的执行可通过使用 sleep 方法来暂时中止。在睡眠后,线程将进入就绪状态?等待 (Waiting) : 如果调用了 wait 方法,线程将处于等待状态。用于在两个或多个线程并发运行时。?挂起 (Suspended) : 在临时停止或中断线程的执行时,线程就处于挂起状态。?恢复 (Resume) : 在挂起的线程被恢复执行时,可以说它已被恢复。?阻塞 (Blocked) 在线程等待一个事件时,就称其处于阻塞状态。?死亡 (Dead) 在 run 方法已完成执行或其 stop 方法被调用之后,线程就处于死亡状态。 5、 串行化的注意事项以及如何实现串行化答:如果有循环引用是不可以串行化的。对象输出流的WriteObject方法和 对象输入流的ReadObect 方法 7、 线程的同步、如何实现线程的同步答:当两个或多个线程同时访问同一个变量,并且以个线程需要修改这个变量。就要用到线程同步。在Java 中,同步是通过 synchronized 关键字来定义的。 诺是想同步化某程序段,可以使用 synchronized(object)方法,其中内的程序语句被同步化。 9、 socket通信TCP传输控制协议,具有极高的可靠性,保证数据包按照顺序准确到达,但其也有着很高的额外负担。UDP使用者数据元协议,并不能保证数据包会被成功的送达,也不保证数据包到达的顺序,但其传输速度很快。大多数我们会使用TCP,偶尔才会动用UDP,如声音讯号,即使少量遗失,也无 关紧要。 10、 JAVA的事件委托机制和垃圾回收机制 java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。垃圾回收机制 垃圾收集是将分配给对象但不在使用的内存回收或释放的过程。如果一个对象没有指向它的引用或

    注意事项

    本文(Java程序员面试宝典Java代码查错(1).docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开