Java Tutorial/Class Definition/Class Fields

Материал из Java эксперт
Перейти к: навигация, поиск

A Class that Demonstrates Shadowing

   <source lang="java">

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);
 }

}</source>





Dynamically changing the behavior of an object via composition (the "State" design pattern)

   <source lang="java">

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();
 }

}</source>



HappyActor
SadActor


Scope class demonstrates field and local variable scopes

   <source lang="java">

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 );
  }

}</source>



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

   <source lang="java">

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);
 }

}</source>