Advanced Java Programming Quiz
Test your knowledge of advanced Java concepts including inner classes, garbage collection, method overloading, varargs, autoboxing, final modifiers, and Java version compatibility.
Questions
Given: class CardBoard { Short story = 5; 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 } } When // doStuff is reached, how many objects are eligible for GC?
- 0
- 1
- 2
- Compilation fails
- It is not possible to know
- An exception is thrown at runtime
Given: class Alien { String invade(short ships) { return "a few"; } String invade(short... ships) { return "many"; } } class Defender { public static void main(String [] args) { System.out.println(new Alien().invade(7)); } } What is the result?
- many
- a few
- Compilation fails
- The output is not predictable
- An exception is thrown at runtime
Given: 1. class Dims { 2. public static void main(String[] args) { 3. int[] [] a = {{1,2,}, {3,4}}; 4. int[] b = (int []) a [1] ; 5. Object o1 = a; 6. int[] [] a2 = (int[] []) o1; 7. int[] b2 = (int []) o1; 8. System.out.println(b[1]); 9. } } What is the result?
- 2
- 4
- An exception is thrown at runtime
- Compilation fails due to an error on line 4
- Compilation fails due to an error on line 5
- Compilation fails due to an error on line 6
Given: class Eggs { int doX(Long x, Long y) { return 1; } int doX(long... x) { return 2; } int doX(Integer x, Integer y) { return 3; } int doX(Number n, Number m) { return 4; } public static void main(String[] args) { new Eggs().go(); } void go () { short s = 7; System.out.print(doX(s,s) + " "); System.out.println(doX(7,7)); } }
- 1 1
- 2 1
- 3 1
- 4 1
- 3 3
- 4 3
Which is true? (Choose all that apply.)
- The invocation of an object's finalize() method is always the last thing that happens before an object is garbage collected (GCed).
- When a stack variable goes out of scope it is eligible for GC.
- Some reference variables live on the stack, and some live on the heap.
- Only objects that have no reference variables referring to them can be eligible for GC.
- It's possible to request the GC via methods in either java. lang. Runtime or java.lang.System classes.
Given: 1. class Convert { 2. public static void main(String[] args) { 3. Long xL = new Long(456L); 4. long x1 = Long.valueOf("123"); 5. Long x2 = Long.valueOf("123"); 6. long x3 = xL.longValue(); 7. Long x4 = xL.longValue(); 8. Long x5 = Long.parseLong("456"); 9. long x6 = Long.parseLong("123"); 10. } 11. } Which will compile using Java 5, but will NOT compile using Java 1.4? (Choose all that apply.)
- Line 4
- Line 5
- Line 6
- Line 7
- Line 8
- Line 9
Given: 1. class Bigger { 2. public static void main(String[] args) { 3. // insert code here 4. } 5. } 6. class Better { 7. enum Faster {Higher, Longer}; 8. } Which, inserted independently at line 3, will compile? (Choose all that apply.)
- Faster f = Faster.Higher;
- Faster f = Better.Faster.Higher;
- Better.Faster f = Better.Faster.Higher;
- Bigger.Faster f = Bigger.Faster.Higher;
- Better. Faster f2; f2 = Better.Faster.Longer;
- Better b; b.Faster = f3; f3 = Better.Faster.Longer;
Given: 1. class Example { 2. public static void main(String[] args) { 3. Short s = 15; 4. Boolean b; 5. // insert code here 6. } 7. } Which, inserted independently at line 5, will compile? (Choose all that apply.)
- b = (Number instanceof s);
- b = (s instanceof Short);
- b = s.instanceof(Short);
- b = (s instanceof Number);
- b = s.instanceof(Object);
- b = (s instanceof String);
Given two files: 1. class One { 2. public static void main(String[] args) { 3. int assert = 0; 4. } 5. } 1. class Two { 2. public static void main(String[] args) { 3. assert(false); 4. } 5. } And the four command-line invocations: javac -source 1.3 One.java javac -source 1.4 One.java javac -source 1.3 Two.java javac -source 1.4 Two.java What is the result? (Choose all that apply.)
- Only one compilation will succeed.
- Exactly two compilations will succeed.
- Exactly three compilations will succeed.
- All four compilations will succeed.
- No compiler warnings will be produced.
- At least one compiler warning will be produced.
Given: class Mixer { Mixer() { } Mixer(Mixer m) { ml = m;} Mixer m1; public static void main(String[] args) { Mixer m2 = new Mixer(); Mixer m3 = new Mixer(m2); m3.go(); Mixer m4 = m3.m1; m4.go(); Mixer m5 = m2.m1; m5.go(); } void go() { System.out.print("hi "); } } What is the result?
- hi
- hi hi
- hi hi hi
- Compilation fails
- hi, followed by an exception
- hi hi, followed by an exception
Given: 1. class Zippy { 2. String[] x; 3. int[] a [] = {{1,2}, {l}}; 4. Object c = new long [4] ; 5. Object[] d = x; 6. } What is the result?
- Compilation succeeds.
- Compilation fails due only to an error on line 3
- Compilation fails due only to an error on line 4
- Compilation fails due only to an error on line 5
- Compilation fails due to errors on lines 3 and 5
- Compilation fails due to errors on lines 3, 4, and 5
Given: class Fizz { int x = 5; public static void main(String[] args) { final Fizz f1 = new Fizz(); Fizz f2 = new Fizz(); Fizz f3 = FizzSwitch(f1,f2); System.out.println((f1 == f3) + " " + (f1.x == f3.x)); } static Fizz FizzSwitch(Fizz x, Fizz y) { final Fizz z = x; z.x = 6; return z; } } What is the result?
- true true
- false true
- true false
- false false
- Compilation fails.
- An exception is thrown at runtime
Given: class Knowing { static final long tooth = 343L; static long doIt(long tooth) { System.out.print(++tooth + " "); return ++tooth; } public static void main(String[] args) { System.out.print(tooth + " "); final long tooth = 340L; new Knowing().doIt(tooth); System.out.println(tooth); } } What is the result?
- 343 340 340
- 343 340 342
- 343 341 342
- 343 341 340
- Compilation fails.
- An exception is thrown at runtime
Given: 1. class Eco { 2. public static void main(String[] args) { 3. Eco e1 = new Eco(); 4. Eco e2 = new Eco(); 5. Eco e3 = new Eco(); 6. e3.e = e2; 7. e1.e = e3; 8. e2 = null; 9. e3 = null; 10. e2.e = el; 11. e1 = null; 12. } 13. Eco e; 14. } At what point is only a single object eligible for GC?
- After line 8 runs
- After line 9 runs.
- After line 10 runs.
- After line 11 runs.
- An exception is thrown at runtime.
- Never in this program
Given: class Clidders { public final void flipper() { System.out.print(" Flip a Clidder"); } } public class Clidlets extends Clidders { public void flipper() { System.out.print(" Flip a Clidlet"); super.flipper(); } public static void main(String [] args) { new Clidlets().flipper(); } } What is the result?
- Flip a Clidlet
- Flip a Clidder
- Flip a Clidder Flip a Clidlet
- Flip a Clidlet Flip a Clidder
- Compilation fails
Given:class Clidder { private final void flipper() { System.out.print(" Flip a Clidder"); }}public class Clidlet extends Clidder { public final void flipper() { System.out.print(" Flip a Clidlet"); } public static void main(String [] args) { new Clidlet().flipper(); }}What is the result?
- Flip a Clidlet
- Flip a Clidder
- Flip a Clidlet Flip a Clidder
- Flip a Clidder Flip a Clidlet
- Compilation fails.
Given: 1. class Comp2 { 2. public static void main(String[] args) { 3. float f1 = 2.3f; 4. float[][] f2 = {{42.Of}, {l.7f, 2.3f}, {2.6f, 2.7f}}; 5. float[] f3 = {2.7f}; 6. Long x = 42L; 7. // insert code here 8. System.out.println("true"); 9. } 10. } And the following five code fragments: F1. if (f1 == f2) F2. if (f1 == f2[2][1]) F3. if (x == f2[0][0]) F4. if (f1 == f2 [1,1]) F5. if (f3 == f2 [2]) What is true?
- One of them will compile, only one will be true.
- Two of them will compile, only one will be true.
- Two of them will compile, two will be true.
- Three of them will compile, only one will be true
- Three of them will compile, exactly two will be true.
- Three of them will compile, exactly three will be true.
Given: public class MyOuter { public static class MyInner { public static void foot) { } } } Which, if placed in a class other than MyOuter or MyInner, instantiates an instance of the nested class?
- MyOuter.MyInner m = new MyOuter.Mylnner();
- MyOuter.MyInner mi = new MyInner();
- MyOuter m = new Myouter(); MyOuter.MyInner mi = m.new Myouter.MyInner();
- MyInner mi = new MyOuter.MyInner();
Given: public class Foo { Foo() {System.out.print("foo");} class Bar{ Bar() {System.out.print("bar");} public void go() {System.out.print("hi");} } public static void main(String[] args) { Foo f = new Foo (); f.makeBar(); } void makeBar() { (new Bar() {}).go(); } } What is the result?
- Compilation fails.
- An error occurs at runtime.
- foobarhi
- barhi
- hi
- foohi
package loop; public class TestLoop5 { public static void main(String[] args) { for(;;) { System.out.println("I am in for loop"); } } }
- I am in for loop
- Infinite Loop
- Compiler Error
- Exception