Java Tutorial/Class Definition/Class Fields
Содержание
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>