Sunday, November 20, 2011

Class Definition » Class Fields

Scope class demonstrates field and local variable scopes
public class MainClass
{
   public static void mainString args[] )
   {
      Scope testScope = new Scope();
      testScope.begin();
   }
}
class Scope
{
   private int x = 1

   public void begin()
   {
      int x = 5// method's local variable x shadows field x

      System.out.printf"local x in method begin is %d\n", x );

      useLocalVariable();
      useField();
      useLocalVariable();
      useField();

      System.out.printf"\nlocal x in method begin is %d\n", x );
   }

   public void useLocalVariable()
   {
      int x = 25// initialized each time useLocalVariable is called

     System.out.printf("\nlocal x on entering method useLocalVariable is %d\n", x );
    ++x; // modifies this method's local variable x
      System.out.printf
         "local x before exiting method useLocalVariable is %d\n", x );
   }

   // modify class Scope's field x during each call
   public void useField()
   {
      System.out.printf("\nfield x on entering method useField is %d\n", x );
      x *= 10// modifies class Scope's field x
      System.out.printf("field x before exiting method useField is %d\n", x );
   }
}
 
Output
local x in method begin is 5

local x on entering method useLocalVariable is 25
local x before exiting method useLocalVariable is 26

field x on entering method useField is 1
field x before exiting method useField is 10

local x on entering method useLocalVariable is 25
local x before exiting method useLocalVariable is 26

field x on entering method useField is 10
field x before exiting method useField is 100

local x in method begin is 5

Dynamically changing the behavior of an 
object via composition (the 'State' design pattern)
abstract class Actor {
  public abstract void act();
}

class HappyActor extends Actor {
  public void act() {
    System.out.println("HappyActor");
  }
}

class SadActor extends Actor {
  public void act() {
    System.out.println("SadActor");
  }
}

class Stage {
  private Actor actor = new HappyActor();

  public void change() {
    actor = new SadActor();
  }

  public void performPlay() {
    actor.act();
  }
}

public class MainClass {
  public static void main(String[] args) {
    Stage stage = new Stage();
    stage.performPlay();
    stage.change();
    stage.performPlay();
  }
}
 
Output
HappyActor
SadActor
 
Scope for Class and Local Variables 
public class MainClass {
  static int x;

  public static void main(String[] args) {
    x = 5;
    System.out.println("main: x = " + x);
    myMethod();
  }

  public static void myMethod() {
    int y;
    y = 10;
    if (y == x + 5) {
      int z;
      z = 15;
      System.out.println("myMethod: z = " + z);
    }
    System.out.println("myMethod: x = " + x);
    System.out.println("myMethod: y = " + y);
  }
}
 
A Class that Demonstrates Shadowing
public class MainClass {
  static int x;

  public static void main(String[] args) {
    x = 5;
    System.out.println("x = " + x);
    int x;
    x = 10;
    System.out.println("x = " + x);
    System.out.println("ShadowApp.x = " + ShadowApp.x);
  }
}
 
http://www.java2s.com/Tutorial/Java/0100__
Class-Definition/Catalog0100__Class-Definition.htm

No comments:

Post a Comment