Difference between revisions of "Flow Control"

From Suhrid.net Wiki
Jump to navigationJump to search
 
(7 intermediate revisions by the same user not shown)
Line 37: Line 37:
 
** This means that we can use a constant typed literally like case 1: or case 2:
 
** This means that we can use a constant typed literally like case 1: or case 2:
 
** Or the variable should be a '''primitive final variable''' that is assigned a literal value.
 
** Or the variable should be a '''primitive final variable''' that is assigned a literal value.
** An enum value can be used as a case constant, but it should be unqualified.
+
** An enum value can be used as a case constant,''' but it should be unqualified.'''.
 +
** The enum should be included in an import statement and the compiler will internally static import the enum constants for the switch case
 +
** '''ALL Wrapper variables cannot be used as case constants''' even if they are marked as final. Why because compiler will try to unbox the wrapper using Integer.intValue() for e.g. - which wont be a compile time constant.
  
 
Example:
 
Example:
Line 86: Line 88:
 
=== Enhanced for loop ===
 
=== Enhanced for loop ===
  
* Used to loop through an array or a collection
+
* Used to loop through an array or a collection. Basically anything that implements Iterable.
 
* Has two components.
 
* Has two components.
  
 
for(declaration : expression)
 
for(declaration : expression)
  
* Declaration : Has to be a '''newly declared variable''' of the same '''type''' as of the array we are accessing.
+
* Declaration : Has to be a '''newly declared variable''' of the same '''type''' as of the array we are accessing.
 +
* '''IMPORTANT:''' It has to be a different variable name, if a variable with the same name already exists within the same scope.  
 
* Expression: Must be the array or the collection. Can even be multi-dimensional arrays.
 
* Expression: Must be the array or the collection. Can even be multi-dimensional arrays.
  
Line 103: Line 106:
 
* A label is a valid java identifier that ends with a ":"
 
* A label is a valid java identifier that ends with a ":"
 
* It must be placed just before the statement being labeled.Any statement can be labeled.
 
* It must be placed just before the statement being labeled.Any statement can be labeled.
 +
* A labeled break or continue must have the label within the loop - cannot break/continue to labels outside the loop.
 
* Continue must be used only within a loop.
 
* Continue must be used only within a loop.
 
* A continue will cause a for loop to execute the iteration expression, but a break will not.
 
* A continue will cause a for loop to execute the iteration expression, but a break will not.

Latest revision as of 10:32, 9 September 2011

If Statement

  • The expression in an if-statement must evaluate to a boolean expression.
  • The else part is optional for an if-statement.
  • The else belongs to the closest preceding if that doesn't have an else. Example:
if(a > b) System.out.println("a > b");
if(a > 1) System.out.println("a > 1");
else System.out.println("a < 1");

//The else belongs to if(a>1)

Switch Statement

  • General form:
switch(expression) {
       case constant1: code block
       case constant2: code block
       default: code block
}
  • The switch statement has probably the most restrictions on usage.
  • Expression has to evaluate to char, byte, short, int or enum.
  • This implies that only variables that can be implicitly promoted to int can be used in the expression.
  • NO long, float or double.
  • The case constant must evaluate to the same type as the switch expression.
    • This means if the expression returns byte, then the case constants should be within the range of byte (-128 to 127).
    • An enum expression must use enums as the constants.
  • The case constant must be a COMPILE TIME constant.
    • This means that we can use a constant typed literally like case 1: or case 2:
    • Or the variable should be a primitive final variable that is assigned a literal value.
    • An enum value can be used as a case constant, but it should be unqualified..
    • The enum should be included in an import statement and the compiler will internally static import the enum constants for the switch case
    • ALL Wrapper variables cannot be used as case constants even if they are marked as final. Why because compiler will try to unbox the wrapper using Integer.intValue() for e.g. - which wont be a compile time constant.

Example:

final int a = 1;
final int b;
b = 2;
int x = process();
switch(x) {
   case a : 
   case 2 : 
   case b : //Error. b is not a compile-time constant
}
  • Default case is used when the expression doesnt match any of the other case constants. The default case can be located anywhere.

Loops

  • while
  • do-while

Basic for loop

  • Basic structure

for(init; condition; iteration) {

 loop body;

}

  • All three parts are optional; The semicolons are compulsory though.
  • All three parts are independent - they don't need to operate on the same variable.
  • Declaration and Initialization:
    • Multiple variables of the same type can be declared and initialized here.
    • A previously declared can be initialized here as well.
  • Conditional Expression: A single boolean expression. As long as this is true, the for loop keeps executing.
  • Iteration Expression
    • The iteration expression is executed AFTER the loop body runs.
    • Multiple iteration expressions can be specified.
    • Typically an increment or decrement expression.
    • Although any expression can be used here including method calls.

Enhanced for loop

  • Used to loop through an array or a collection. Basically anything that implements Iterable.
  • Has two components.

for(declaration : expression)

  • Declaration : Has to be a newly declared variable of the same type as of the array we are accessing.
  • IMPORTANT: It has to be a different variable name, if a variable with the same name already exists within the same scope.
  • Expression: Must be the array or the collection. Can even be multi-dimensional arrays.

Break and Continue

  • break stops the execution of the loop from which it is called.
  • continue stops only the current iteration of the loop from which it is called and the next iteration of the same loop to start.

Labeled Break and Continue

  • A label is a valid java identifier that ends with a ":"
  • It must be placed just before the statement being labeled.Any statement can be labeled.
  • A labeled break or continue must have the label within the loop - cannot break/continue to labels outside the loop.
  • Continue must be used only within a loop.
  • A continue will cause a for loop to execute the iteration expression, but a break will not.
  • Bizarre: A labeled break can be used outside a loop as well. If you break to a label, it will jump to the end of the statement.