Java Tutorial/Class Definition/Class Fields
Содержание
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);
  }
}
   
   
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();
  }
}
   
   
HappyActor SadActor
Scope class demonstrates field and local variable scopes
public class MainClass
{
   public static void main( String 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 );
   }
}
   
   
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
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);
  }
}