我刚刚通读了SCJPbook中关于方法局部内部类的章节,我真的很难想出它们的任何实际用途。我一直认为方法应该尽可能小并针对它们的任务(OrthogonalityIIRC),因此即使引入最简单的内部类也会创建笨重的方法。任何人都可以建议方法局部内部类的良好实际用法吗?到目前为止,感觉好像我可能必须理解它们纯粹是为了通过考试,而不是为了在日常编码中使用。干杯 最佳答案 在大多数情况下(例如,对于Action监听器、可运行对象等),您将使用匿名类而不是方法局部命名类。但是有一件事是命名类可以做而匿名类不能做的:实现多个接口(interfa
上下文:看起来简单的scjp->scja->....sun认证的轨道已经与其他oracle风格的认证合并了...作为开发人员,我最近花了一些时间试图找出新的认证的“途径”。现有资源:这里有一个非常密集但信息丰富的页面:http://en.wikipedia.org/wiki/Sun_Certified_Professional当然,Oracle网站上也充满了不同认证事实的链接和图表。我的问题:不清楚是否出现了新的java认证范例或途径,因此旧的SCJP风格认证是否仍然存在(尽管名称不同),也不清楚整个认证是什么管道看起来像:例如,这张图(来自旧的sun认证)http://www.whi
在使用类加载器时出现以下异常:Exceptioninthread"main"java.lang.ClassCastException:xxx.Singletoncannotbecasttoxxx.Singleton这是否意味着来自类加载器的实例不可转换为另一个类加载器的类?检查我的代码,由于类加载器,我能够在其中实例化3个单例,即使使用“”安全性也是如此。publicstaticvoidmain(String[]args)throwsException{URLbasePath=newURL("file:/myMavenPath/target/classes/");Objectinsta
我正在准备SCJP考试,在做一些模拟测试时我遇到了这个:它询问以下输出是什么:classTestClass{inti=getInt();intk=20;publicintgetInt(){returnk+1;}publicstaticvoidmain(String[]args){TestClasst=newTestClass();System.out.println(t.i+""+t.k);}}我认为它会是2120,因为t.i会调用getInt,然后递增k得到21。然而,答案是120。我不明白为什么它会是1,任何人都可以对此有所了解吗? 最佳答案
在下面的代码片段中,将doThings()方法声明为静态方法将使类线程安全。这是因为如果启动了多个TestSeven线程,并且由于x是静态变量,可能会出现竞争条件吗?publicclassTestSevenextendsThread{privatestaticintx;publicsynchronizedvoiddoThings(){intcurrent=x;current++;x=current;}publicvoidrun(){doThings();}publicstaticvoidmain(Stringargs[]){TestSevent=newTestSeven();Threa
我知道我们不能像在其他几种语言中那样在java的if语句中使用赋值运算符。就是inta;if(a=1){}会给出编译错误。但是下面的代码工作正常,怎么办?booleanb;if(b=true){}编辑:这是规则的异常(exception)情况,即不能在if语句中使用赋值。 最佳答案 因为赋值的“结果”是赋值...所以在第二种情况下它仍然是一个boolean表达式。if表达式要求条件是一个boolean表达式,第二个而不是第一个满足。实际上,您的两个片段是:inta;a=1;if(a){}和booleanb;b=true;if(b){
classAnother{publicvoidmethod(Objecto){System.out.println("Thisisinmethodwhichtakesobject");}publicvoidmethod(Strings){System.out.println("Thisismethodwhichtakesstring");}}publicclassNewClass{publicstaticvoidmain(Stringargs[]){Anotheran=newAnother();an.method(null);}}当我尝试执行此操作时,我得到了Thisismethodw
关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭9年前。ImprovethisquestionSCJP6和OCJP6考试是否相同?我打算在这个月底参加OCJP6考试,但我正在准备KathySeirra写的SCJP6书。为了练习,我正在准备Kathyseirra的“OCPJavaSE6程序员学习指南”。可以吗?我对“SCJP6”、“OCJP6”、“OCPJavaSE6程序员”这些词感到困惑。那些一样吗?如果相同为什么会有这么多不同的名字?提前致谢?请指导我。
为什么在Java中我们可以捕获Exception,即使它没有被抛出,但我们不能捕获它的子类(除了“未检查的”RuntimeException和它子类)。示例代码:classTest{publicstaticvoidmain(String[]args){try{//donothing}catch(Exceptione){//OK}try{//donothing}catch(IOExceptione){//COMPILERERROR:UnreachablecatchblockforIOException.//Thisexceptionisneverthrownfromthetrystate
我目前正在准备S(O)CJP,以及Sierra和Bates书。关于内部类(方法本地或匿名),他们说我们无法访问局部变量,因为它们存在于堆栈上,而类存在于堆上并且可以由方法返回然后尝试访问到堆栈上的这些变量,但由于方法结束后不再存在......众所周知,我们可以通过使用final关键字绕过这一点。这是他们在书中所说的,但他们并没有真正解释final关键字的作用是什么......据我所知,在方法局部变量上使用final关键字并不能让它存在于堆中......那么该类如何能够访问仍然存在于堆栈中的final变量,而可能没有更多的堆栈???我想内部类中应该有这个最终局部变量的某种“副本”。既然值