Program Chapter 8 Classes and Objects: A Deeper Look (8.1 - 8.6)
8.1 Time1 class declaration maintains the time in 24-hour format
- /**
- * Program Kelas Time1
- * Deklarasi kelas Time1 mengelola waktu dalam format 24 jam
- * Nama file : Time1.java
- */
- public class Time
- {
- private int hour;
- private int minute;
- private int second;
- public void setTime (int h, int m, int s)
- {
- if((h>=0 && h<24) && (m>=0 && m<60) && (s>=0 && s<60))
- {
- hour=h;
- minute=s;
- second=s;
- }
- else
- throw new IllegalArgumentException("hour, minute and/or second was out of range");
- }
- public String toUniversalString()
- {
- return String.format("%02d:%02d:%02", hour, minute, second);
- }
- public String toString()
- {
- return String.format("%d:%02d:%02d %s",
- ((hour==0 || hour==12)?12:hour%12),
- minute, second, (hour<12? "AM" : "PM"));
- }
- }
8.2 Time1 object used in an application
- /**
- * Program Kelas Time1Test
- * Objek Time1 digunakan dalam aplikasi
- * nama file : Time1Test.java
- */
- public class Time1Test
- {
- public static void main( String[] args )
- {
- Time1 time = new Time1();
- System.out.print( "The initial universal time is: ");
- System.out.println(time.toUniversalString() );
- System.out.print( "The initial standard time is: ");
- System.out.println(time.toString() );
- System.out.println();
- time.setTime( 13, 27, 6);
- System.out.print( "Universal time after setTime is: ");
- System.out.println(time.toUniversalString() );
- System.out.print("Standard time after setTime is: ");
- System.out.println( time.toString() );
- System.out.println();
- try
- {
- time.setTime( 99, 99 , 99 );
- }
- catch ( IllegalArgumentException e )
- {
- System.out.printf( "Exception: %s\n\n", e.getMessage() );
- }
- System.out.println( "After attempting invalid settings:");
- System.out.print( "Universal time: ");
- System.out.println(time.toUniversalString() );
- System.out.print("Standard time: ");
- System.out.println( time.toString() );
- }
- }
Output:
8.3 Controlling Access to Members
- /**
- * Program Kelas MemberAccessTest
- * Anggota kelas private Time1 tidak dapat diakses
- * Nama file : MemberAccessTest.java
- */
- public class MemberAccessTest
- {
- public static void main(String[] args)
- {
- Time1 time = new Time1();
- time.hour = 7; //error: has private access
- time.minute = 15; //error: has private access
- time.second = 30; //error: has private access
- }
- }
8.4 Referring to the Current Object's Members with the this Reference
- /**
- * Program Kelas ThisTest
- * Program ini digunakan secara implisit dan eksplisit untuk merujuk kepada anggota dari sebuah objek
- * Nama file : ThisTest.java
- */
- public class ThisTest
- {
- public static void main (String[] args)
- {
- SimpleTime time = new SimpleTime(15, 30, 19);
- System.out.println(time.buildString());
- }
- }
- class SimpleTime
- {
- private int hour;
- private int minute;
- private int second;
- public SimpleTime(int hour, int minute, int second)
- {
- this.hour=hour;
- this.minute=minute;
- this.second=second;
- }
- public String buildString()
- {
- return String.format("%24s: %s\n%24s: %s",
- "this.toUniversalString()", this.toUniversalString(),
- "toUniversalString()", toUniversalString());
- }
- public String toUniversalString()
- {
- return String.format( "%02d:%02d:%02d",
- this.hour, this.minute, this.second);
- }
- }
Output:
8.5 Time2 class with overloaded constructors
- /**
- * Program Kelas Time2
- * Deklarasi kelas Time2 dengan konstuktor overload
- * Nama file : Time2.java
- */
- public class Time2
- {
- private int hour;
- private int minute;
- private int second;
- public Time2()
- {
- this( 0, 0, 0 );
- }
- public Time2( int h )
- {
- this( h, 0, 0 );
- }
- public Time2( int h, int m )
- {
- this( h, m, 0 );
- }
- public Time2( int h, int m, int s )
- {
- setTime( h, m, s );
- }
- public Time2( Time2 time )
- {
- this( time.getHour(), time.getMinute(), time.getSecond() );
- }
- public void setTime( int h, int m, int s )
- {
- setHour( h );
- setMinute( m );
- setSecond( s );
- }
- public void setHour( int h )
- {
- if ( h >= 0 && h < 24 )
- hour = h;
- else
- throw new IllegalArgumentException( "hour must be 0-23" );
- }
- public void setMinute( int m )
- {
- if ( m >= 0 && m < 60 )
- minute = m;
- else
- throw new IllegalArgumentException( "minute must be 0-59" );
- }
- public void setSecond( int s )
- {
- if ( s >= 0 && s < 60 )
- second = ( ( s >= 0 && s < 60 ) ? s : 0 );
- else
- throw new IllegalArgumentException( "second must be 0-59" );
- }
- public int getHour()
- {
- return hour;
- }
- public int getMinute()
- {
- return minute;
- }
- public int getSecond()
- {
- return second;
- }
- public String toUniversalString()
- {
- return String.format(
- "%02d:%02d:%02d", getHour(), getMinute(), getSecond() );
- }
- public String toString()
- {
- return String.format( "%d:%02d:%02d %s",
- ((getHour() == 0 || getHour() == 12) ? 12 : getHour() % 12 ),
- getMinute(), getSecond(), ( getHour() < 12 ? "AM" : "PM" ) );
- }
- }
8.6 Overloaded constructors used to initialize Time2 objects
- /**
- * Program Kelas Time2Test
- * Konstruktor overload digunakan untuk menginisialisasi objek Time2
- * Nama file : Time2Test.java
- */
- public class Time2Test
- {
- public static void main(String[] args)
- {
- Time2 t1 = new Time2();
- Time2 t2 = new Time2( 2 );
- Time2 t3 = new Time2( 21, 34 );
- Time2 t4 = new Time2( 12, 25, 42 );
- Time2 t5 = new Time2( t4 );
- System.out.println( "Constructed with:" );
- System.out.println( "t1: all arguments defaulted" );
- System.out.printf( " %s\n", t1.toUniversalString() );
- System.out.printf( " %s\n", t1.toString() );
- System.out.println(
- "t2: hour specified; minute and second defaulted" );
- System.out.printf( " %s\n", t2.toUniversalString() );
- System.out.printf( " %s\n", t2.toString() );
- System.out.println(
- "t3: hour and minute specified; second defaulted" );
- System.out.printf( " %s\n", t3.toUniversalString() );
- System.out.printf( " %s\n", t3.toString() );
- System.out.println( "t4: hour, minute and second specified" );
- System.out.printf( " %s\n", t4.toUniversalString() );
- System.out.printf( " %s\n", t4.toString() );
- System.out.println( "t5: Time2 object t4 specified" );
- System.out.printf( " %s\n", t5.toUniversalString() );
- System.out.printf( " %s\n", t5.toString() );
- try
- {
- Time2 t6 = new Time2( 27, 74, 99 );
- }
- catch ( IllegalArgumentException e )
- {
- System.out.printf( "\nException while initializing t6: %s\n",
- e.getMessage() );
- }
- }
- }
Output: