Hi all,
I am pretty impressed the way this forum works and how people have contributed. Never seen a better forum than this
I just went thru one of the
test's from Marcus Green. Have a few questions if anyone is willing to answer:
1. What happens when you attempt to compile and run these two files in the same directory?
//File P1.java
package MyPackage;
class P1{void afancymethod(){
System.out.println("What a fancy method");
}
//File P2.java
public class P2 extends P1{
public static void main(
String argv[]){
P2 p2 = new P2();
p2.afancymethod();
}
}
1) Both compile and P2 outputs "What a fancy method" when run
2) Neither will compile
3) Both compile but P2 has an error at run time
4) P1 compiles cleanly but P2 has an error at compile time
The answer given is:
The package statement in P1.java is the equivalent of placing the file in a different directory to the file P2.java and thus when the compiler tries to compile P2 an error occurs indicating that superclass P1 cannot be found.
Now the question I have is, I know the number 4) is the right answer. What does the compiler take by default if the package name is not found?Does it assign it to the root directory?
Now for the second question
2. Which of the following statements about threading are true
1) You can only obtain a mutually exclusive lock on methods in a class that extends
Thread or implements runnable
2) You can obtain a mutually exclusive lock on any object
3) A thread can obtain a mutually exclusive lock on an object by calling a synchronized method on that object.
4) Thread scheduling algorithms are platform dependent
The answer given is: 2,3,4
I am confused as to why answer 1) is not true. If anyone can explain, I would appreciate it.
Third Question:
Given the following code what will be the output?
class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.print( v.i );
}//End of amethod
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i);
System.out.print(i);
}//End of another}
1) 10030
2) 20030
3) 209930
4) 10020
The given Answer is: 4
According to me the answer should have been: 10010
cos when the method another() exits, the value of i in the object v would be 10.
Thanks for your help.