Tag: scjp

铸造后目标对象采用什么类?

好的,noob问题。 我正在为SCJP学习并得到3个关于对象引用错误的问题,这似乎都表明了同样的误解。 只想确认正确的见解应该是什么。 对,这是问题: 1。 1.类CodeWalkFour { 2. public static void main(String [] args){ 3. Car c = new Lexus(); 4. System.out.print(c.speedUp(30)+“”); 5.雷克萨斯l =新雷克萨斯(); 6. System.out.print(l.speedUp(30,40,50)); 7.} 8.} 9.车级{ 10. private int i = 0; 11. int speedUp(int x){ 12.返回i; 13.} 14.} 15.雷克萨斯扩展汽车{ 16. private int j = 1; 17. private int k = 2; […]

char和具有最终访问修饰符的字节 – java

请看下面的示例我无法理解char和byte之间的关系 byte b = 1; char c = 2; c = b; // line 1 给我编译错误,因为c是char类型,b是byte类型,所以在这种情况下必须强制转换 但现在这里的推文是我在代码下运行的时候 final byte b = 1; char c = 2; c = b; // line 2 第2行编译成功它根本不需要任何转换所以我的问题是为什么当我使用带有byte最终访问修饰符时, char c表现不同

方法本地内部类在Java中提供了什么好处?

我刚刚阅读了SCJP书中关于方法本地内部类的章节,我真的很难想到它们的任何实际用途。 我总是在这样的印象中,方法应该尽可能小和特定于他们的任务( Orthogonality IIRC),因此即使是最简单的内部类,也会创建一个重要且难以处理的方法。 任何人都可以建议方法本地内部类的一个很好的实际用法? 到目前为止,感觉好像我可能必须完全理解它们才能通过考试,而不是用于日常编码。 干杯

将表达式的结果分配给基元

K.Sierra在她的书“SCJP学习指南”中提到“我们知道一个文字整数总是一个整数,但更重要的是,一个涉及任何大小或更小的表达式的结果总是一个整数。” 我已经开始尝试了,我对以下结果有点困惑: byte a = 1; // correct byte b = 1 + a; // incorrect (needs explicit casting) byte c = 1 + 1; // correct (I expected it to be incorrect) 任何人都可以向我解释为什么最后一个例子不需要投射? 为什么Java编译器会进行隐式转换? 是因为有2个文字? 澄清非常感谢。

垃圾收集 – 为什么c3在此示例中不符合收集条件(SCJP 6)

摘自SCJP 6准备书 – 鉴于: 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 } } 当达到// doStuff时,有多少对象符合GC条件? A. 0 B. 1 […]

受保护的成员行为一旦被inheritance。

我对保护标识符有一些疑问。 在K.Sierra的Sun认证Java程序员学习指南的第一章中,我发现了以下信息: “一旦子类 – 外包inheritance受保护的成员,该成员(由子类inheritance)对子类外的任何代码都是私有的,除了子类的子类。” 我提供了反映上述陈述的示例代码,这对我来说是绝对清楚的。 // Parent class package package1; import package2.Child; public class Parent { protected int i = 5; } // Child class package package2; import package1.Parent; public class Child extends Parent { // variable ‘i’ inherited } package package2; public class Neighbour { public void protectedTesting(){ Child child = new Child(); […]

在Java中重新定义静态方法意味着什么?

我一直在阅读SCJP学习指南中关于静力学的一节,它提到了以下内容: 静态方法不能被覆盖,但可以重新定义它们 重新定义实际意味着什么? 是否存在父和子都存在的静态方法,具有相同的签名,但是它们的类名分别引用它们? 如 : class Parent { static void doSomething(String s){}; } class Child extends Parent { static void doSomething(String s){}; } 引用为: Parent.doSomething(); 和Child.doSomething(); ? 此外,这同样适用于静态变量,还是静态方法?

我应该为SCJP准备多久?

好吧,我知道这可能听起来有些愚蠢,因为这取决于人,但平均而言,我应该花多少时间来准备SCJP? 我已经有了一些Java经验(我的大学有一些中小型项目,从实现一个简单的“船”游戏到一些客户端 – 服务器的东西)。 我想在7月7日左右拍摄它所以我有大约7-8个月,是否足够/太多/不够? 此外,我一直在寻找一本好书,还有什么比Kathy Sierra和Bert Bates的“Java认证程序员Java 6学习指南”更好的了吗? 那么一些实际问题(比如“实现这个和这个”或“编写一段代码……”)? 啊,这真的值得(我自己花钱)。 我不是在问它是否会让我成为一个更好的程序员(因为我已经看到了stackoverflow上的这样一个线程)但雇主是否也关心它?

SCJP – 具有exception处理的覆盖方法会引发编译器错误

在Kathey Sierra的SCJP书中,摘录如下: 如果重写了某个方法,但是您使用多态(超类型)引用来使用重写方法引用子类型对象,则编译器会假定您正在调用该方法的超类型版本。 如果超类型版本声明了一个已检查的exception,但是重写的子类型方法没有,则编译器仍然认为您正在调用一个声明exception的方法(在第5章中有更多内容)。 我们来看一个例子: class Animal { public void eat() throws Exception { // throws an Exception } } class Dog2 extends Animal { public void eat() { /* no Exceptions */ } public static void main(String[] args) { Animal a = new Dog2(); Dog2 d = new Dog2(); d.eat(); // ok a.eat(); // […]

Java中的按位异或是什么?

鉴于: public class Spock { public static void main(String[] args) { Long tail = 2000L; Long distance = 1999L; Long story = 1000L; if ((tail > distance) ^ ((story * 2) == tail)) { System.out.print(“1”); } if ((distance + 1 != tail) ^ ((story * 2) == distance)) { System.out.print(“2”); } } } 为什么这个示例代码不输出任何内容?