Exercise 3-6: (2) Write a program that includes and calls the storage() method defined as a code fragment in this chapter.
public class Storage
{
static int storage (String s)
{
return s.length() * 2;
}
public static void main(String[] args)
{
String s = "Double the length of this text is: "; // 35 chars long
// access static field in a static context, main():
System.out.println(s + storage(s));
System.out.println(s + Storage.storage(s));
System.out.println(s + new Storage().storage(s));
}
}
/*
javac Storage.java
java Storage
Double the length of this text is: 70
Double the length of this text is: 70
Double the length of this text is: 70
*/
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
Exercise 3-7: (1) Turn the Incrementable code fragments into a working program.
public class Increment
{
static class StaticTest // inner static class
{
static int i = 47;
}
static class Incrementable // inner static class
{
static void increment()
{ // access static field in a static context:
StaticTest.i++;
}
}
public static void main(String[] args)
{
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
System.out.println("st1.i = " + st1.i);
System.out.println("st2.i = " + st2.i);
Incrementable sf = new Incrementable();
sf.increment();
System.out.println("st1.i = " + st1.i);
System.out.println("st2.i = " + st2.i);
Incrementable.increment();
System.out.println("st1.i = " + st1.i);
System.out.println("st2.i = " + st2.i);
new Incrementable().increment();
System.out.println("st1.i = " + st1.i);
System.out.println("st2.i = " + st2.i);
// access static field in a static context, main():
StaticTest.i++;
System.out.println("st1.i = " + st1.i);
System.out.println("st2.i = " + st2.i);
new StaticTest().i++;
System.out.println("st1.i = " + st1.i);
System.out.println("st2.i = " + st2.i);
}
}
/*
javac Increment.java
java Increment
st1.i = 47
st2.i = 47
st1.i = 48
st2.i = 48
st1.i = 49
st2.i = 49
st1.i = 50
st2.i = 50
st1.i = 51
st2.i = 51
st1.i = 52
st2.i = 52
*/
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
Exercise 3-8: (3) Write a program that demonstrates that, no matter how many objects you create of a particular class, there is only one instance of a particular static field in that class.
public class StaticField
{
static int i; // uninitialized
public static void main(String[] args)
{
// access static field from a static context, main():
System.out.println("i = " + i);
System.out.println("StaticField.i = " + StaticField.i);
StaticField sf1 = new StaticField();
StaticField sf2 = new StaticField();
System.out.println("sf1.i = " + sf1.i);
System.out.println("sf2.i = " + sf2.i);
System.out.println("new StaticField().i = " + new StaticField().i);
i = 1;
System.out.println("i = " + i);
System.out.println("StaticField.i = " + StaticField.i);
System.out.println("sf1.i = " + sf1.i);
System.out.println("sf2.i = " + sf2.i);
System.out.println("new StaticField().i = " + new StaticField().i);
StaticField.i = 2;
System.out.println("i = " + i);
System.out.println("StaticField.i = " + StaticField.i);
System.out.println("sf1.i = " + sf1.i);
System.out.println("sf2.i = " + sf2.i);
System.out.println("new StaticField().i = " + new StaticField().i);
sf1.i = 3;
System.out.println("i = " + i);
System.out.println("StaticField.i = " + StaticField.i);
System.out.println("sf1.i = " + sf1.i);
System.out.println("sf2.i = " + sf2.i);
System.out.println("new StaticField().i = " + new StaticField().i);
sf2.i = 4;
System.out.println("i = " + i);
System.out.println("StaticField.i = " + StaticField.i);
System.out.println("sf1.i = " + sf1.i);
System.out.println("sf2.i = " + sf2.i);
System.out.println("new StaticField().i = " + new StaticField().i);
new StaticField().i = 5;
System.out.println("i = " + i);
System.out.println("StaticField.i = " + StaticField.i);
System.out.println("sf1.i = " + sf1.i);
System.out.println("sf2.i = " + sf2.i);
System.out.println("new StaticField().i = " + new StaticField().i);
}
}
/*
javac StaticField.java
java StaticField
i = 0
StaticField.i = 0
sf1.i = 0
sf2.i = 0
new StaticField().i = 0
i = 1
StaticField.i = 1
sf1.i = 1
sf2.i = 1
new StaticField().i = 1
i = 2
StaticField.i = 2
sf1.i = 2
sf2.i = 2
new StaticField().i = 2
i = 3
StaticField.i = 3
sf1.i = 3
sf2.i = 3
new StaticField().i = 3
i = 4
StaticField.i = 4
sf1.i = 4
sf2.i = 4
new StaticField().i = 4
i = 5
StaticField.i = 5
sf1.i = 5
sf2.i = 5
new StaticField().i = 5
*/