Assertions PDF
Assertions PDF
Assertions PDF
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
142 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGA SIR
Assertions
Agenda
1. Introduction
2. Assert as keyword and identifier
3. Types of assert statements
i. Simple version
ii. Argumented version
4. Various runtime flags
5. Appropriate and Inappropriate use of assertions
6. AssertionError
Introduction:
1. The most common way of debugging is uses of sops. But the main disadvantage
of sops is after fixing the bug compulsory we should delete extra added sops
otherwise these sops also will be executed at runtime which impacts performance
of the system and disturbs logging mechanism.
2. To overcome these problems sun people introduced assertions concept in 1.4
versions.
3. The main advantage of assertions over sops is based on our requirement we can
enable or disable assertions and by default assertions are disable hence after
fixing the bug it is not required to delete assert statements explicitly.
4. Hence the main objective of assertions is to perform debugging.
5. Usually we can perform debugging either in development environment or Test
environment but not in production environment hence assertions concept is
applicable for the development and test environments but not for the production.
assert keyword is introduced in 1.4 version hence from 1.4 version onwards we can't use
assert as identifier but until 1.3 we can use assert as an identifier.
Example:
class Test
{
public static void main(String[] args)
{
int assert=10;
System.out.println(assert);
}
}
Output:
javac Test.java(invalid)
As of release 1.4, 'assert' is a keyword, and may not be used as an identifier. (Use
-source 1.3 or lower to use 'assert' as an identifier)
javac -source 1.3 Test.java(valid)
The code compiles fine but warnings will be generated.
java Test
10
1. Simple version
2. Argumented version
Simple version:
Syntax: assert(b);//b should be boolean type.
If 'b' is true then our assumption is correct and continue rest of the program
normally.
If 'b' is false our assumption is fails and hence stop the program execution by
raising assertion error.
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x>10);
;;;;;;;;;
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
java -ea Test(invalid)
R.E: AssertionError
Note: By default assertions are disable and hence they won't be executed by default we
have to enable assertions explicitly by using -ea option.
Argumented version:
By using argumented version we can argument some extra information with the
assertion error.
Syntax: assert(b):e;
'b' should be boolean type.
'e' can be any type.
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x>10):"here x value should be >10 but it
is not";
;;;;;;;;;
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
java -ea Test(invalid)
R.E: AssertionError: here x value should be >10 but it is not
Conclusion 1:
assert(b):e;
'e' will be evaluated if and only if 'b' is false that is if 'b' is true then 'e' won't be
evaluated.
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x==10):++x;
;;;;;;;;;
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
java -ea Test
10
Conclusion 2:
assert(b):e;
For the 2nd argument we can take method call also but void type method call not
allowed.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
146 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGA SIR
Example:
class Test
{
public static void main(String[] args)
{
int x=10;
;;;;;;;;;
assert(x>10):methodOne();
;;;;;;;;;
System.out.println(x);
}
public static int methodOne()
{
return 999;
}
}
Output:
javac Test.java
java Test
10
java -ea Test
R.E: AssertionError: 999
If methodOne() method return type is void then we will get compile time error saying
void type not allowed here.
Example: We can use these flags in combination also but all these flags will be executed
from left to right.
Example:
java -ea -esa -dsa -ea -dsa -esa Test
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
147 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGA SIR
At the end in both system and non system class assertions are enabled.
Example:
It is possible to enable (or) disable assertions either class wise (or) package wise also.
Example:
Example:
switch(x)
{
case 1:
System.out.println("Jan");
break;
case 2:
System.out.println("Feb");
break;
case 3:
System.out.println("Mar");
break;
case 12:
System.out.println("Dec");
break;
default:assert(false);
}
AssertionError:
Example:
class Test {
public static void main(String[] args){
int x=10;
try {
assert(x>10);
}
catch (AssertionError e) {
System.out.println("not a good programming practice to
catch AssertionError");
}
System.out.println(x);
}
}
Output:
javac Test.java
java Test
10
Not a good programming practice to catch AssertionError
10
Example 1:
class One
{
public static void main(String[] args)
{
int assert=0;
}
}
class Two
{
public static void main(String[] args)
{
assert(false);
}
}
Output:
Javac -source 1.3 one.java//compiles with warnings.
Javac -source 1.4 one.java//compile time error.
Javac -source 1.3 Two.java//compile time error.
Javac -source 1.4 Two.java//compiles without warnings.
Example 2:
class Test
{
public static void main(String[] args)
{
assert(args.length==1);
}
}
Which two will produce AssertionError?
1) Java Test
2) Java -ea Test//R.E: AssertionError
3) Java Test file1
4) Java -ea Test file1
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
152 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
JAVA Means DURGA SIR
Example 4:
Example 5:
Example 6:
Note: Because assert statement changes the value of Z. By using assert statement we can
not changes the value that is why it is inappropriate.