1- 
public class DemoAssert1 {
	private static int a =15;
	private static int b =12;
		
	static boolean evaluateFirst() {
		if(a>b) return true; else return false;
	}
	
	static boolean evaluateSecond() {
		if(a<b) return true; else return false;
	}

	static Object shouldDo() {
		return "Yeah";	
	}
	
	static boolean shouldNotDo() {
		return false;
	}
	public static void main(String [] args) {
		assert evaluateFirst(): shouldDo();	//Line 1
		assert evaluateSecond(): shouldNotDo();	 //Line 2
	}
	
}
Select the correct answer
A: Compilation fails at Line 1, the second expression of assert can't be an object
B: Compilation fails at Line 2, the second expression of assert can't be boolean 
C: Both lines show a compilation error because the second expression of an assert statement can't be a method call that returns something.
D: The program compiles fine if shouldDo() and shouldNotDo() is set to return void
E: Program compiles fine and shows runtime exception due to failure at Line 2.
F: None of the above

2- 

public class DemoAssert2 {

	public static void main(String... args) {
		final int a;
		a=10;
		assert a>19?false:false:false;	
	}

}
What will be the output of the given code if assertion is enabled

A: Compilation fails because final variable a is not initialized when declared
B: Compilation fails due to illegal assert expression 
C: Compilation succeeds but at runtime AssertionError exception is thrown.
D: None of the above


3- 

public class DemoAssert3 {
	
	static String message1() {
		return "I don't know why 1<2;";		
	}

	static String message2() {
		return "I know but can't express";	
	}
	public static void main(String... args) {
		assert true: message()+message2;	//Line 1
		assert true: message();			//Line 2
	}  
}

What is the result if ea is enabled?
(Choose all that aplly)
A: Fails to compile due to error on Line 1 
B: Compiles fine and prints "I don't know why 1<2;I know but can't express" with AssertionError exception  
C: Both lines will always throw AssertionError exception because both assert with true.
D: Compiles fine and runs without printing anything
E: None of the above

4-

public class DemoAssert4 {
	static void message() {
		System.out.println("Assertion error arose");
	}
	public static void main(String[] args) {
		assert true:message();	//Line 1
		assert false:message(); //Line 2
	}
}
(Choose all that aplly)
A: Compiler error at Line 1
B: Compiler error at Line 2
C: Runtime exception with message "Assertion error arose"
D: Compiles and run but no output.
E: Runtime exception 
F: None of the above

5- 

public class DemoAssert5 { 
	final public static void main(String[] args) {
		assert false: "Assertions are good for testing purpose!";
	}
}
(Choose all that aplly)
A: Won't compile main() can't be final
B: Compiles and run and no exception till assert is false
C: Prints 'Assertions are good for testing purpose' only when we write:
assert true : "Assertions are good for testing purpose!" with AssertionError at run time
D: Compiles fine with runtime exception with message "Assertions are good for testing purpose".

6- 

public class DemoAssert6 {
	public static void main(String[] args) {
		assert true:false; //Line 1		
		assert false:true; //Line 2	
	}

}
A: Compilation fails at line 1 
B: Compilation fails at line 2
C: Runtime exception due to line 1
D: Runtime exception due to line 2
E: Non of the above

7- 

public class DemoAssert7 {
	
	private void doStuff1(int x) {
		assert(x>0); 
	}
	
	public void doStuff2(int x) {
		assert (x>0);	
	}  
	
}
(Choose all that apply)
A: Compilation can't start, there is no main() method defined.
B: assert is not used appropriately in doStuff1(int x) method.
C: assert is not used appropriately in doStuff2(int x) method.
D: Compiles fine but Runtime exception.
E: assert is being used illegally in both the methods.

8-

public class DemoAssert8 {

	public void doStuff1(int x) {
		int y=0;
		switch(x) {
			case 1: y=1;break;
			case 2: y=4;break;
			case 3: y=9;break;
			default: assert false;
		}
	}
	
	private void doStuff2(int x) {
		int y=0;
		switch(x) {
			case 4: y=16;break;
			case 5: y=25;break;
			case 6: y=36;break;
			default: assert false;
		}
	}

}
(Choose all that apply)
A: assert has been used inappropriately in doStuff1() method.
B: assert has been used inappropriately in doStuff2() method.
C: assert has been used inappropriately in both the methods. 
D: assert has been used illegally in doStuff1() method.
E: assert has been used illegaly in doStuff2() method.
F: assert has been used illegally in both the methods.
G: Non of the above.

9-
public class DemoAssert9 {

	public static void main(String... args) {
		assert(args[0]); //Line 1
	}
}
class invocation with:
java DemoAssert9 false true false
(Choose two that apply)
A- assert has been used inappropriately at Line 1
B- assert has been used illegally at Line 1
C- assert has been used legally.
D- assert has been used appropriately.
E- None of the above

10- 

public class DemoAssert10 {
	int y;
	int x;	
	private void doStuff() {
		assert(modifyThings());
	}

	public boolean modifyThings() {
		y=x++;
		return true;		
	}

}
(Choose all that apply)
A: assert has been used inappropriately in method doStuff()
B: assert has been used appropriately in method doStuff()
C: It is illegal use of assert in method doStuff()
D: It is legal use of assert in method doStuff()
E: None of the above

-------------------------------------------------------------------------------------------------
I HOPE YOU WOULD HAVE ATTEMPTED ALL THE QUESTIONS BEFORE YOU COME HERE TO SATISFY YOU AS WELL AS YOUR ANSWERS :)

Answers:
1- E
2- C
3- D
4- A,B
5- D
6- D
7- C,D
8- G
9- A,B (assert requires boolean, passed String, hence compiler error; if it were boolean
it is not appropriate to use assertion to validate command line argument because it is 
not sure that assertion is enabled)
10- A,D

Dated: 08/March/2007
Don't forget to send your comment on my this little effort at: cmbhatt@imap.cc

-------------------------------------------------------------------------------------------------