Tag: scjp

如何从匿名内部类调用特定的父构造函数?

好的,所以我知道匿名内部类要么隐式扩展父类,要么实现接口,因此需要调用超类的构造函数。 但是,我不确定如何为匿名类创建构造函数(如果这是可能的)并且没有定义构造函数我不知道如何调用super()! 这是我的练习代码: public class AnonymousConstructor { public static void main(String[] args) { //I’m not sure how to explicitly call one of the arg super constructors MyBob my = new MyBob() { //I would like to do something like this super(“String”); or //super(“String”, “String”); }; } } class MyBob extends Thread { MyBob() { System.out.println(“No […]

为什么我们在匿名内部类中使用final关键字?

我正在准备S(O)CJP,以及Sierra和Bates的书。 关于内部类(方法本地或匿名),他们说我们无法访问局部变量,因为它们存在于堆栈上,而类存在于堆上并且可以由方法返回,然后尝试访问这些变量由于方法已经结束,它们在堆栈上但不再存在… 众所周知,我们可以通过使用final关键字来绕过这一点。 这就是他们在书中所说的,但他们并没有真正解释最终关键字的影响…据我所知,在方法局部变量上使用final关键字并不能使它在堆上运行。那么这个类怎么能够访问仍然存在于堆栈中的最终变量,而不会有更多的堆栈??? 我想在内部类中应该有这种最终局部变量的某种“复制”。 由于价值不能改变,为什么不重复这些信息…有人可以确认这个或告诉我,如果我错过了什么?

符合垃圾收集条件的对象

这个问题来自Kathy Sierra SCJP 1.6 。 有多少个对象符合垃圾收集的条件? 根据Kathy Sierra的回答,这是C 这意味着两个对象有资格进行垃圾回收。 我给出了答案的解释。 但为什么c3不符合垃圾收集 (GC)的条件? class CardBoard { Short story = 200; CardBoard go(CardBoard cb) { cb = null; return cb; } public static void main(String[] args) { CardBoard c1 = new CardBoard(); CardBoard c2 = new CardBoard(); CardBoard c3 = c1.go(c2); c1 = null; // Do stuff […]

因为类加载器而导致ClassCastException?

在使用类加载器时,我遇到以下exception: Exception in thread “main” java.lang.ClassCastException: xxx.Singleton cannot be cast to xxx.Singleton 这是否意味着类加载器中的实例不能转换为另一个类加载器的类? 检查我的代码,我可以通过类加载器实现3个单例,即使是“”安全性。 public static void main(String[] args) throws Exception { URL basePath = new URL(“file:/myMavenPath/target/classes/”); Object instance = getClassInstance(Singleton.class); System.out.println(instance); // Object instance2 = getClassInstance( new URLClassLoader( new URL[]{basePath} , null ) .loadClass(“my.Singleton”) ); System.out.println(instance2); // Object instance3 = getClassInstance( new URLClassLoader( new […]

按位移位运算符。 签名和未签名

我正在使用互联网上的补习说进行SCJP考试。 根据我的说明, >>操作符应该是右移的符号,符号位从左边开始。 而左移位运算符<<应该保留符号位。 但是,我可以使用<<运算符来移动符号(fe Integer.MAX_VALUE << 1计算结果为-2 ,而我永远无法使用>>运算符移动符号。 我必须在这里误解一些东西,但是什么?

关于覆盖变量的地方有轻微的混淆

我正在为SCJP做准备(最近由甲骨文重新命名为OCPJP),我在模拟考试中遇到的一个特殊问题让我感到困惑,答案描述并没有解释清楚的事情。 这是一个问题: class A { int x = 5; } class B extends A { int x = 6; } public class CovariantTest { public A getObject() { return new A(); } public static void main(String[]args) { CovariantTest c1 = new SubCovariantTest(); System.out.println(c1.getObject().x); } } class SubCovariantTest extends CovariantTest { public B getObject() { return […]

Java SneakyThrowexception,键入擦除

有人可以解释这段代码吗? public class SneakyThrow { public static void sneakyThrow(Throwable ex) { SneakyThrow.sneakyThrowInner(ex); } private static T sneakyThrowInner(Throwable ex) throws T { throw (T) ex; } public static void main(String[] args) { SneakyThrow.sneakyThrow(new Exception()); } } 这可能看起来很奇怪,但是这不会产生强制转换exception,并且允许抛出已检查的exception而不必在签名中声明它,或者将其包装在未经检查的exception中。 请注意, sneakyThrow(…)或main都没有声明任何已检查的exception,但输出为: Exception in thread “main” java.lang.Exception at com.xxx.SneakyThrow.main(SneakyThrow.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at […]