Documents
Resources
Learning Center
Upload
Plans & pricing Sign in
Sign Out

IDE - PowerPoint

VIEWS: 172 PAGES: 253

									Java

Sesi01
                                IDE
sebuah peralatan dalam pemrograman yang diintegrasikan ke dalam
aplikasisoftware yang mendukung pembangunan GUI, teks atau
penulisan kode, compiler dan
debugger.
   Contoh Program Java Pertama
   public class Hello
   {
   /**
   * My first java program
   */
   public static void main(String[] args) {
   //Menampilkan kata "Hello world" dilayar
   System.out.println("Hello world!");
   }
   }
Sebelum menjelaskan apa arti dari program tersebut,
cobalah untuk menulis programini di dalam file dan kemudian
menjalankannya.
                     Langkah Pembuatan Program java

•   Langkah 1: Memulai Text Editor
    Untuk memulai text editor di Linux , klik pada Applications->Accessories->Text
    Editor
•   Langkah 2: Simpanlah program Java Anda
    Program ini akan disimpan dalam file yang bernama ''Hello.java'
•   Langkah 3: Mengkompilasi program Anda
    Langkah berikut ini adalah mengkompilasi program Anda. Untuk mengkompilasi
    program Java, gunakanlah perintah : javac [filename].
    Dalam hal ini, Anda mengetikan perintah :
    javac Hello.Java.
•   Langkah 4 : Menjalakan Program
    Selama proses pengkompilasian, javac menambah file baru kedalam disk yang
    disebut
    [filename].class, dalam hal ini, Hello.class, yang merupakan kode sebenarnya
    saat
    ini, dengan perkiraan tidak ada permasalahan pada saat proses compile, berarti
    telah siap untuk menjalankan program Anda.          Untuk menjalankan program
    Java, dengan mengetikkan perintah : java [filename without the extension],
    maka dalam hal ini, Anda mengetikkan perintah :
    java Hello.
    Sekarang Anda dapat melihat di layar bahwa Anda telah menjalankan program
    Java
    pertama Anda, yang menampilkan pesan, ''Hello world!''.
                                      Error
Ada 2 macam error.
• Pertama adalah compile-time error atau yang disebut juga sebagai syntax error.
• Kedua adalah runtime errors.
Syntax Errors
• Syntax errors biasanya terjadi karena kesalahan penulisan. Mungkin Anda
   kekurangan
   sebuah perintah di Java atau lupa untuk menulis tanda titik-koma pada akhir
   pernyataan.
• Java mencoba untuk mengisolasi error tersebut dengan cara menunjukkan
   baris dari kode dan terlebih dahulu menunjuk karakter yang salah dalam baris
   tersebut.
   Bagaimanapun juga, error belum tentu berada pada titik yang ditunjuk.
• Kesalahan umum lainnya adalah dalam kapitalisasi, ejaan, penggunaan dari
   karakter
   khusus yang tidak benar, dan penghilangan dari pemberian tanda baca yang
   sebenarnya.
                                     Error
•   Run-time Errors
    Run-time error merupakan error yang tidak akan ditampilkan sampai Anda
    menjalankanprogram Anda. Bahkan program yang dikompilasi dengan sukses
    dapat menampilkanjawaban yang salah jika programmer belum berpikir sampai
    struktur dan proses logisdari program tersebut.

•   Latihan
    Latihan Program membuat class dengan nama : [NamaAnda]. Hasil dari
    program yang harus tampil di layar :
    Welcome to Java Programming [NamaAnda]!!!
•   Latihan program, membuat class dengan nama : TheTree. Hasil dari program
    yang harus tampil dilayar :
    I think that I shall never see,
    a poem as lovely as a tree.
    A tree whose hungry mouth is pressed
    sweet flowing breast.
                                     Error
•   Run-time Errors
    Run-time error merupakan error yang tidak akan ditampilkan sampai Anda
    menjalankanprogram Anda. Bahkan program yang dikompilasi dengan sukses
    dapat menampilkanjawaban yang salah jika programmer belum berpikir sampai
    struktur dan proses logisdari program tersebut.

•   Latihan
•   Latihan Program membuat class dengan nama : [NamaAnda]. Hasil dari
    program yang harus tampil di layar :
    Welcome to Java Programming [NamaAnda]!!!
•   Latihan program, membuat class dengan nama : TheTree. Hasil dari program
    yang harus tampil dilayar :
    I think that I shall never see,
    a poem as lovely as a tree.
    A tree whose hungry mouth is pressed
    sweet flowing breast.
                           Komentar pada Java
Komentar adalah catatan yang ditulis pada kode dengan tujuan sebagai bahan
    dokumentasi. Teks tersebut bukan bagian dari program dan tidak
    mempengaruhi jalannya Program.Java mendukung tiga jenis komentar : C++
    style komentar satu baris, C style beberapa baris, dan komentar javadoc khusus
Penulisan Komentar C++ Style
    Komentar C++ style diawali dengan //. Semua teks setelah // dianggap sebagai
    komentar. Sebagi contoh,
    // This is a C++ style or single line comments
Penulisan Komentar C Style
    Komentar C-style atau juga disebut komentar beberapa baris diawali dengan /*
    dan diakhiri dengan */. Tidak seperti komentar C++ style, komentar ini dapat
    menjangkau beberapa baris. Sebagaicontoh,
    /* this is an example of a
    C style or multiline comments */
Komentar Khusus javadoc
    komentar javadoc dengan memulai barisdengan /** dan mengakhirinya dengan
    */. Seperti Komentar C_style, dapat juga menjangkau beberapa baris. Komentar
    ini juga dapat terdiri atas tag-tag untukmenambahkan lebih banyak informasi
    pada komentar Anda. Sebagai contoh,
/**
This is an example of special java doc comments used for \n
generating an html documentation. It uses tags like:
@author Florence Balagtas
@version 1.2
• */
                       Pernyataan dalam Java dan Blok
•   Pernyataan adalah satu atau lebih baris kode yang diakhiri dengan semicolon.
    Sebagai contoh untuk pernyataan tunggal adalah
    System.out.println(―Hello world‖);
•   Blok adalah satu atau lebih pernyataan yang terbentang antara kurung kurawal
    buka dankurung kurawal tutup yaitu sekumpulan pernyataan sebagai satu unit
    kesatuan.
•   Blok pernyataan dapat dikumpulkan akan tetapi tidak secara pasti mempunyai
    keterkaitan fungsi. Beberapa jumlah spasi kosong diijinkan terdapat didalamnya,
    sebagai contoh dari suatu blok adalah :
    public static void main( String[] args ){
    System.out.println("Hello");
    System.out.println("world");
    }
    */
                   Java Identifier Dan Keyword dalam Java
•   Java Identifier adalah suatu tanda yang mewakili nama-nama variabel, method,
    class, dsb.Contoh dari Identifier adalah : Hello, main, System, out.
•   Pendeklarasian Java adalah case-sensitive. Hal ini berarti bahwa Identifier :
    Hello tidak sama dengan hello.
•   Identifier harus dimulai dengan salah satu huruf, underscore ―_‖, atautanda dollar
    ―$‖. Hurufnya dapat berupa huruf besar maupun huruf kecil. Karakter selanjutnya
    dapat menggunakan nomor 0 smpai 9.
•   Identifier tidak dapat menggunakan kata kunci dalam Java seperti class, public,
    void, dsb.
•   Selanjutnya kita akan berdiskusi lebih banyak tentang kata kunci dalam Java.
•   Kata kunci adalah identifier yang telah dipesan untuk didefinisikan sebelumnya
    oleh Java untuk tujuan tertentu. Anda tidak dapat menggunakan keyword
    sebagai nama variabel,class, method Anda, dsb. Berikut ini adalah daftar dari
    kata kunci dalam Java (JavaKeywords).
•   Catatan: true, false, dan null bukan termasuk kata kunci akan tetapi mereka
    termasuk kata-kata khusus, jadi Anda tidak dapat menggunakan mereka sebagai
    nama variabel padaprogram Anda.
                      Java Literals
• Literals adalah tanda bahwa tidak terjadi perubahan
  atau konstan. Macam-macam literals dalam Java
  adalah : Integer Literals, Floating-Point Literals,
  Boolean Literals, Character Literals dan String
  Literals.
• Integer Literals
  Integer literals dibedakan dalam beberapa format
  yang berbeda: desimal (berbasis 10),
      heksadesimal (berbasis 16), and oktal
  (berbasis 8). Dalam penggunaan tipe data integer
  pada program, kita harus mengikuti aturan
  penggunaan beberapa notasi khusus.
                                       Java Literals
•   Floating-Point Literals
    Floating point literals mewakili bentuk desimal dengan bagian yang terpisah. Sebagai
    contoh adalah 3.1415. Floating point literals dapat dinyatakan dalam notasi standard atau
    scientific. Sebagai contoh, 583.45 dinyatakan dalam notasi standard, Sementara 5.8345e2
    dinyatakan dalam notasi scientific. Default Floating point literals mempunyai tipe data
    double yang dinyatakan dalam 64-bit.
    Untuk menggunakan ketelitian yang lebih kecil (32-bit) float, hanya dengan menambahkan
    karakter ―f‖ atau ―F‖.
•    Boolean Literals
    Boolean literals hanya memiliki dua nilai, true atau false.
•   Character Literals
    Character Literals diwakili oleh karakter single Unicode. Karakter Unicode adalah
    16-bitcharacter set yang menggantikan 8-bit ASCII character set. Unicode
    memungkinkan pengunaan simbol dan karakter khusus dari bahasa lain. Untuk
    menggunakan character literals, karakter tersebut di dalam tanda single pute (' ')
    (single quote delimiters). Sebagai contoh huruf a, diwakili sebagai „a‟. Untuk
    menggunakan karakter khusus seperti karakter baris baru, backslash digunakan
    diikuti dengan karakter kode. Sebagai contoh, ‗\n‘ untuk karakter baris baru atau
    ganti baris, ‗\r‘ untuk menyatakan nilai balik (carriage return), ‗\b‘ untuk
    backspace.
•   String Literals
    String literals mewakili beberapa karakter dan dinyatakan dalam tanda double
    pute(― ‖)(double quotes). Sebagai contoh string literal adalah, “Hello World”.
                                        Java Literals
•   Tipe Data Primitif
     Bahasa pemrograman Java mendefinisikan delapan tipe data primitif. Mereka diantaranya
     adalah boolean (untuk bentuk logika), char (untuk bentuk tekstual), byte, short, int, long
     (integral), double and float (floating point).
•   logika - boolean
     Tipe data boolean diwakili oleh dua pernyataan : true dan false. Sebagai contoh adalah,
     boolean result = true;Contoh yang ditunjukkan diatas, mendeklarasikan variabel yang
        dinamai result sebagai tipe data boolean dan memberinya nilai true.
•   teksual – char
     Tipe data character (char), diwakili oleh karakter single Unicode. Tipe data ini harus
     memiliki ciri berada dalam tanda single quotes(‘ ‘). Sebagai contoh,
     ‗a‘ //Huruf a
     ‗\t‘ //A tab
     Untuk menampilkan karakter khusus seperti ' (single quotes) atau " (double quotes),
     menggunakan karakter escape \. Sebagai contoh,
     '\'' //untuk single quotes
     '\"' //untuk double quotes
    Meskipun String bukan merupakan tipe data primitif (namun merupakan suatu
    Class),kita    akan memperkenalkan mengenai pada bagian ini. String mewakili
    tipe data yang terdiri atas beberapa karakter. Mereka tidak termasuk tipe data
    primitif, melainkan suatu class.Mereka memiliki literal yang terdapat diantara
    tanda double quotes(―‖). Sebagai contoh,String message=―Hello world!‖
                        Integral – byte, short, int & long

•   Tipe data integral dalam Java menggunakan tiga bentuk- yaitu desimal, oktal
    atau heksadesimal. Contohnya,
•   2 //nilai desimal 2
•   077 //angka 0 pada awal pernyataan mengindikasikan nilai oktal
•   0xBACC //karakter 0x mengindikasikan nilai heksadesimal Tipe-tipe integral
    memiliki default tipe data yaitu int. Anda dapat merubahnya ke bentuk long
    dengan menambahkan huruf l atau L. Tipe data integral memiliki range
    sebagaiberikut:
                          Floating Point – float dan double
•   Tipe Floating point memiliki double sebagai default tipe datanya. Floating-point
    literal termasuk salah satunya desimal point atau salah satu dari pilihan berikut
    ini,
     E or e //(add exponential value)
     F or f //(float)
     D or d //(double)
    Contohnya adalah,
     3.14 //nilai floating-point sederhana (a double)
     6.02E23 //A nilai floating-point yang besar
     2.718F //A nilai float size sederhana.
     123.4E+306D //A nilai double yang besar dengan nilai redundant D
     Pada contoh yang ditunjukkan diatas, 23 setelah E pada contoh kedua bernilai positif.
     Contoh tersebut sama dengan 6.02E+23. Tipe data Floating-point memiliki range sebagai
     berikut:
                                           Variabel
•   Variabel adalah item yang digunakan data untuk menyimpan pernyataan objek.
     Variabel memiliki tipe data dan nama. Tipe data menandakan tipe nilai yang dapat
     dibentuk oleh variabel itu sendiri. Nama variabel harus mengikuti aturan untuk identifier.
•   Deklarasi dan Inisialisasi Variabel
     Untuk deklarasi variabel adalah sebagai berikut,
     <data tipe> <name> [=initial value];
     Catatan: Nilainya berada diantara <> adalah nilai yang disyaratkan, sementara nilai dalam
        tanda [] bersifat optional.Berikut ini adalah contoh program yang mendeklarasikan dan
        menginisialisasi beberapa variabel,
     public class VariableSamples
{
public static void main( String[] args ){
//deklarasi tipe data dengan nama variable
// result dan tipe data boolean
boolean result;
//deklarasi tipe data dengan nama variabel
// option dan tipe data char
char option;
option = 'C'; //menandai 'C' sebagai option
//deklarasi tipe data dengan nama variabel
//grade, double tipe data dan telah di inisialisasi
//to 0.0
double grade = 0.0;
}
}
                                           Variabel
•   Variabel adalah item yang digunakan data untuk menyimpan pernyataan objek.
     Variabel memiliki tipe data dan nama. Tipe data menandakan tipe nilai yang dapat
     dibentuk oleh variabel itu sendiri. Nama variabel harus mengikuti aturan untuk identifier.
•   Deklarasi dan Inisialisasi Variabel
     Untuk deklarasi variabel adalah sebagai berikut,
     <data tipe> <name> [=initial value];
     Catatan: Nilainya berada diantara <> adalah nilai yang disyaratkan, sementara nilai dalam
        tanda [] bersifat optional.Berikut ini adalah contoh program yang mendeklarasikan dan
        menginisialisasi beberapa variabel,
     public class VariableSamples
{
public static void main( String[] args ){
//deklarasi tipe data dengan nama variable
// result dan tipe data boolean
boolean result;
//deklarasi tipe data dengan nama variabel
// option dan tipe data char
char option;
option = 'C'; //menandai 'C' sebagai option
//deklarasi tipe data dengan nama variabel
//grade, double tipe data dan telah di inisialisasi
//to 0.0
double grade = 0.0;
}
}
                    Menampilkan Data Variabel
• Untuk mengeluarkan nilai dari variabel yang diinginkan, kita dapat
  menggunakan perintah sebagai berikut,
    System.out.println()
    System.out.print()
• Berikut ini adalah contoh program,
    public class OutputVariable
    {
    public static void main( String[] args ){
    int value = 10;
    char x;
    x = ‗A‘;
    System.out.println( value );
    System.out.println( ―The value of x=‖ + x );
    }
    }
    Berikut ini adalah contoh program tersebut akan mengeluarkan teks berikut pada
        layar,
    10
    The value of x=A
                System.out.println() vs. System.out.print()
• Apa yang membedakan diantara perintah System.out.println() and
  System.out.print()? Yang pertama menambahkan baris baru pada akhir
  data untuk dikeluarkan, sementara selanjutnya tidak. Perhatikan
  pernyataan tersebut,
   System.out.print("Hello ");
   System.out.print("world!");
• Pernyataan tersebut akan menghasilkan output berikut ini pada layar,Hello
  world! Sekarang perthatikan pernyataan berikut,
   System.out.println("Hello ");
   System.out.println("world!");
• Pernyataan ini akan menghasilkan output sebagai berikut pada layar,
   Hello
   world!
                •Variabel Reference dan Variabel Primitif
• Sekarang kita akan membedakan dua tipe variabel yang dimiliki oleh
  program Java. Ada variabel reference dan variabel primitif .
• Variabel primitif adalah variabel dengan tipe data primitif. Mereka
  menyimpan data dalam lokasi memori yang sebenarnya dimana variabel
  tersebut berada.
• Variabel Reference adalah variabel yang menyimpan alamat dalam lokasi
  memori. Yang menunjuk ke lokasi memori dimana data sebenarnya
  berada. Ketika Anda mendeklarasikan variabel pada class tertentu, Anda
  sebenarnya mendeklarasikan reference variable dalam bentuk objek dalam
  classnya tersebut. Sebagai contoh, Apabila kita mempunyai dua variabel
  dengan tipe data int dan String.
   int num = 10;
   String name = "Hello"
                  Operator

•   Dalam Java, ada beberapa tipe operator. Ada operator aritmatika, operator relasi,
    operator logika, dan operator kondisi. Operator ini mengikuti bermacam-macam
    prioritas yang pasti sehingga compilernya akan tahu yang mana operator untuk
    dijalankan lebih dulu dalam kasus beberapa operator yang dipakai bersama-sama
    dalam satu pernyataan.
•   Operator Aritmatika Berikut ini adalah dasar operator aritmatika yang dapat
    digunakan untuk membuat suatu program Java,
            Berikut ini adalah output program
Variable values...
 i = 37
 j = 42
 x = 27.475
 y = 7.22
 i + j = 79
 Adding...
 x + y = 34.695
 Subtracting...
 i - j = -5
 x - y = 20.255
 Multiplying...
 i * j = 1554
 x * y = 198.37
 Dividing...
 i/j=0
 x / y = 3.8054
 Computing the remainder...
 i % j = 37
 x % y = 5.815
 Mixing tipes...
 j + y = 49.22
 i * x = 1016.58
            Berikut ini adalah output program
Variable values...
 i = 37
 j = 42
 x = 27.475
 y = 7.22
 i + j = 79
 Adding...
 x + y = 34.695
 Subtracting...
 i - j = -5
 x - y = 20.255
 Multiplying...
 i * j = 1554
 x * y = 198.37
 Dividing...
 i/j=0
 x / y = 3.8054
 Computing the remainder...
 i % j = 37
 x % y = 5.815
 Mixing tipes...
 j + y = 49.22
 i * x = 1016.58
                  Operator Increment dan Decrement
•   Dari sisi operator dasar aritmatika, Java juga terdiri atas operator unary
    increment (++) dan operator unary decrement (--). operator increment dan
  decrement menambah dan mengurangi nilai yang tersimpan dalam
  bentuk variabel angka terhadap nilai 1.
• Sebagai contoh, pernyataan,
     count = count + 1; //increment nilai count dengan nilai 1
     pernyataan tersebut sama dengan, count++;
                 Operator Increment dan Decrement
•   Operator increment dan decrement dapat ditempatkan sebelum atau
    sesudah operand. Ketika digunakan sebelum operand, akan
    menyebabkan variabel diincrement atau didecrement dengan nilai 1,
    dan kemudian nilai baru digunakan dalam pernyataan dimana dia
    ditambahkan. Sebagai contoh,
     int i = 10,
     int j = 3;
     int k = 0;
     k = ++j + i; //akan menghasilkan k = 4+10 = 14
     Ketika operator increment dan decrement ditempatkan setelah operand,
         nilai variabel yang lama akan digunakan lebih dulu dioperasikan lebih
         dulu terhadap pernyataan dimana dia ditambahkan. Sebagai contoh,
     int i = 10,
     int j = 3;
     int k = 0;
     k = j++ + i; //akan menghasilkan k = 3+10 = 13
               •Operator Relasi
Operator Relasi membandingkan dua nilai dan menentukan keterhubungan
  diantara nilainilai tersebut. Hasil keluarannya berupa nilai boolean yaitu
  true atau false.
public class RelasiDemo
{                                              //lebih kecil dari
public static void main(String[] args) {       System.out.println("Lebih kecil dari...");
//beberapa nilai                               System.out.println(" i < j = " + (i < j)); //true
int i = 37;                                    System.out.println(" j < i = " + (j < i)); //false
int j = 42;                                    System.out.println(" k < j = " + (k < j)); //false
int k = 42;                                    //lebih kecil atau sama dengan
System.out.println("Nilai variabel...");       System.out.println("Lebih kecil dari atau
System.out.println(" i = " + i);               sama dengan...");
System.out.println(" j = " + j);               System.out.println(" i <= j = " + (i <= j)); //true
System.out.println(" k = " + k);               System.out.println(" j <= i = " + (j <= i)); //false
//lebih besar dari                             System.out.println(" k <= j = " + (k <= j));
System.out.println("Lebih besar dari...");     //true
System.out.println(" i > j = " + (i > j));     //sama dengan
     //false
                                               System.out.println("Sama dengan...");
System.out.println(" j > i = " + (j > i));
     //true                                    System.out.println(" i == j = " + (i == j)); //false
System.out.println(" k > j = " + (k > j));     System.out.println(" k == j = " + (k == j));
     //false                                   //true
//lebih besar atau sama dengan                 //tidak sama dengan
System.out.println("Lebih besar dari atau      System.out.println("Tidak sama dengan...");
     sama dengan...");                         System.out.println(" i != j = " + (i != j)); //true
System.out.println(" i >= j = " + (i >= j));   System.out.println(" k != j = " + (k != j)); //false
     //false                                   }
System.out.println(" j >= i = " + (j >= i));   }
     //true
System.out.println(" k >= j = " + (k >= j));
     //true
Nilai variabel...
i = 37
j = 42
k = 42
Lebih besar dari...
i > j = false
j > i = true
k > j = false
Lebih besar dari atau sama dengan...
i >= j = false
j >= i = true
k >= j = true
Lebih kecil dari...
i < j = true
j < i = false
k < j = false
Lebih kecil dari atau sama dengan...
i <= j = true
j <= i = false
k <= j = true
Sama dengan...
i == j = false
k == j = true
Tidak sama dengan...
i != j = true
k != j = false
Nilai variabel...
i = 37
j = 42
k = 42
Lebih besar dari...
i > j = false
j > i = true
k > j = false
Lebih besar dari atau sama dengan...
i >= j = false
j >= i = true
k >= j = true
Lebih kecil dari...
i < j = true
j < i = false
k < j = false
Lebih kecil dari atau sama dengan...
i <= j = true
j <= i = false
k <= j = true
Sama dengan...
i == j = false
k == j = true
Tidak sama dengan...
i != j = true
k != j = false
                           Operator logika
•   Operator logika memiliki satu atau lebih operand boolean yang
    menghasilkan nilai boolean. Terdapat enam operator logika yaitu:
  && (logika AND), & (boolean logika AND), || (logika OR), |
  (boolean logika inclusive OR), ^ (boolean logika exclusive OR),
  dan ! (logika NOT).
• Pernyataan dasar untuk operasi logika adalah, x1 op x2 Dimana
  x1, x2 dapat menjadi pernyataan boolean. Variabel atau
  konstanta, dan op adalah salah satu dari operator &&, &, ||, |
  atau ^. Tabel kebenaran yang akan ditunjukkan selanjutnya,
  merupakan kesimpulan dari hasil dari setiap operasi untuk
  semua kombinasi yang mungkin dari x1 dan x2.
•   && (logika AND) dan & (boolean logika AND)
    Berikut ini adalah tabel kebenaran untuk && dan &,
                        Operator logika
Perbedaan dasar antara operator && dan & adalah bahwa && mensupports short
circuit evaluations (atau evaluasi perbagian), sementara operator & tidak. Apa
arti dari pernyataan tersebut?
Diberikan suatu pernyataan, exp1 && exp2 &&
akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai false dan
menyatakan bahwa exp1 bernilai false. Jika exp1 bernilai false, operator tidak
akan pernah mengevaluasi exp2 karena hasil operasi operator akan menjadi false
tanpa memperhatikan nilai dari exp2. Sebaliknya, operator & selalu mengevaluasi
kedua nilai dari exp1 dan exp2 sebelum mengembalikan suatu nilai jawaban.
                          Operator logika


public class TestAND
{
public static void main( String[] args ){
int i = 0;
int j = 10;
                                            The output of the program is,
boolean test= false;
                                            0
//demonstrasi &&
                                            10
test = (i > 10) && (j++ > 9);
                                            false
System.out.println(i);
                                            0
System.out.println(j);
                                            11
System.out.println(test);
                                            false
//demonstrasi &
test = (i > 10) & (j++ > 9);
System.out.println(i);
System.out.println(j);
System.out.println(test);
}
}
                          Operator logika

|| (logika OR) dan | (boolean logika inclusive OR)
Berikut ini adalah tabel kebenaran untuk || dan |,




Perbedaan dasar antara operator || dan | adalah bahwa || mendukung short-
circuit evaluations (atau proses evaluasi sebagian), sementara | tidak. Apa
maksud dari pernyataan tersebut?
diberikan suatu pernyataan, exp1 || exp2
                               Operator logika
|| akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai true
dan menyatakan bahwa exp1 bernilai true. Jika exp1 bernilai true, operator
tidak akan pernah mengevaluasi exp2 karena hasil dari operasi operator akan
bernilai true tanpa memperhatikan nilai dari exp2. Sebaliknya,operator | selalu
mengevaluasi kedua nilai dari exp1 and exp2 sebelum mengembalikan suatu
jawaban suatu nilai. Berikut ini sebuah contoh source code yang
menggunakan operator logika dan boolean OR,
 public class TestOR
                                                   //demonstrasi |
 {
                                                   test = (i < 10) | (j++ > 9);
 public static void main( String[] args ){
                                                   System.out.println(i);
 int i = 0;
                                                   System.out.println(j);
 int j = 10;
                                                   System.out.println(test);
 boolean test= false;
                                                   }
 //demonstrasi ||
                                                   }
 test = (i < 10) || (j++ > 9);
 System.out.println(i);                       Hasil keluaran dari program ini
 System.out.println(j);                       adalah,
 System.out.println(test);                    0
                                              10
                                              true
                                              0
                                              11
                                              true
                               Operator logika
|| akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai true
dan menyatakan bahwa exp1 bernilai true. Jika exp1 bernilai true, operator
tidak akan pernah mengevaluasi exp2 karena hasil dari operasi operator akan
bernilai true tanpa memperhatikan nilai dari exp2. Sebaliknya,operator | selalu
mengevaluasi kedua nilai dari exp1 and exp2 sebelum mengembalikan suatu
jawaban suatu nilai. Berikut ini sebuah contoh source code yang
menggunakan operator logika dan boolean OR,
 public class TestOR
                                                   //demonstrasi |
 {
                                                   test = (i < 10) | (j++ > 9);
 public static void main( String[] args ){
                                                   System.out.println(i);
 int i = 0;
                                                   System.out.println(j);
 int j = 10;
                                                   System.out.println(test);
 boolean test= false;
                                                   }
 //demonstrasi ||
                                                   }
 test = (i < 10) || (j++ > 9);
 System.out.println(i);                       Hasil keluaran dari program ini
 System.out.println(j);                       adalah,
 System.out.println(test);                    0
                                              10
                                              true
                                              0
                                              11
                                              true
                            Operator logika
^ (boolean logika ExclusiveOR )
Berikut ini adalah tabel kebenaran untuk ^,




   Hasil operasi operator exclusive OR adalah TRUE, jika dan hanya jika
   satu operand bernilai TRUE dan yang lain bernilai False. Catatan jika
   kedua operand harus selalu dievaluasi untuk menjumlahkan hasil dari
   suatu exclusive OR.
                          Operator logika

public class TestXOR
{
public static void main( String[] args ){
boolean val1 = true;
boolean val2 = true;
System.out.println(val1 ^ val2);            Hasil keluaran program
val1 = false;                               tersebut adalah,
val2 = true;                                false
System.out.println(val1 ^ val2);            true
val1 = false;                               false
val2 = false;                               true
System.out.println(val1 ^ val2);
val1 = true;
val2 = false;
System.out.println(val1 ^ val2);
}
}
                        Operator logika

(logika NOT)
Logika NOT digunakan dalam satu argumen, dimana argumen tersebut
dapat menjadi suatupernyataan, variabel atau konstanta. Berikut ini adalah
tabel kebenaran untuk operator not!,




public class TestNOT
{
public static void main( String[] args ){
boolean val1 = true;
boolean val2 = false;
System.out.println(!val1);
System.out.println(!val2);
}
}
Hasil keluaran program adalah sebagai berikut,
false
true
                            Operator logika

Operator Kondisi(?:)
Operator kondisi ?: adalah operator ternary. Berarti bahwa operator ini membawa tiga
argumen yang membentuk suatu ekspresi bersyarat. Struktur pernyataan yang
menggunakan operator kondisi adalah, exp1?exp2:exp3
Dimana nilai exp1 adalah suatu pernyataan boolean yang memiliki hasil yang salah
satunya harus berupa nilai true atau false. Jika exp1 bernilai true, exp2 merupakan
hasil operasi. Jika bernilai false, kemudian exp3 merupakan hasil operasinya.

     public class ConditionalOperator
     {
     public static void main( String[] args ){
     String status = "";
     int grade = 80;
     //mendapatkan status pelajar
     status = (grade >= 60)?"Passed":"Fail";
     //print status
     System.out.println( status );
     }
     }
     Hasil keluaran dari program ini akan menjadi,
     Passed
                    Operator logika


Berikut ini adalah program lain yang menggunakan operator
?: ,
class ConditionalOperator
{
public static void main( String[] args ){
int score = 0;
char answer = 'a';
score = (answer == 'a') ? 10 : 0;
System.out.println("Score = " + score );
}
}
Hasil keluaran program adalah,
Score = 10
                         Operator logika

Operator Precedence
Operator precedence didefinisikan sebagai perintah yang dilakukan
compiler ketika melakukan evaluasi terhadap operator, untuk mengajukan
perintah dengan hasil yang tidak ambigu/ hasil yag jelas.
Mendapatkan nilai rata-rata dari tiga angka
Buatlah program yang menghasilkan output nilai rata-rata dari tiga angka.
Nilai dari masing-masing tiga angka tersebut adalah 10, 20 dan 45.
Tampilan Output yang diharapkan adalah,
number 1 = 10
number 2 = 20
number 3 = 45
Rata-rata = 25
Menampilkan nilai terbesar
Diberikan tiga angka, tuliskan program yang menghasilkan output angka
dengan nilai terbesar diantara tiga angka tersebut. Gunakan operator kondisi
?: yang telah kita pelajari sebelumnya (PETUNJUK: Anda akan perlu
menggunakan dua set operator ?: untuk memecahkan permasalahan ini).
Sebagai contoh, diberikan angka 10, 23 dan 5, Program Anda akan
menghasilkan output,
number 1 = 10
number 2 = 23
number 3 = 5
Nilai tertingginya adalah angka = 23
SESI02
                    Mendapatkan Input dari Keyboard

Menggunakan BufferedReader untuk mendapatkan input
Pada bagian ini, kita akan menggunakan class BufferedReader yang berada di
package java.io untuk mendapatkan input dari keyboard. Berikut ini adalah
langkah-langkah yang diperlukan untuk mendapatkan input dari keyboard:
1. Tambahkan di bagian paling atas code Anda:
         import java.io.*;
2. Tambahkan statement berikut:
   BufferedReader dataIn = new BufferedReader(new
   InputStreamReader( System.in) );
3. Deklarasikan variabel String temporary untuk mendapatkan input, dan
   gunakan fungsi readLine() untuk mendapatkan input dari keyboard. Anda
   harus mengetikkannya di dalam blok try-catch:
         try{
         String temp = dataIn.readLine();
         }
         catch( IOException e ){
         System.out.println(―Error in getting input‖);
         }
                  Mendapatkan Input dari Keyboard

Berikut ini adalah source code lengkapnya:
   import java.io.BufferedReader;
   import java.io.InputStreamReader;
   import java.io.IOException;
   public class GetInputFromKeyboard
   {
   public static void main( String[] args ){
   BufferedReader dataIn = new BufferedReader(new
   InputStreamReader( System.in) );
   String name = "";
   System.out.print("Please Enter Your Name:");
   try{
   name = dataIn.readLine();
   }catch( IOException e ){
   System.out.println("Error!");
   }
   System.out.println("Hello " + name +"!");
   }
   }
                 Mendapatkan Input dari Keyboard

Dua statement selanjutnya,
public class GetInputFromKeyboard
{
public static void main( String[] args ){
kita sudah mempelajari pada pelajaran sebelumnya. Pernyataan
ini mendeklarasikan class bernama GetInputFromKeyboard dan
kita mendeklarasikan method main.Dalam statement,
BufferedReader dataIn = new BufferedReader(new
InputStreamReader( System.in) );
kita mendeklarasikan sebuah variabel bernama dataIn dengan
tipe class BufferedReader. Jangan mengkhawatirkan tentang
maksud dari syntax saat ini. Kita akan menjelaskannya pada akhir
pembahasan.
                 Mendapatkan Input dari Keyboard

Sekarang, kita akan mendeklarasikan variabel String dengan
identifier name,
String name = ""; Pernyataan di atas merupakan tempat untuk
menyimpan input dari user. Nama variabel diinisialisasi sebagai
String kosong "". Sebaiknya kita selalu menginisialisasi sebuah
variabel setelah kita mendeklarasikannya.
Baris berikutnya adalah memberikan output sebuah String pada
layar yang menanyakan nama user.
System.out.print("Please Enter Your Name:");
Sekarang, blok di bawah ini merupakan try-catch block,
try{
name = dataIn.readLine();
}catch( IOException e ){
System.out.println("Error!");
}
                 Mendapatkan Input dari Keyboard

•Statement,import java.io.BufferedReader; import
java.io.InputStreamReader;
import java.io.IOException; menjelaskan bahwa kita akan
menggunakan class BufferedReader, InputStreamReader dan
IOException yang berada di java.io package.
•Java Application Programming Interface (API) berisi ratusan
class yang sudah didefinisikan sebelumnya yang dapat digunakan
untuk program Anda. Class-class tersebut dikumpulkan di dalam
packages.
•Packages berisi class yang mempunyai fungsi yang saling
berhubungan. Seperti pada contoh di atas, java.io package
mengandung class-class yang memungkinkan program untuk
melakukan input dan output data.
• Pernyataan di atas juga dapat ditulis sebagai berikut, import
java.io.*; yang akan mengeluarkan semua class yang berada
dalam package, dan selanjutnya kita bisa menggunakan class-
class tersebut dalam program kita.
                Mendapatkan Input dari Keyboard
Dua statement selanjutnya,
public class GetInputFromKeyboard
{
public static void main( String[] args ){
kita sudah mempelajari pada pelajaran sebelumnya. Pernyataan
ini mendeklarasikan
class bernama GetInputFromKeyboard dan kita mendeklarasikan
method main.
Dalam statement,
BufferedReader dataIn = new BufferedReader(new
InputStreamReader( System.in) );
kita mendeklarasikan sebuah variabel bernama dataIn dengan
tipe class
BufferedReader. Jangan mengkhawatirkan tentang maksud dari
syntax saat ini. Kita akan menjelaskannya pada akhir
pembahasan.
Sekarang, kita akan mendeklarasikan variabel String dengan
identifier name,
String name = "";
                    Mendapatkan Input dari Keyboard

Pernyataan di atas merupakan tempat untuk menyimpan input dari user. Nama
variabel diinisialisasi sebagai String kosong "". Sebaiknya kita selalu
menginisialisasi sebuah variabel setelah kita mendeklarasikannya. Baris
berikutnya adalah memberikan output sebuah String pada layar yang
menanyakan nama user.
System.out.print("Please Enter Your Name:");
Sekarang, blok di bawah ini merupakan try-catch block,
try{
name = dataIn.readLine();
}catch( IOException e ){
System.out.println("Error!");
}
Pada baris ini menjelaskan bahwa kemungkinan terjadi error pada pernyataan,
name = dataIn.readLine(); akan ditangkap. Kita akan membahas tentang
penanganan exception pada bab selanjutnya dari pembahasan ini, tetapi untuk
sekarang, Anda cukup mencatat bahwa Anda perlu menambahkan kode ini
untuk menggunakan method readLine() dari BufferedReader untuk
mendapatkan input dari user.
                 Mendapatkan Input dari Keyboard

Selanjutnya kembali ke pernyataan,
name = dataIn.readLine();
method diatas memanggil dataIn.readLine(), mendapatkan input
dari user dan
memberikan sebuah nilai String. Nilai ini akan disimpan ke dalam
variabel name, yang akan kita gunakan pada statement akhir
untuk menyambut user,
System.out.println("Hello " + name + "!");
Menggunakan JOptionPane untuk mendapatkan input

Cara lain untuk mendapatkan input dari user adalah dengan
menggunakan class JoptionPane yang didapatkan dari
javax.swing package. JoptionPane memudahkan memunculkan
dialog box standard yang memberikan kepada user sebuah nilai
atau menginformasikan sesuatu. Diberikan kode berikut ini,
import javax.swing.JOptionPane;
public class GetInputFromKeyboard
{
public static void main( String[] args ){
String name = "";
name = JoptionPane.showInputDialog("Please enter your
name");
String msg = "Hello " + name + "!";
JOptionPane.showMessageDialog(null, msg);
}
}
Menggunakan JOptionPane untuk mendapatkan input
Menggunakan JOptionPane untuk mendapatkan input

 Statement pertama,
 import javax.swing.JOptionPane; Menjelaskan bahwa kita
 mengimpor class JoptionPane dari package javax.swing. Bisa
 juga ditulis seperti,
 import javax.swing.*;
 Pernyataan, name = JOptionPane.showInputDialog("Please
 enter your name"); membuat sebuah input dialog JOptionPane,
 yang akan menampilkan dialog dengan sebuah pesan, sebuah
 textfield dan tombol OK seperti pada gambar. Hasil dari dialog
 tersebut adalah String dan disimpan ke dalam variabel name.
 Sekarang kita membuat pesan selamat datang, yang akan
 disimpan ke dalam variabe msg,
 String msg = "Hello " + name + "!";
Menggunakan JOptionPane untuk mendapatkan input

 Statement pertama,
 import javax.swing.JOptionPane; Menjelaskan bahwa kita
 mengimpor class JoptionPane dari package javax.swing. Bisa
 juga ditulis seperti,
 import javax.swing.*;
 Pernyataan, name = JOptionPane.showInputDialog("Please
 enter your name"); membuat sebuah input dialog JOptionPane,
 yang akan menampilkan dialog dengan sebuah pesan, sebuah
 textfield dan tombol OK seperti pada gambar. Hasil dari dialog
 tersebut adalah String dan disimpan ke dalam variabel name.
 Sekarang kita membuat pesan selamat datang, yang akan
 disimpan ke dalam variabe msg,
 String msg = "Hello " + name + "!";
 Baris selanjutnya adalah menampilkan sebuah dialog yang berisi
 sebuah pesan dan tombol OK,
 JOptionPane.showMessageDialog(null, msg);
Menggunakan JOptionPane untuk mendapatkan input

 Latihan
 Kata Terakhir (versi BufferedReader)
 Menggunakan BufferedReader, tanyakan tiga kata dari user dan tampilkan
 output dari
 input user tersebut ke layar. Contoh,
 Enter word1:Goodbye
 Enter word2:and
 Enter word3:Hello
 Goodbye and Hello
 Kata Terakhir (versi JOptionPane)
 Menggunakan JOptionPane, tanyakan tiga kata dari user dan tampilkan
 output dari input
 user tersebut ke layar. Contoh
 Gambar 1: Input Pertama
 Gambar 3: Menampilkan Pesan
 Gambar 2: Input Kedua
Menggunakan JOptionPane untuk mendapatkan input

 Latihan
 Kata Terakhir (versi BufferedReader)
 Menggunakan BufferedReader, tanyakan tiga kata dari user dan tampilkan
 output dari
 input user tersebut ke layar. Contoh,
 Enter word1:Goodbye
 Enter word2:and
 Enter word3:Hello
 Goodbye and Hello
 Kata Terakhir (versi JOptionPane)
 Menggunakan JOptionPane, tanyakan tiga kata dari user dan tampilkan
 output dari input
 user tersebut ke layar. Contoh
 Gambar 1: Input Pertama
 Gambar 3: Menampilkan Pesan
 Gambar 2: Input Kedua
Menggunakan JOptionPane untuk mendapatkan input
SESI03
                     Struktur Kontrol Pemilihan

Struktur kontrol pemilihan adalah pernyataan dari Java yang mengijinkan
user untukmemilih dan mengeksekusi blok kode spesifik dan
mengabaikan blok kode yang lain.
Statement if
Pernyataan if akan menentukan sebuah pernyataan (atau blok kode) yang
akan eksekusi jika dan hanya jika persyaratan bernilai benar(true).
Bentuk dari pernyataan if,
if( boolean_expression )
statement;
atau
if( boolean_expression ){
statement1;
statement2;
...
}
dimana, boolean_expression adalah sebuah penyataan logika (true/false)
atau variabel bertipe boolean.
                      Struktur Kontrol Pemilihan




Berikut ini adalah potongan kode dari pernyataan if:
int grade = 68;
if( grade > 60 ) System.out.println("Congratulations!");
atau
int grade = 68;
if( grade > 60 ){
System.out.println("Congratulations!");
System.out.println("You passed!");
}
              Struktur Kontrol Pemilihan

Berikut ini adalah potongan kode dari
pernyataan if:
int grade = 68;
if( grade > 60 )
System.out.println("Congratulations!");
atau
int grade = 68;
if( grade > 60 ){
System.out.println("Congratulations!");
System.out.println("You passed!");
}
                     Struktur Kontrol Pemilihan
Statement if-else
Pernyataan if-else digunakan apabila kita ingin mengeksekusi beberapa
pernyataan dengan kondisi true dan pernyataan yang lain dengan kondisi
false. Bentuk statement if-else,
if( boolean_expression )
statement;
else statement;
dapat juga ditulis seperti,
if( boolean_expression ){
statement1;
statement2;
...
}
else{
statement1;
statement2;
...

}
                         Struktur Kontrol Pemilihan
Berikut ini contoh code statement if-else,
int grade = 68;
if( grade > 60 ) System.out.println("Congratulations!");
else System.out.println("Sorry you failed");
atau
int grade = 68;
if( grade > 60 ){
System.out.println("Congratulations!");
System.out.println("You passed!");
}
else{
System.out.println("Sorry you failed");

}
                      Struktur Kontrol Pemilihan
Statement if-else-if
Pernyataan pada bagian kondisi else dari blok if-else dapat menjadi struktur
if-else yang lain. Kondisi struktur seperti ini mengijinkan kita untuk membuat
seleks persyaratan yang lebih kompleks.
Bentuk statement if-else if,
if( boolean_expression1 )
statement1;
else if( boolean_expression2 )
statement2;
else statement3;
Sebagai catatan : anda dapat memiliki banyak blok else-if sesudah
pernyataan if. Blok else bersifat opsional dan dapat dihilangkan. Pada contoh
yang ditampilkan di atas, jika boolean_expression1 bernilai true, maka
program akan mengeksekusi statement1 dan melewati pernyataan yang lain.
Jika boolean_expression2 bernilai true, maka program akan mengeksekusi
statement2 dan melewati statement3.
Struktur Kontrol Pemilihan

                Berikut ini contoh code statement
                if-else-if
                int grade = 68;
                if( grade > 90 ){
                System.out.println("Very good!");
                }
                else if( grade > 60 ){
                System.out.println("Very good!");
                }
                else{
                System.out.println("Sorry you
                failed");
                }
                         Struktur Kontrol Pemilihan
Kesalahan umum ketika menggunakan statement if-else:
1. Kondisi pada statement if tidak mengevaluasi nilai logika boolean. Contohnya :
     //SALAH
     int number = 0;
     if( number ){
     //some statements here
     }
Variabel number tidak memiliki nilai Boolean.
2. Menggunakan operator = sebagai operator perbandingan yang seharusnya adalah
     operator == . Contohnya,
     //SALAH
     int number = 0;
     if( number = 0 ){
     //Beberapa pernyataan
     }
Seharusnya kode tersebut ditulis,
     //BENAR
     int number = 0;
     if( number == 0 ){
     //beberapa pernyataan
     }
3. Penulisan elseif yang seharusnya ditulis sebagai else if.
Pengenalan Pemrograman 1 6
                         Struktur Kontrol Pemilihan
Contoh statement if-else-else if
public class Grade
{
public static void main( String[] args )
{
double grade = 92.0;
if( grade >= 90 ){
System.out.println( "Excellent!" );
}
else if( (grade < 90) && (grade >= 80)){
System.out.println("Good job!" );
}
else if( (grade < 80) && (grade >= 60)){
System.out.println("Study harder!" );
}
else{
System.out.println("Sorry, you failed.");
}
}
}
Statement switch
Cara lain untuk membuat cabang adalah dengan menggunakan kata kunci switch.
Switch mengkonstruksikan cabang untuk beberapa kondisi dari nilai.
Bentuk statement switch,
switch( switch_expression ){
case case_selector1:
statement1; //
statement2; //block 1
. . . //
break;
case case_selector2:
statement1; //
statement2; //block 2
. . . //
break;
...
default:
}
s
tatement1; //
statement2; //block n
. . . //
break;
switch_expression adalah ekspresi integer atau karakter dan case_selector1,
case_selector2 dan seterusnya adalah konstanta unik dari nilai integer atau karakter.
Contoh statement switch
public class Grade
{
public static void main( String[] args )
{
int grade = 92;
switch(grade){
case 100:
System.out.println( "Excellent!" );
break;
case 90:
System.out.println("Good job!" );
break;
case 80:
System.out.println("Study harder!" );
break;
default:
System.out.println("Sorry, you failed.");
}
}
}

Pengenalan Pemrograman 1 10
Struktur Kontrol Perulangan
Struktur kontrol pengulangan adalah berupa pernyataan dari Java yang mengijinkan kita
untuk mengeksekusi blok code berulang-ulang sesuai dengan jumlah tertentu yang
diinginkan. Ada tiga macam jenis dari struktur kontrol pengulangan yaitu while, dowhile,
dan for-loops.
while loop
Pernyataan while loop adalah pernyataan atau blok pernyataan yang diulang-ulang
sampai mencapai kondisi yang cocok. Bentuk pernyataan while,
while( boolean_expression ){
statement1;
statement2;
...
}
Pernyataan di dalam while loop akan dieksekusi berulang-ulang selama kondisi
boolean_expression bernilai benar (true). Contoh, pada kode dibawah ini,
int i = 4;
while ( i > 0 ){
System.out.print(i);
i--;
}
Contoh diatas akan mencetak angka 4321 pada layar. Perlu dicatat jika bagian i-
-; dihilangkan, akan menghasilkan pengulangan yang terus menerus (infinite loop).
Sehingga, ketika menggunakan while loop atau bentuk pengulangan yang lain, pastikan
Anda memberikan pernyataan yang membuat pengulangan berhenti pada suatu kondisi.
Berikut ini adalah beberapa contoh while loop,
Contoh 1:
int x = 0;
while (x<10)
{
System.out.println(x);
x++;
}
Contoh 2:
//infinite loop
while(true)
System.out.println(―hello‖);
Contoh 3:
//no loops
// statement is not even executed
while (false)
System.out.println(―hello‖);
do-while loop
Do-while loop mirip dengan while-loop. Pernyataan di dalam do-while loop
akan dieksekusi beberapa kali selama kondisi bernilai benar(true).
Perbedaan antara while dan do-while loop adalah dimana pernyataan di dalam
do-while loop akan dieksekusi sedikitnya satu kali.
Bentuk pernyataan do-while,
do{ statement1;
statement2;
...
}while( boolean_expression );
Pernyataan di dalam do-while loop akan dieksekusi pertama kali, dan akan
dievaluasi kondisi dari boolean_expression. Jika nilai pada boolean_expression
tersebut bernilai true, pernyataan di dalam do-while loop akan dieksekusi lagi.
Berikut ini beberapa contoh do-while loop:
Contoh 1:
int x = 0;
do
{
System.out.println(x);
x++;
}while (x<10);
Contoh ini akan memberikan output 0123456789 pada layar.

Contoh 2:
//infinite loop
do{
System.out.println(―hello‖);
} while (true);
Contoh di atas akan melakukan pengulangan terus menerus yang menulis kata
―hello‖
pada layar.

Contoh 3:
//one loop
// statement is executed once
do System.out.println(―hello‖);
while (false);
Contoh di atas akan memberikan output hello pada layar.
for loop
Pernyataan for loop memiliki kondisi hampir mirip seperti struktur pengulangan
sebelumnya yaitu melakukan pengulangan untuk mengeksekusi kode yang
sama
sebanyak jumlah yang telah ditentukan.
Bentuk dari for loop,
for (InitializationExpression; LoopCondition; StepExpression){
statement1;
statement2;
...
}
dimana,
InitializationExpression – inisialisasi dari variabel loop.
LoopCondition - membandingkan variabel loop pada nilai batas
tertentu
. StepExpression - melakukan update pada variabel loop.
Berikut ini adalah contoh dari for loop,
int i;
for( i = 0; i < 10; i++ ){
System.out.print(i);
}
Pada contoh ini, pernyataan i=0 merupakan inisialisasi dari variabel.
Selanjutnya,
kondisi i<10 diperiksa. Jika kondisi bernilai true, pernyataan di dalam for loop
dieksekusi. Kemudian, ekspresi i++ dieksekusi, lalu akan kembali pada bagian
pemeriksaan terhadap kondisi i<10 lagi. Kondisi ini akan dilakukan berulang-
ulang
sampai mencapai nilai yang salah (false).
Contoh tadi, adalah contoh yang sama dari while loop,
int i = 0;
while( i < 10 ){
System.out.print(i);
i++;
}
Pernyataan Percabangan
Pernyataan percabangan mengijinkan kita untuk mengatur aliran eksekusi program.
Java memberikan tiga bentuk pernyataan percabangan: break, continue dan return.
Pernyataan break tidak berlabel (unlabeled)
Pernyataan break tidak berlabel (unlabeled) digunakan untuk menghentikan jalannya
pernyataan switch. Selain itu pernyataan break unlabeled juga bisa digunakan
untuk menghentikan pernyataan-pernyataan for, while atau do-while loop.
Contohnya,
String names[] = {"Beah", "Bianca", "Lance", "Belle","Nico", "Yza", "Gem", "Ethan"};
String searchName = "Yza";
boolean foundName = false;
for( int i=0; i< names.length; i++ ){
if( names[i].equals( searchName )){
foundName = true;
break;
}
}
if( foundName ){
System.out.println( searchName + " found!" );
}
else{
}
System.out.println( searchName + " not found." );
Pada contoh diatas, jika string ―Yza‖ ditemukan, pengulangan pada for loop akan
dihentikan dan akan dilanjutkan ke pernyataan berikutnya yang terletak setelah pernyataan for.
Pernyataan break berlabel
Bentuk label dari pernyataan break akan menghentikan pernyataan di luarnya, dimana
sebelumnya harus diberikan label yang sudah di spesifikasikan pada program pada
pernyataan break. Program berikut ini akan mencari nilai dalam array dua dimensi.
Terdapat dua pengulangan bersarang (nested loop). Ketika sebuah nilai ditemukan,
brea akan menghentikan pernyataan yang diberi label searchLabel yang terletak di luar
pernyataan for loop. dan tidak menjalankan aliran kontrol apapun pada label. Aliran
kontrol pada label akan diberikan secara otomatis pada pernyataan yang terletak
dibawah label.
int[][] numbers = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int searchNum = 5;
boolean foundNum = false;
searchLabel:
for( int i=0; i<numbers.length; i++ ){
for( int j=0; j<numbers[i].length; j++ ){
if( searchNum == numbers[i][j] ){
foundNum = true; break searchLabel;
}
}
}
if( foundNum ){
System.out.println( searchNum + " found!" );
}
else{
} System.out.println( searchNum + " not found!" );
Pernyataan Continue
Pernyataan continue memiliki dua bentuk: berlabel dan tidak berlabel. Anda
dapat menggunakan pernyataan continue untuk melanjutkan pengulangan
yang sedang dijalankan oleh pernyataan for, while, atau do- while loop.
Pernyataan continue tidak berlabel (unlabeled)
Bentuk pernyataan continue tidak berlabel (unlabeled) akan melewati bagian
pernyataan setelah pernyataan ini dituliskan dan memeriksa eksepresi logika
(boolean) yang mengkontrol pengulangan. Jika ekspresi logika (boolean) masih
bernilai true, maka pengulangan tetap dilanjutkan. Pada dasarnya pernyataan
ini akan melanjutkan bagian pengulangan pada pernyataan loop.
Berikut ini adalah contoh dari penghitungan angka dari ―Beah‖ dalam suatu
array.
String names[] = {"Beah", "Bianca", "Lance", "Beah"};
int count = 0;
for( int i=0; i<names.length; i++ ){
if( !names[i].equals("Beah") ){
continue; //skip next statement
}
count++;
}
System.out.println("There are " + count + " Beahs in the
list");
Labeled continue statement
Bentuk pernyataan continue berlabel (labeled) akan melanjutkan pengulangan
yang sedang terjadi dan dilanjuti ke pengulangan berikutnya dari pernyataan
pengulangan yang diberi label (tanda).
outerLoop:
for( int i=0; i<5; i++ ){
for( int j=0; j<5; j++ ){
System.out.println("Inside for(j) loop"); //message1
if( j == 2 ) continue outerLoop;
}
System.out.println("Inside for(i) loop"); //message2
}
Pada contoh ini, bagian message2 tidak pernah akan dicetak, karena
pernyataan continue akan melewati pengulangan.
Pernyataan Return
Pernyataan return digunakan untuk keluar dari sebuah method. Pernyataan
return memiliki dua bentuk: memberikan sebuah nilai, dan tidak memberikan
nilai. Untuk memberikan sebuah nilai, cukup berikan nilai (atau ekspresi yang
menghasilkan sebuah nilai) sesudah kata return. Contohnya,
return ++count;
atau
return "Hello";
Tipe data dari nilai yang diberikan harus sama dengan tipe dari method
yang dibuat. Ketika sebuah method void dideklariskan, gunakan bentuk return
yang tidak memberikan nilai. Contohnya,
return;
Kita akan membahas lebih lanjut tentang pernyataan return ketika mempelajari
tentang method.
Latihan
Nilai
Ambil tiga nilai ujian dari user dan hitung nilai rata-rata dari nilai tersebut.
Berikan output rata-rata dari tiga ujian. Berikan juga smiley face pada output
jika nilai rata-rata lebih besar atau sama dengan 60, selain itu beri output :-(.
1. Gunakan BufferedReader untuk mendapat input dari user, dan System.out
untuk output hasilnya.
2. Gunakan JOptionPane untuk mendapat input dari user dan output hasilnya.
Membaca Bilangan
Ambil sebuah angka sebagai input dari user, dan outputnya berupa kata yang
sesuai dengan angka. Angka yang dimasukkan antara 1-10. Jika user
memasukkan nilai yang
tidak sesuai berikan output ―Invalid number‖.
1. Gunakan statement if-else untuk menyelesaikan
2. Gunakan statement switch untuk menyelesaikan
Cetak Seratus Kali
Buat sebuah program yang mencetak nama Anda selama seratus kali. Buat
tiga versi program ini menggunakan while loop, do while dan for-loop.
Perpangkatan
Hitung pangkat sebuah nilai berdasarkan angka dan nilai pangkatnya. Buat tiga
versi dari program ini menggunakan while loop, do-while dan for-loop.
SESI04
                         Array
Pada Bab sebelumnya, kita telah mendiskusikan bagaimana cara
pendeklarasian berbagai macam variabel dengan menggunakan tipe data
primitif. Dalam pendeklarasian variabel, kita sering menggunakan sebuah tipe
data beserta nama variabel atau identifier yang unik. Apabila kita ingin
menggunakan variabel tersebut, kita akan memanggil dengan nama identifier-
nya. Sebagai contoh, kita memiliki tiga variabel dengan tipe data int yang
memiliki identifier berbeda untuk tiap variabel.
int number1;
int number2;
int number3;
number1 = 1;
number2 = 2;
number3 = 3;
Seperti yang dapat Anda perhatikan pada contoh diatas, kode tersebut akan
sia-sia karena harus menginisialisasi dan menggunakan setiap variabel
padahal sebenarnya variabel-variabel tersebut digunakan untuk tujuan yang
sama. Pada bahasa pemrograman Java maupun di bahasa pemrograman yang
lain, terdapat sebuah kemampuan untuk menggunakan satu variabel yang
dapat menyimpan beberapa data dan memanipulasinya dengan lebih efektif.
Tipe variabel inilah yang disebut sebagai array.
                         Array




Array adalah sebuah variabel/sebuah lokasi tertentu yang memiliki satu
nama sebagai identifier, namun identifier ini dapat menyimpan lebih dari
sebuah
nilai.
Pendeklarasian Array
Array harus dideklarasikan seperti layaknya sebuah variabel. Pada saat
mendeklarasikan array, anda harus membuat sebuah daftar dari tipe data,
yang diikuti oleh sepasang tanda kurung [], lalu diikuti oleh nama identifier-
nya. Sebagai contoh,
int []ages;
atau Anda dapat menempatkan sepasang tanda kurung [] sesudah nama
identifier. Sebagai
contoh,
int ages[];
                       Array
Setelah pendeklarasian array , kita harus membuat array dan menentukan
berapa panjangnya dengan sebuah konstruktor. Proses ini di Java disebut
sebagai instantiation (istilah dalam Java yang berarti membuat). Untuk
meng-instantiate sebuah obyek, kita membutuhkan sebuah konstruktor.
Kita akan membicarakan lagi mengenai instantiate obyek dan pembuatan
konstruktor pada bagian selanjutnya.Sebagai catatan bahwa ukuran dari
array tidak dapat diubah setelah anda menginisialisasinya. Sebagai contoh,
//deklarasi
int ages[];
//instantiate obyek
ages = new int[100];
atau bisa juga ditulis dengan,
//deklarasi dan instantiate
obyek
int ages[] = new int[100];
Pada contoh diatas, pendeklarasian tersebut akan memberitahukan
kepada compiler Java, bahwa identifier ages akan digunakan sebagai
nama array yang berisi data bertipe integer, dan dilanjutkan dengan
membuat atau meng-instantiate sebuah array baru yang terdiri dari 100
elemen.
                      Array
Setelah pendeklarasian array , kita harus membuat array
dan menentukan berapa panjangnya dengan sebuah
konstruktor. Proses ini di Java disebut sebagai
instantiation (istilah dalam Java yang berarti membuat).
Untuk meng-instantiate sebuah obyek, kita membutuhkan
sebuah konstruktor. Kita akan membicarakan lagi
mengenai instantiate obyek dan pembuatan konstruktor
pada bagian selanjutnya.Sebagai catatan bahwa ukuran
dari array tidak dapat diubah setelah anda
menginisialisasinya. Sebagai contoh,
//deklarasi
int ages[];
//instantiate obyek
ages = new int[100];
atau bisa juga ditulis dengan,
//deklarasi dan instantiate
obyek
int ages[] = new int[100];
Pada contoh diatas, pendeklarasian tersebut akan
memberitahukan kepada compiler Java, bahwa identifier
ages akan digunakan sebagai nama array yang berisi data
bertipe integer, dan dilanjutkan dengan membuat atau
meng-instantiate sebuah array baru yang terdiri dari 100
                       Array
new untuk meng-instantiate array, Anda juga dapat mendeklarasikan,
membangun, kemudian memberikan sebuah nilai pada array sekaligus
dalam sebuah pernyataan.
Sebagai contoh,
//membuat sebuah array yang berisi variabel-variabel
//boolean pada sebuah identifier. Array ini terdiri dari 4
//elemen yang diinisilisasikan sebagai value
//{true,false,true,false}
boolean results[] ={ true, false, true, false };

//Membuat sebuah array yang terdiri dari penginisialisasian
//4variabel double bagi value {100,90,80,75}
double []grades = {100, 90, 80, 75};

//Membuat sebuah array String dengan identifier days. Array
//ini terdiri dari 7 elemen.
String days[] = { ―Mon‖, ―Tue‖, ―Wed‖, ―Thu‖, ―Fri‖, ―Sat‖,
―Sun‖};
                        Array
Untuk mengakses sebuah elemen dalam array, atau mengakses
sebagian dari array, Anda harus menggunakan sebuah angka atau
yang disebut sebagai indeks atau subscript.
Pada saat memasukkan nilai ke dalam array, sebuah nomor indeks
atau subscript telah diberikan kepada tiap anggota array, sehingga
program dan programmer dapat mengakses setiap nilai pada array
apabila dibutuhkan. Nilai indeks selalu dalam tipe integer, dimulai
dari angka nol dan dilanjutkan ke angka berikutnya sampai akhir
array. Sebagai catatan bahwa indeks didalam array dimulai dari 0
sampai dengan (ukuranArray-1).Sebagai contoh, pada array yang kita
deklarasikan tadi, kita mempunyai,

//memberikan nilai 10 kepada elemen pertama array
ages[0] = 10;

//mencetak elemen array yang terakhir
System.out.print(ages[99]);

Perlu diperhatikan bahwa sekali array dideklarasikan dan dikonstruksi,
nilai yang disimpan dalam setiap anggota array akan diinisialisasi
sebagai nol. Oleh karena itu, apabila Anda menggunakan tipe data
seperti String, array tidak akan diinisalisasi menjadi string kosong ―‖.
Untuk itu Anda tetap harus membuat String array secara eksplisit.
                      Array
Berikut ini adalah contoh kode untuk mencetak seluruh elemen didalam
array. Dalam contoh ini digunakanlah pernyataan for loop, sehingga
kode kita menjadi lebih pendek.
public class ArraySample{
public static void main( String[] args ){
int[] ages = new int[100];
for( int i=0; i<100; i++ ){
System.out.print( ages[i] );
}}}
menggunakan atribut length dari array. Atribut ini akan mengembalikan
ukuran dari array itu sendiri. Sebagai contoh, arrayName.length Pada
contoh sebelumnya, kita dapat menuliskannya kembali seperti berikut
ini,
public class ArraySample
{
public static void main( String[] args ){
int[] ages = new int[100];
for( int i=0; i<ages.length; i++ ){
System.out.print( ages[i] );
}
}
}
                      Array
Array Multidimensi
Array multidimensi diimplementasikan sebagai array yang terl etak di
dalam array. Array multidimensi dideklarasikan dengan menambahkan
jumlah tanda kurung setelah nama array. Sebagai contoh,
// Elemen 512 x 128 dari integer array
int[][] twoD = new int[512][128];
// karakter array 8 x 16 x 24
char[][][] threeD = new char[8][16][24];
// String array 4 baris x 2 kolom
String[][] dogs = {{ "terry", "brown" },
{ "Kristin", "white" },
{ "toby", "gray"},
{ "fido", "black"}
};
Untuk mengakses sebuah elemen didalam array multidimensi, sama
saja dengan mengakses array satu dimensi. Misalnya saja, untuk
mengakses elemen pertama dari baris pertama didalam array dogs, kita
akan menulis,
System.out.print( dogs[0][0] );
Kode diatas akan mencetak String ―terry‖ di layar.
                             Latihan
1. Hari dalam seminggu
Buatlah sebuah String array yang akan menginisialisasi 7 hari dalam seminggu. Sebagai
contoh,
String days[] = {―Monday‖, ―Tuesday‖….};
Gunakan while-loop, kemudian print semua nilai dari array (Gunakan juga untuk dowhile dan
for-loop)Using a while-loop.
2. Nomor terbesar
Gunakanlah BufferedReader dan JoptionPane, tanyakan kepada user untuk 10 nomor.
Kemudian gunakan array untuk menyimpan 10 nomor tersebut. ampilkan kepada user,input
terbesar yang telah diberikan user.
3. Buku Alamat
Berikut ini adalah array multidimensi yang menyatakan isi dari sebuah buku alamat:
String entry = {{"Florence", "735-1234", "Manila"},
{"Joyce", "983-3333", "Quezon City"},
{"Becca", "456-3322", "Manila"}};
Cetak buku alamat tersebut dalam format berikut ini:
Name : Florence
Tel. # : 735-1234
Address : Manila
Name : Joyce
Tel. # : 983-3333
Address : Quezon City
Name : Becca
Tel. # : 456-3322
Address : Manila
SESI05
Argumen Command-line
Sebuah aplikasi Java dapat menerima sejumlah argumen dari command-
line. Argumen dari command line memberikan kesempatan bagi user untuk
mengatur operasi dari sebuah aplikasi dalam sekali pemanggilan program.
User memasukkan argumen command line pada saat memanggil aplikasi
dan menspesifikasikan argumen tersebut setelah nama dari class yang akan
dijalankan. Sebagai contoh, apabila Anda memiliki sebuah aplikasi Java
dengan nama Sort, yang akan mengurutkan lima nomor, Anda dapat
menjalankannya seperti berikut ini:


Perlu diperhatikan bahwa sebuah argumen dapat dipisahkan oleh ruang
spasi. Pada bahasa pemrograman Java, jika kita akan memanggil sebuah
aplikasi, sistem runtime akan memberikan argumen command-line ke
method main yang dimiliki oleh aplikasi menggunakan sebuah array dari
String. Lalu, setiap String di dalam array mewakili sebuah argumen
commmand-line. Perhatikan deklarasi dari main method,
public static void main( String[] args )
Argumen yang diberikan kepada program Anda akan disimpan kedalam
sebuah array String dengan identifier args.
Pada contoh sebelumnya, argumen dari command-line yang akan diberikan
kepada aplikasi sort command adalah sebuah array dengan lima buah String
yaitu ―5‖,‖4‖,‖3‖,‖2‖, dan ―1‖. Anda dapat mengetahaui berapa banyak argumen
dari command-line dengan cara melihat panjang dari attribute array.Sebagai
contoh,
int numberOfArgs = args.length;
Jika program Anda membutuhkan argumen command-line yang bertipe angka.
Anda harus mengkonversi argumen String tersebut untuk merepresantasikan
sebuah angka, misalnya ―34‖ menjadi sebuah angka 34. Kode dibawah ini
adalah sebuah potongan program untuk mengkonversi sebuah argumen
command-line menjadi tipe integer.
int firstArg = 0;
if (args.length > 0){
firstArg = Integer.parseInt(args[0]); }
parseInt akan melempar eksepsi NumberFormatException (ERROR) jika format
args[0] tidak valid (bukan sebuah angka). membuat sebuah program Java yang
akan mencetak jumlah argumen dan argumen pertama diberikan pada program
tersebut.
public class CommandLineExample
{
public static void main( String[] args ){
System.out.println("Number of arguments=" +
args.length);
System.out.println("First Argument="+ args[0]); } }
SESI06
         Pengenalan Pemrograman Berorientasi Obyek
OOP berputar pada konsep dari obyek yang merupakan elemen dasar dari
program Anda. Ketika kita membandingkan dengan dunia nyata, kita dapat
menemukan beberapa obyek disekitar kita seperti mobil, singa, manusia dan
seterusnya. Obyek ini dikarakterisasi oleh atribut dan tingkah lakunya.
Contohnya, objek sebuah mobil mempunyai atribut tipe transmisi, warna dan
manufaktur. Mempunyai tingkah laku berbelok, mengerem dan berakselerasi.
Dengan cara yang sama pula kita dapat mendefinisikan perbedaan sifat dan
tingkah laku dari singa. Coba perhatikan tabel dibawah ini sebagai contoh
perbandingan :
          Pengenalan Pemrograman Berorientasi Obyek
Dengan deskripsi ini, obyek pada dunia nyata dapat secara mudah asumsikan
sebagai obyek perangkat lunak menggunakan atribut sebagai data dan tingkah
laku sebagai method. Data dan method dapat digunakan dalam pemrograman
game atau perangkat lunak interaktif untuk membuat simulasi obyek pada
dunia nyata. Contohnya adalah perangkat lunak obyek mobil dalam permainan
balap mobil atau perangkat lunak obyek singa dalam sebuah perangkat lunak
pendidikan interaktif pada kebun binatang untuk anak anak.
Perbedaan Class dan Object
Pada dunia perangkat lunak, sebuah obyek adalah sebuah komponen
perangkat lunak yang stukturnya mirip dengan obyek pada dunia nyata. Setiap
obyek dibangun dari sekumpulan data (atribut) yang disebut variabel untuk
menjabarkan karakteristik khusus dari obyek, dan juga terdiri dari sekumpulan
method yang menjabarkan tingkah laku dari obyek. Bisa dikatakan bahwa
obyek adalah sebuah perangkat lunak yang berisi sekumpulan variabel dan
method yg berhubungan. Variabel dan method dalam obyek Java secara formal
diketahui sebagai variabel instance dan method instance. Hal ini dilakukan
untuk membedakan dari variabel class dan method class, dimana akan dibahas
kemudian. Class adalah sturktur dasar dari OOP. Class terdiri dari dua tipe dari
anggota dimana disebutdengan field (attribut/properti) dan method. Field
merupakan tipe data yang didefinisikan oleh class, sementara method
merupakan operasi. Sebuah obyek adalah sebuah instance (keturunan) dari
class.
         Pengenalan Pemrograman Berorientasi Obyek
Untuk dapat membedakanantara class dan obyek, mari kita mendiskusikan
beberapa contoh berikut ini. Kita memiliki sebuah class mobil dimana dapat
digunakan untuk medefinisikan beberapa obyek mobil. Pada tabel dibawah,
mobil A dan mobil B adalah obyek dari class mobil. Class memiliki field nomor,
plat, warna, manufaktur dan kecepatan yang diisi dengan
nilai pada obyek mobil A dan mobil B. Mobil juga dapat berakselerasi, berbelok
dan melakukan rem.
         Pengenalan Pemrograman Berorientasi Obyek
Untuk dapat membedakanantara class dan obyek, mari kita mendiskusikan
beberapa contoh berikut ini. Kita memiliki sebuah class mobil dimana dapat
digunakan untuk medefinisikan beberapa obyek mobil. Pada tabel dibawah,
mobil A dan mobil B adalah obyek dari class mobil. Class memiliki field nomor,
plat, warna, manufaktur dan kecepatan yang diisi dengan
nilai pada obyek mobil A dan mobil B. Mobil juga dapat berakselerasi, berbelok
dan melakukan rem.




  Ketika diinisialisi, setiap obyek mendapat satu set variabel yang baru.
  Bagaimanapun, implementasi dari method dibagi diantara objek pada
  class yang sama. Class menyediakan keuntungan dari reusability.
  Programmer perangkat lunak dapat menggunakan sebuah kelas
  beberapa kali untuk membuat banyak objek.
          Pengenalan Pemrograman Berorientasi Obyek
Instansiasi Class
Untuk membuat sebuah objek atau sebuah instance pada sebuah class. Kita
menggunakan operator new. Sebagai contoh, jika anda ingin membuat
instance dari class string, kita menggunakan kode berikut :
String str2 = new String(―Hello world!‖);
Ini juga sama dengan,
String str2 = "Hello";
Gambar 1: Instanstiasi Class
Variabel Class dan Variabel Method
Selain dari variabel instance, kita juga memungkinkan untuk mendefinisikan
variabel dari class, yang nantinya variabel ini dimiliki oleh class. Ini berarti
variabel ini dapat memiliki nilai yang sama untuk semua objek pada class yang
sama. Mereka juga disebut static member variables.
         Pengenalan Pemrograman Berorientasi Obyek
Method
Apakah Method itu dan mengapa menggunakan Method?
Pada contoh yang telah kita diskusikan sebelumnya, kita hanya memiliki satu
method, dan itu adalah method main(). Di dalam Java, kita dapat
mendefinisikan banyak method yang akan kita panggil dari method yang
berbeda. Sebuah method adalah bagian-bagian kode yang dapat dipanggil
oleh program utama atau dari method lainnya untuk menjalankan fungsi yang
spesifik.
Berikut adalah karakteristik dari method :
1. dapat mengembalikan satu nilai atau tidak sama sekali
2. dapat diterima beberapa parameter yang dibutuhkan atau tidak ada
   parameter sama sekali. Parameter bisa juga disebut sebagai argumen dari
   fungsi
3. setelah method telah selesai dieksekusi, dia akan kembali pada method
   yang memanggilnya.
Sekarang mengapa kita butuh untuk membuat banyak method? Mengapa kita
tidak menuliskan semua kode pada sebuah method? Hal ini karena
penyelesaian masalah yang sangat efektif adalah memecah masalah-masalah
tersebut menjadi beberapa bagian. Kita juga dapat melakukan hal ini di
Java dengan membuat method untuk mengatasi bagian tertentu dari masalah.
Sebuah permasalahan dapat dipecah-pecah menjadi beberapa bagian kecil.
Hal ini sangat baik sekali untuk membuat program yang sangat besar.
         Pengenalan Pemrograman Berorientasi Obyek
Memanggil Instance dan memberikan Variabel dari Method
Sekarang, untuk mengilustrasikan bagaimana memanggil method, mari kita
menggunakan class string sebagai contoh. Anda dapat menggunakan the
dokumentasi dari Java API untuk melihat semua method yang tersedia dalam
class string. Selanjutnya, kita akan membuat method, kita sendiri. Tapi untuk
saat ini, mari terlebih dahulu kita gunakan method yang sudah disediakan oleh
Java. Untuk memanggil sebuah instance method, kita dapat menuliskan :
nameOfObject.nameOfMethod( parameters );
mari kita mengambil dua contoh method yang ditemukan dalam class String.




Menggunakan method :
String str1 = "Hello";
char x = str2.charAt(0); //will return the
character H
//simpan pada variabel x
String str2 = "hello";
//return boolean
boolean result = str1.equalsIgnoreCase( str1 );
         Pengenalan Pemrograman Berorientasi Obyek
Pemberian Variabel Dalam Method
Pada contoh kita sebelumnya , kita sudah pernah mecoba melewati variabel
pada method. Walaupun kita belumdapat membedakan antara perbedaan tipe
variabel yang diberikan (passing) ke method dalam Java. Ada dua tipe data
variabel passing pada method, yang pertama adalah pass-by-value dan yang
kedua adalah pass-by-reference.
Pass-by-Value
Ketika pass-by-values terjadi, method membuat sebuah salinan dari nilai
variable yang dikirimkan ke method. Walaupun demikian, method tidak dapat
secara langsung memodifikasi nilai variabel pengirimnya meskipun parameter
salinannya sudah dimodifikasi nilainya di dalam method.
        Pengenalan Pemrograman Berorientasi Obyek
Pada contoh diatas, kita memanggil method tes dan melewatkan nilai
variabel i sebagai parameter. Nilai pada i disalinkan ke variable j pada
method. Pada kondisi ini variabel j adalah merupakan variabel pengganti
pada method tes, jika nilai j berubah maka nilai variabel i yang terletak pada
main tidak akan ikut berubah walaupun awalnya variabel j merupakan salinan
dari variabel i.
Secara default, semua tipe data primitif ketika dilewatkan pada sebuah
method adalah pass-by-value. Pada contoh diatas, kita memanggil method
tes dan melewatkan nilai variabel i sebagai parameter. Nilai pada i disalinkan
ke variable j pada method. Pada kondisi ini variabel j adalah merupakan
variabel pengganti pada method tes, jika nilai j berubah maka nilai variabel i
yang terletak pada main tidak akan ikut berubah walaupun awalnya variabel j
merupakan salinan dari variabel i. Secara default, semua tipe data primitif
ketika dilewatkan pada sebuah method adalah pass-by-value.
Pass-by-reference
Ketika sebuah pass-by-reference terjadi, alamat memori dari nilai pada
sebuah variabel dilewatkan pada saat pemanggilan method. Hal ini berarti
bahwa method menyalin alamat memori dari variabel yang dilewatkan pada
method. Ini tidak seperti pada pass-by-value, method dapat memodifikasi
variabel asli dengan menggunakan alamat memori tersebut, meskipun
berbeda nama variabel yang digunakan dalam method dengan variabel
aslinya, kedua variabel ini menunjukkan lokasi dari data yang sama.
        Pengenalan Pemrograman Berorientasi Obyek
Memanggil Method Static
Method Static adalah method yang dapat dipakai tanpa harus
menginisialisasi suatu class (maksudnya tanpa menggunakan variabel
terlebih dahulu). Method static hanya dimiliki oleh class dan tidak dapat
digunakan oleh instance (atau objek) dari suatu class. Method static
dibedakan dari method yang dapat instance di dalam suatu class oleh kata
kunci static.
Untuk memanggil method static, ketik :
Classname.staticMethodName(params);
Contoh dari static method yang digunakan :
//mencetak data pada layar
System.out.println(―Hello world‖);
//convert string menjadi integer
int i = Integer.parseInt(―10‖);
String hexEquivalent = Integer.toHexString( 10 );
        Pengenalan Pemrograman Berorientasi Obyek
Lingkup Variabel
Selain nama dan tipe data yang dimiliki oleh variabel, suatu variablejuga
mempunyai jangkauan. Jangkauan ini menentukan kemampuan program
dalam mengakses variable. Jangkauan ini juga menentukan siklus hidup dari
suatu variable atau berapa lama variable itu berada dalam memori.
Jangkauan ini ditentukan oleh letak pendeklarasian variabel di
dalam program. Untuk memudahkan anda mengenai jangkauan variabel, kita
bedakan variabel yang terletak di dalam kurawal {.....}. Blok kode yang
terdapat di luar kurung kurawal bisa disebut juga dengan blok luar, dan blok
kode yang terletak di dalam kurung kurawal disebut dengan blok dalam.
Jika kamu mendeklarasikan variabel di blok luar, variabel akan dapat dipakai
oleh blok bagian dalam. Lain halnya jika kamu mendeklarasikan variabel di
blok dalam, kamu tidak bisa harapkan blok terluar untuk menggunakan
variabel tersebut. Jadi dapat disimpulkan, suatu jangkauan variable dapat
terletak di dalam blok dimana variabel tersebut sudah di deklarasikan, dimulai
dari tempat dimana variable itu di dklarasikan dan di blok-blok bagian dalam.
Kode yang kita miliki disini mempunyai lima jangkauan yang ditandai oleh baris
dan keterangan yang mewakili jangkauan itu, dengan variable i,j,k,m dan n, dan
5 jangkauan A,B,C,D dan E, kita mempunyai beberapa jangkauan variable
berikut:
Jangkauan variable i adalah A.
Jangkauan variable j adalah B.
Jangkauan variable k adalah C.
Jangkauan variable m adalah D.
Jangkauan variable n adalah E.
Pada method main Jangkauan variabel adalah,
ages[ ] - scope A
i in B - scope B
i in C – scope C
Pada method test, Jangkauan variabel adalah,
arr[ ] - scope D
i in E - scope E
Pada saat variabel di deklarasikan, hanya boleh terdapat sebuah variabel
dengan identifier/nama dapat di deklarasikan di dalam sebuah jangkauan. Hal
ini maksudnya jika kamu mempunyai deklarasi berikut,
{
int test = 10;
int test = 20;
}
Compiler akan menghasilkan error karena compiler mendeteksi nama yang lain
dari variabel di satu blok, namun compiler tidak akan menghasilkan error jika
menumukan dua variabel dengan nama yang sama jika kedua variabel tersebut
tidak dideklarasikan pada blok yang sama, Contoh :
int test = 0;
System.out.print( test );
//..some code here
{
int test = 20;
System.out.print( test );
}
Manakala System.out.print (baris 2) pertama dipanggil, dia mencetak nilai dari
variabel test pertama (nilai 0) pada saat variabel terlihat pada jangkauan.
Pernyataan System.out.print yang kedua (baris6), nilai 20 dicetak mengambil
nilai variabel test terdekat (baris 6)pada jangkauan blok kode tersebut.
Casting, Converting dan Comparing Objects
Pada bagian ini, kita akan belajar bagaimana mengunakan typecasting.
Typecasting atau casting adalah proses konversi data dari tipe data tertentu ke
tipe data yang lain. Kita juga akan belajar bagaimana mengkonversi tipe data
primitif ke obyek dan sebaliknya. Kemudian, pada akhirnya kita akan belajar
bagaimana membandingkan sebuah obyek.
Casting Tipe data Primitif
Casting antara tipe primitif dapat mengijinkan Anda untuk mengkonversikan
sebuah nilai dari sebuah tipe data tertentu kepada tipe primitif yang lain. Hal ini
biasanya terjadi diantara tipe data angka. Ada sebuah tipe data primitif yang
tidak dapat kita casting, yaitu tipe data boolean. Sebagai contoh dari
typecasting adalah pada saat Anda menyimpan sebuah variabel dengan
tipe data integer kepada sebuah variabel dengan tipe data double. Sebagai
contoh:
int numInt = 10;
double numDouble = numInt; //implicit cast
Pada contoh ini dapat kita lihat bahwa, walaupun variabel yang dituju (double)
memiliki ukuran yang lebih besar daripada nilai yang akan kita tempatkan
didalamnya, data tersebut secara implisit dapat kita casting ke tipe data double.
Contoh yang lain adalah apabila kita ingin untuk melakukan typecasting sebuah
int ke char atau sebaliknya. Sebuah karakter akan dapat digunakan sebagai
nilai integer karena setiap karakter memiliki sebuah nilai numerik yang
merepresentasikan posisinya dalam satu set karakter. Jika sebuah variable
memiliki nilai 65, maka cast (char) i akan menghasilkan nilai 'A'. Kode numerik
yang merepresentasikan huruf kapital A adalah 65, berdasarkan set karakter
ASCII, dan Java telah mengadopsi bagian ini untuk mendukung karakter.
char valChar = 'A';
int valInt = valChar;
System.out.print( valInt ); //casting explisit: keluaran 65
Ketika kita mengkonversi data yang bertipe besar ke tipe data yang lebih kecil,
kita harus menggunakan explicit cast. Explicit casts mengikuti bentuk sebagai
berikut :
(dataType)value
dimana,dataType, adalah nama dari tipe data yang Anda konversi
value, adalah pernyataan yang dihasilkan pada nilai dari the source type.
Sebagai contoh,
double valDouble = 10.12;
int valInt = (int)valDouble; //men-convert valDouble ke tipe int
double x = 10.2;
int y = 2;
int result = (int)(x/y); //hasil typecast operasi ke int
Contoh yang lain adalah apabila kita ingin untuk melakukan typecasting sebuah
int ke char atau sebaliknya. Sebuah karakter akan dapat digunakan sebagai
nilai integer karena setiap karakter memiliki sebuah nilai numerik yang
merepresentasikan posisinya dalam satu set karakter. Jika sebuah variable
memiliki nilai 65, maka cast (char) i akan menghasilkan nilai 'A'. Kode numerik
yang merepresentasikan huruf kapital A adalah 65, berdasarkan set karakter
ASCII, dan Java telah mengadopsi bagian ini untuk mendukung karakter.
char valChar = 'A';
int valInt = valChar;
System.out.print( valInt ); //casting explisit: keluaran 65
Ketika kita mengkonversi data yang bertipe besar ke tipe data yang lebih kecil,
kita harus menggunakan explicit cast. Explicit casts mengikuti bentuk sebagai
berikut :
(dataType)value
dimana,dataType, adalah nama dari tipe data yang Anda konversi
value, adalah pernyataan yang dihasilkan pada nilai dari the source type.
Sebagai contoh,
double valDouble = 10.12;
int valInt = (int)valDouble; //men-convert valDouble ke tipe int
double x = 10.2;
int y = 2;
int result = (int)(x/y); //hasil typecast operasi ke int
Casting Obyek
Instances dari class-class juga dapat di ubah ke instance-instance dari class-
class yang lain dengan satu batasan: class-class sumber dan tujuan harus
terhubung dengan mekanisme inheritance; satu class harus menjadi
sebuah subclass terhadap class yang lain. Kita akan menjelaskan mengenai
inheritance pada bab selanjutnya. Sejalan dengan konversi nilai primitif ke tipe
yang lebih besar ukurannya, beberapa object mungkin tidak membutuhkan
untuk ubah secara explisit. Faktanya karena semua subclass terdiri atas
informasi yang sama seperti class induknya. Sebagai contoh, jika terdapat
method yang memiliki dua argumen, satu tipe object dan tipe window yang lain.
Anda dapat melewatkan instance dari class apapun untuk argumen object
karena semua class java adalah subclass dari object. Untuk argumen window,
anda dapat melewatkannya subclassnya, seperti dialog, FileDialog, dan frame.
Hal ini dapat dituliskan dalam program dan bukan hanya dalam memanggil
method. Jika anda mempunyai variabel yang didefinisikan sebagai class
window, anda dapat memberikan obyek dari class tersebut atau dari
subclassnya untuk dijadikan variabel tanpa konversi.
Untuk kebalikannya pun bisa dilakukan, Anda dapat menggunakan
superclass ketika sebuah subclass dibentuk. Akan tetapi error akan
ditemukan karena subclass kemungkinan memiliki lebih banyak
tingkah laku daripada superclassnya, maka mungkin akan terjadi
hilangnya kendali dari superclass untuk method tertentu. Superclass
object mungkin tidak memiliki semua kemungkinan tingkah laku yang
dapat dilakukan subclass object. Sebagai contoh jika anda memiliki
operasi yang memanggil method dalam obyek dari class integer,
mengunakan object dari class Number tidak akan didapat kan method
lebih banyak dar i yang dispesifikasikan dalam integer. Error akan terjadi
jika Anda mencoba untuk memanggil method yang tidak dimiliki oleh
obyek tujuan.
Untuk mengunakan obyek-obyek superclass dimana obyek-obyek
subclass ditentukan terlebih dahulu, anda harus mengkonversi mereka
secara eksplisit. Anda tidak akan kehilangan informasi sebelumnya setelah
proses konversi, tapi anda mendapatkan semua method danvariabel yang
didefinisikan oleh subclass. Untuk konversi sebuah obyek ke class yang
lain, Anda dapat menggunakan operasi yang sama seperti konversi untuk
tipe-tipe primitif : Untuk memilih,
(classname)object
dimana,
classname, adalah nama dari class tujuan.
object, adalah sesuatu yang mengarah pada obyek sumber.
Catatan: casting akan membuat pengalamatan ke obyek yang lama dari
classname yang dituliskan; obyek yang lama akan dapat tetap dipakai
seperti sebelumnya.
Contoh berikut konversi sebuah instance dari class VicePresident ke sabuah
instance dari class Employee; VicePresident adalah sebuah subclass dari
Employee dengan lebih banyak informasi, disini didefinisikan bahwa
VicePresident memiliki akses menuju
executive washroom,
Employee emp = new Employee();
VicePresident veep = new VicePresident();
emp = veep; // tidak adah konversi yang diperlukan untuk penggunaan
yang cenderung naik
veep = (VicePresident)emp; // Harus memilih dengan pemilihan secara Eksplisit
Convert Tipe Primitive ke Object Dan Sebaliknya
Satu hal yang tidak dapat Anda lakukan pada beberapa keadaan yaitu konversi
dari sebuah obyek ke sebuah tipe data primitif, atau sebaliknya. Tipe-tipe data
primitif dan obyek adalah sesuatu yang sangat berbeda dalam Java, dan Anda
tidak bisa secara langsung konversi diantara keduanya. Sebagai sebuah
alternatif, package java.lang yang terdiri atas class-class yang berhubungan
untuk setiap tipe data primitif yaitu : Float, Boolean, Byte, dan sebagainya.
Kebanyakan dari class-class ini memiliki nama yang sama seperti tipe datanya,
kecuali jika nama classnya diawali dengan huruf besar (Short -> sort, Double ->
double dan sebagainya). Selain itu terdapat dua class yang memiliki nama
berbeda dari tipe data primitifnya yaitu: Character digunakan untuk variabel
char dan Integer untuk variabel int. (Disebut dengan Wrapper Classes)
Java merepresentasikan tipe data primi ti f dan versi classnya dengan sangat
berbeda. Sebuah program tidak akan berhasil tercompile jika Anda
menggunakan hanya satu ketika yang lain juga diperlukan. Menggunakan
class-class yang berhubungan untuk setiap tipe primitif, anda dapat membuat
sebuah obyek yang memiliki nilai yang sama.
Contoh :
//Pernyataan berikut membentuk sebuah instance bertipe Integer
// class dengan nilai integer 7801 (primitif -> Object)
Integer dataCount = new Integer(7801);
//Pernyataan berikut meng-konversi sebuah obyek Integer ke
//tipe data primitif int nya. Hasilnya adalah sebuah int
//dengan nilai 7801
int newCount = dataCount.intValue();
// Anda perlu suatu translasi biasa pada program
// yang mengkonversi sebuah String ke sebuah tipe numeric,
//seperti suatu int
// Obyek->primitif
String pennsylvania = "65000";
int penn = Integer.parseInt(pennsylvania);
   PERHATIAN: class Void tidak mewakili apapun dalam Java, jadi class ini tidak akan
digunakan ketika melakukan konversi antara nilai primitif dan obyek. Kata void digunakan
dalam definisi method untuk mengindikasikan bahwa method tidak memiliki sebuah nilai
yang dihasilkan.
Java merepresentasikan tipe data primi ti f dan versi classnya dengan sangat
berbeda. Sebuah program tidak akan berhasil tercompile jika Anda
menggunakan hanya satu ketika yang lain juga diperlukan. Menggunakan
class-class yang berhubungan untuk setiap tipe primitif, anda dapat membuat
sebuah obyek yang memiliki nilai yang sama.
Contoh :
//Pernyataan berikut membentuk sebuah instance bertipe Integer
// class dengan nilai integer 7801 (primitif -> Object)
Integer dataCount = new Integer(7801);
//Pernyataan berikut meng-konversi sebuah obyek Integer ke
//tipe data primitif int nya. Hasilnya adalah sebuah int
//dengan nilai 7801
int newCount = dataCount.intValue();
// Anda perlu suatu translasi biasa pada program
// yang mengkonversi sebuah String ke sebuah tipe numeric,
//seperti suatu int
// Obyek->primitif
String pennsylvania = "65000";
int penn = Integer.parseInt(pennsylvania);
   PERHATIAN: class Void tidak mewakili apapun dalam Java, jadi class ini tidak akan
digunakan ketika melakukan konversi antara nilai primitif dan obyek. Kata void digunakan
dalam definisi method untuk mengindikasikan bahwa method tidak memiliki sebuah nilai
yang dihasilkan.
Membandingkan dua Obyek
Dalam diskusi kita sebelumnya, kita mempelajari tentang operator untuk
membandingkan nilai — sama dengan, tidak sama dengan, lebih kecil
daripada, dan sebagainya. Operator ini hanya bekerja pada tipe primitif, bukan
pada obyek. Jika Anda berusaha untuk menggunakan nilai selain tipe data
primitif sebagai operand, compiler Java akan menghasilkan error.
Salah satu contoh untuk aturan ini adalah operator untuk persamaan : ==
(sama dengan)dan != (tidak samadengan), ketika operator ini dimasukkan ke
sebuah obyek, operator initidak akan melakukan apa yang sebenarnya
diinginkan. Penggunaan operator ini akan memeriksa kesamaan antara satu
obyek ke obyek lain, bukan nilainya. Untuk membandingkan instance dari
sebuah, Anda harus mengimplementasikan method khusus dalam class anda
dan memanggil method tersebut. Sebuah contoh yang baik untuk ini adalah
class String. Sangat mungkin memiliki dua object String yang memiliki nilai
yang sama. Namun, jika Anda menggunakan operator == untuk
membandingkan obyek ini, kedua obyek tersebut Akan menghasilkan hasil
yang tidak sama. Walaupun isinya ternyata sama akan tetapi pada
kenyataannya mereka bukan merupakan obyek yang sama. Untuk melihat jika
dua object String memiliki nilai yang sama, sebuah method dari class
yaitu equals() digunakan. Method ini akan memeriksa setiap karakter dalam
string dan mengembalikan nilai true jika dua obyek string memiliki nilai yang
sama.
Kode berikut mengilustrasikan hal tersebut,
class EqualsTest {
public static void main(String[] arguments) {
String str1, str2;
str1 = "Free the bound periodicals.";
str2 = str1;
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
str2 = new String(str1);
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
System.out.println("Same value? " + str1.equals(str2));
}
}
Output program ini adalah sebagai berikut ,
OUTPUT:
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? true
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? false
Same value? True
Sekarang mari mendiskusikan tentang dua baris kode dari program sebagai
berikut.
String str1, str2;
str1 = "Free the bound periodicals.";
Bagian pertama dari program mendeklarasikan dua variabel (str1 dan str2),
memberikan kalimat "Free the bound periodicals." untuk str1, dan kemudian
memberi nilai tersebut untuk str2. Seperti yang Anda pelajari sebelumnya, str1
dan str2 sekarang menunjuk ke alamat obyek yang sama, dan uji kesamaan
membuktikan hal tersebut.
str2 = new String(str1);
Pada bagian yang kedua dari program ini, anda membuat obyek String baru
dengan nilai yang sama dari str1 dan memberikkanya ke str2. Sekarang Anda
memiliki dua obyek string yang berbeda yaitu str1 dan str2, keduanya memilki
nilai yang sama. Ketika dilakukan pengujian untuk melihat jika mereka obyek
yang sama dengan menggunakan operator ==, akan dihasilkan nilai: false —
kedua obyek bukan obyek yang sama dalam memory. Ketika dilakukan
pengujian menggunakan method equals() maka akan dihasilkan : true – kedua
obyek tersebut memiliki nilai yang sama.
Catatan: Mengapa kita tidak dapat hanya menggunakan literal yang lain ketika
ingin mengubah str2, selain menggunakan new? String literals sudah
dioptimasi dalam Java; jika Anda membuat sebuah string menggunakan literal
dan kemudian menggunakan literal yang lain dengan character yang sama,
Java cukup memberikan Anda obyek String yang pertama kembali. Jadi kedua
String tadi adalah obyek yang sama; Anda harus menghidari langkah anda
untuk membuat dua obyek terpisah.
Menentukan Class dari sebuah Object
Jika kita ingin mengetahui class dari sebuah obyek dapat dilakukan dengan
cara :
1. Method getClass() mengembalikan sebuah obyek Class (dimana Class itu
sendiri merupakan sebuah class) yang memilki sebuah method getName().
Selanjutnya getName() akan mengembalikan sebuah string yang mewakili
nama class. Sebagai contoh,
String name = key.getClass().getName();
2. operator InstanceOf
instanceOf memiliki dua operand: obyek pada sebelah kiri dan nama class
pada sebelah kanan. Pernyataan ini mengembalikan nilai true atau false
tergantung pada benar/salah obyek adalah sebuah instance dari penamaan
class atau beberapa subclass milik class tersebut.
Sebagai contoh,
boolean ex1 = "Texas" instanceof String; // true
Object pt = new Point(10, 10);
boolean ex2 = pt instanceof String; // false
Pengenalan Pemrograman 1 18
SESI07
                            Membuat Class Sendiri
Sebelum menulis class Anda, pertama pertimbangkan dimana Anda akan
menggunakan class dan bagaimana class tersebut akan digunakan.
Pertimbangkan pula nama yang tepat dan tuliskan seluruh informasi atau
properti yang ingin Anda isi pada class. Jangan sampai terlupa untuk
menuliskan secara urut method yang akan Anda gunakan dalam class.
Dalam pendefinisian class, dituliskan :
<modifier> class <name> {
<attributeDeclaration>*
<constructorDeclaration>*
<methodDeclaration>* }
dimana : <modifier> adalah sebuah access modifier, yang dapat
dikombinasikan dengan tipe modifier lain. Pada bagian ini, kita akan membuat
sebuah class yang berisi record dari siswa. Jika kita telah mengidentifikasikan
tujuan dari pembuatan class, maka dapat dilakukan pemberian nama yang
sesuai. Nama yang tepat pada class ini adalah StudentRecord. Untuk
mendefinisikan class, kita tuliskan :
public class StudentRecord
{
//area penulisan kode selanjutnya
}
dimana, Public - Class ini dapat diakses dari luar package
Class - Keyword yang digunakan untuk pembuatan class dalam Java Public
Class ini dapat diakses dari luar package
                         Membuat Class Sendiri
Deklarasi Atribut
Dalam pendeklarasian atribut, kita tuliskan :
<modifier> <type> <name> [= <default_value>];
Langkah selanjutnya adalah mengurutkan atribut yang akan diisikan pada
class. Untuk setiap informasi, urutkan juga tipe data yang yang tepat untuk
digunakan. Contohnya, Anda tidak mungkin menginginkan untuk menggunakan
tipe data integer untuk nama siswa, atau tipe data string pada nilai siswa.
Berikut ini adalah contoh informasi yang akan diisikan pada class
StudentRecord :
name - String
address - String
age - Int
math grade - double
english grade - double
science grade - double
average grade - double
Anda dapat menambahkan informasi lain jika diperlukan.
                           Membuat Class Sendiri
Instance Variable
Jika kita telah menuliskan seluruh atribut yang akan diisikan pada class,
selanjutnya kita akan menuliskannya pada kode. Jika kita menginginkan bahwa
atribut – atribut tersebut adalah unik untuk setiap object (dalam hal ini untuk
setiap siswa), maka kita harus mendeklarasikannya sebagai instance variable :
Sebagai contoh :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
/
/area penulisan kode selanjutnya
}
dimana, private disini menjelaskan bahwa variabel tersebut hanya dapat
diakses oleh class itu sendiri. Object lain tidak dapat menggunakan variabel
tersebut secara langsung. Kita akan membahas tentang kemampuan akses
pada pembahasan selanjutnya.
                             Membuat Class Sendiri
Class Variable atau Static Variables
Disamping instance variable, kita juga dapat mendeklarasikan class variable
atau variabel yang dimiliki class sepenuhnya. Nilai pada variabel ini sama pada
semua object di class yang sama. Anggaplah kita menginginkan jumlah dari
siswa yang dimiliki dari seluruh class, kita dapat mendeklarasikan satu static
variable yang akan menampung nilai tersebut. Kita beri nama variabel tersebut
dengan nama studentCount.
Berikut penulisan static variable :
public class StudentRecord
{
//area deklarasi instance variables
private static int studentCount;
/
/area penulisan kode selanjutnya
}
Kita gunakan keyword : ’static’ untuk mendeklarasikan bahwa variabel tersebut
adalahstatic.
                            Membuat Class Sendiri
Maka keseluruhan kode yang dibuat terlihat sebagai berikut :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
Private static int studentCount;
/
/area penulisan kode selanjutnya
}
                          Membuat Class Sendiri
Deklarasi Methods
Sebelum kita membahas method apa yang akan dipakai pada class, mari kita
perhatikan penulisan method secara umum.
Dalam pendeklarasian method, kita tuliskan :
<modifier> <returnType> <name>(<parameter>*) {
<statement>*
}
dimana,
<modifier> dapat menggunakan beberapa modifier yang berbeda
<returnType> dapat berupa seluruh tipe data, termasuk void
<name> identifier atas class
<parameter> ::= <tipe_parameter> <nama_parameter>[,]
Accessor Methods
Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarang
object dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut
dari class sebagai private. Namun, ada kalanya dimana kita menginginkan
object lain untuk dapat mengakses data private. Dalam hal ini kita gunakan
accessor methods.
                             Membuat Class Sendiri
Accessor Methods digunakan untuk membaca nilai variabel pada class, baik
berupa instance maupun static. Sebuah accessor method umumnya dimulai
dengan penulisan get<namaInstanceVariable>. Method ini juga mempunyai
sebuah return value.
Sebagai contoh, kita ingin menggunakan accessor method untuk dapat
membaca nama,
alamat, nilai bahasa Inggris, Matematika, dan ilmu pasti dari siswa.
Mari kita perhatikan salah satu contoh implementasi accessor method.
public class StudentRecord
{
private String name;
:
:
public String getName(){
return name;
}
}
dimana,public - Menjelaskan bahwa method tersebut dapat diakses dari object
luar class String - Tipe data return value dari method tersebut bertipe String
getName - Nama dari method
() - Menjelaskan bahwa method tidak memiliki parameter apapun
                            Membuat Class Sendiri
Pernyataan berikut, return name;
dalam program kita menandakan akan ada pengembalian nilai dari nama
instance variable ke pemanggilan method. Perhatikan bahwa return type dari
method harus sama dengan tipe data seperti data pada pernyataan return.
Anda akan mendapatkan pesan kesalahan sebagai berikut bila tipe data yang
digunakan tidak sama :
StudentRecord.java:14: incompatible types
found : int
required: java.lang.String
return age;
^
1 error
Contoh lain dari penggunaan accessor method adalah getAverage,
public class StudentRecord
{private String name;
:
:
public double getAverage(){double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
}}
Method getAverage() menghitung rata – rata dari 3 nilai siswa dan
                          Membuat Class Sendiri
Mutator Methods
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang
dapat kita lakukan adalah membuat method yang dapat memberi atau
mengubah nilai variable dalam class, baik itu berupa instance maupun static.
Method semacam ini disebut dengan mutator methods. Sebuah mutator
method umumnya tertulis set<namaInstanceVariabel>.
Mari kita perhatikan salah satu dari implementasi mutator method :
public class StudentRecord
{ private String name;
:
:
public void setName( String temp ){
name = temp;
}}
dimana, public - Menjelaskan bahwa method ini dapat dipanggil object luar
classvoid - Method ini tidak menghasilkan return valuesetName - Nama dari
method(String temp) - Parameter yang akan digunakan pada method
Pernyataan berikut :
name = temp;
mengidentifikasi nilai dari temp sama dengan name dan mengubah data pada
instance variable name. Perlu diingat bahwa mutator methods tidak
menghasilkan return value. Namun berisi beberapa argumen dari program yang
akan digunakan oleh method
                            Membuat Class Sendiri
Multiple Return Statements
Anda dapat mempunyai banyak return values pada sebuah method selama
mereka tidak pada blok program yang sama. Anda juga dapat menggunakan
konstanta disamping variabel sebagai return value. Sebagai contoh, perhatikan
method berikut ini :
public String getNumberInWords( int num ){
String defaultNum = "zero";
if( num == 1 ){
return "one"; //mengembalikan sebuah konstanta
}
else if( num == 2){
return "two"; //mengembalikan sebuah konstanta
}
// mengembalikan sebuah variabel
return defaultNum;
}
                           Membuat Class Sendiri
Static Methods
Kita menggunakan static method untuk mengakses static variable
studentCount.
public class StudentRecord
{
private static int studentCount;
public static int getStudentCount(){
return studentCount;
}
}
dimana,
public - Menjelaskan bahwa method ini dapat diakses dari object luar class
static - Method ini adalah static dan pemanggilannya menggunakan
[namaclass].[namaMethod]. Sebagai contoh :
studentRecord.getStudentCount
Int - Tipe return dari method. Mengindikasikan method tersebut harus
mempunyai return value berupa integer public - Menjelaskan bahwa method ini
dapat diakses dari object luar class getStudentCount - Nama dari method
() - Method ini tidak memiliki parameter apapun Pada deklarasi di atas, method
getStudentCount() akan selalu menghasilkan return value 0 jika kita tidak
mengubah apapun pada kode program untuk mengatur nilainya. Kita akan
membahas pengubahan nilai dari studentCount pada pembahasan constructor.
                             Membuat Class Sendiri
Contoh Kode Program dari class StudentRecord
Berikut ini adalah kode untuk class StudentRecord :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
p
rivate static int studentCount;
/
**
* Menghasilkan nama dari Siswa
*/
public String getName(){
return name;
}
/**
* Mengubah nama siswa
*/
public void setName( String temp ){
name = temp;
}
// area penulisan kode lain
/**
* Menghitung rata – rata nilai Matematik, Bahasa Inggris, * * IlmuPasti
*/
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
}
/**
* Menghasilkan jumlah instance StudentRecord
*/
public static int getStudentCount(){
return studentCount;
}
}
contoh kode dari class yang mengimplementasikan class StudentRecord :
public class StudentRecordExample
{
public static void main( String[] args ){
//membuat 3 object StudentRecord
StudentRecord annaRecord = new StudentRecord();
StudentRecord beahRecord = new StudentRecord();
StudentRecord crisRecord = new StudentRecord();
/
/Memberi nama siswa
annaRecord.setName("Anna");               Output dari program adalah sebagai
beahRecord.setName("Beah");               berikut :
crisRecord.setName("Cris");               Anna
/                                         Student Count = 0
/Menampilkan nama siswa ―Anna‖
System.out.println( annaRecord.getName() );
/
/Menampilkan jumlah siswa
System.out.println("Count="+StudentRecord.getStudentCount()
);
}
}
Reference this
Reference this digunakan untuk mengakses instance variable yang dibiaskan
oleh parameter. Untuk pemahaman lebih lanjut, mari kita perhatikan contoh
pada method setAge. Dimisalkan kita mempunyai kode deklarasi berikut pada
method setAge.
public void setAge( int age ){
age = age; //SALAH!!!
}
Nama parameter pada deklarasi ini adalah age, yang memiliki penamaan yang
sama dengan instance variable age. Parameter age adalah deklarasi terdekat
dari method, sehingga nilai dari parameter tersebut akan digunakan. Maka
pada pernyataan :
age = age;
kita telah menentukan nilai dari parameter age kepada parameter itu sendiri.
Hal ini sangat tidak kita kehendaki pada kode program kita. Untuk menghindari
kesalahan semacam ini, kita gunakan metode referensi this. Untuk
menggunakan tipe referensi ini, kita tuliskan :
this.<namaInstanceVariable>
Sebagai contoh, kita dapat menulis ulang kode hingga tampak sebagai berikut :
public void setAge( int age ){
this.age = age;
}
Method ini akan mereferensikan nilai dari parameter age kepada instance
variable dariobject StudentRecord.
Overloading Methods
Dalam class yang kita buat, kadangkala kita menginginkan untuk membuat
method dengan nama yang sama namun mempunyai fungsi yang berbeda
menurut parameter yang digunakan. Kemampuan ini dimungkinkan dalam
pemrograman Java, dan dikenal sebagai overloading method.
Overloading method mengijinkan sebuah method dengan nama yang sama
namun memiliki parameter yang berbeda sehingga mempunyai implementasi
dan return value yang berbeda pula. Daripada memberikan nama yang
berbeda pada setiap pembuatan method, overloading method dapat digunakan
pada operasi yang sama namun berbeda dalam implementasinya.
Sebagai contoh, pada class StudentRecord kita menginginkan sebuah method
yang akan menampilkan informasi tentang siswa. Namun kita juga
menginginkan operasi penampilan data tersebut menghasilkan output yang
berbeda menurut parameter yang digunakan. Jika pada saat kita memberikan
sebuah parameter berupa string, hasil yang ditampilkan adalah nama, alamat
dan umur dari siswa, sedang pada saat kita memberikan 3 nilai dengan tipe
double, kita menginginkan method tersebut untuk menampilkan nama dan nilai
dari siswa.
Untuk mendapatkan hasil yang sesuai, kita gunakan overloading method di
dalam deklarasi class StudentRecord.
public void print( String temp ){
System.out.println("Name:" + name);
System.out.println("Address:" + address);
System.out.println("Age:" + age);
}
public void print(double eGrade, double mGrade, double sGrade)
System.out.println("Name:" + name);
System.out.println("Math Grade:" + mGrade);
System.out.println("English Grade:" + eGrade);
System.out.println("Science Grade:" + sGrade);
}
Jika kita panggil pada method utama (main) :
public static void main( String[] args )
{
StudentRecord annaRecord = new StudentRecord();
annaRecord.setName("Anna");
annaRecord.setAddress("Philippines");
annaRecord.setAge(15);
annaRecord.setMathGrade(80);
annaRecord.setEnglishGrade(95.5);
annaRecord.setScienceGrade(100);
/
/overloaded methods
annaRecord.print( annaRecord.getName() );
annaRecord.print( annaRecord.getEnglishGrade(),
annaRecord.getMathGrade(),
annaRecord.getScienceGrade());
}
Kita akan mendapatkan output pada panggilan pertama sebagai berikut :
Name:Anna
Address:Philippines
Age:15
Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua :
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
/
/overloaded methods
annaRecord.print( annaRecord.getName() );
annaRecord.print( annaRecord.getEnglishGrade(),
annaRecord.getMathGrade(),
annaRecord.getScienceGrade());
}
Kita akan mendapatkan output pada panggilan pertama sebagai berikut :
Name:Anna
Address:Philippines
Age:15
Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua :
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
Jangan lupakan bahwa overloaded method memiliki property sebagai berikut :
1. Nama yang sama
2. Parameter yang berbeda
3. Nilai kembalian (return) bisa sama ataupun berbeda
Deklarasi Constructor
Telah tersirat pada pembahasan sebelumnya, Constructor sangatlah penting
pada pembentukan sebuah object. Constructor adalah method dimana seluruh
inisialisasi object ditempatkan.
Berikut ini adalah property dari Constructor :
1. Constructor memiliki nama yang sama dengan class
2. Sebuah Constructor mirip dengan method pada umumnya, namun hanya
informasi – informasi berikut yang dapat ditempatkan pada header sebuah
constructor, scope
atau identifikasi pengaksesan (misal: public), nama dari konstuktor dan
parameter.
3. Constructor tidak memiliki return value
4. Constructor tidak dapat dipanggil secara langsung, namun harus dipanggil
denganmenggunakan operator new pada pembentukan sebuah class.
Untuk mendeklarasikan constructor, kita tulis,
<modifier> <className> (<parameter>*) {
<statement>*
}
Default Constructor
Setiap class memiliki default constructor. Sebuah default constructor adalah
constructor yang tidak memiliki parameter apapun. Jika sebuah class tidak
memiliki constructor apapun, maka sebuah default constructor akan dibentuk
secara implisit : Sebagai contoh, pada class StudentRecord, bentuk default
constructor akan terlihat seperti dibawah ini :
public StudentRecord()
{
//area penulisan kode
}
Overloading Constructor
Seperti telah kita bahas sebelumnya, sebuah constructor juga dapat dibentuk
menjadioverloaded. Dapat dilihat pada 4 contoh sebagai berikut :
public StudentRecord(){
//area inisialisasi kode;
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade, double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
Menggunakan Constructor
Untuk menggunakan constructor, kita gunakan kode – kode sebagai berikut :
public static void main( String[] args )
{
//membuat 3 objek
StudentRecord annaRecord=new StudentRecord("Anna");
StudentRecord beahRecord=new StudentRecord("Beah","Philippines");
StudentRecord crisRecord=new StudentRecord(80,90,100);
/
/area penulisan kode selanjtunya
}
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi variabel static
studentCount yang telah dibuat sebelumnya. Tujuan deklarasi studentCount
adalah untuk menghitung jumlah object yang dibentuk pada class
StudentRecord. Jadi, apa yang akan kita lakukan selanjutnya adalah
menambahkan nilai dari studentCount setiap kali setiap pembentukan
object pada class StudentRecord. Lokasi yang tepat untuk memodifikasi dan
menambahkan
nilai studentCount terletak pada constructor-nya, karena selalu dipanggil setiap
kali objek terbentuk. Sebagai contoh :
public StudentRecord(){
//letak kode inisialisasi
studentCount++; //menambah student
}
public StudentRecord(String temp){
this.name = temp;
studentCount++; //menambah student
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
studentCount++; //menambah student
}
public StudentRecord(double mGrade, double eGrade, double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
studentCount++; //menambah student
}
Pemanggilan Constructor Dengan this()
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti Anda
dapat memanggil constructor di dalam constructor lain. Pemanggilan dapat
dilakukan dengan referensi this(). Perhatikan contoh kode sebagai berikut :
1: public StudentRecord(){
2: this("some string");
3:
4: }
5:
6: public StudentRecord(String temp){
7: this.name = temp;
8: }
9:
10: public static void main( String[] args )
11: {
12:
13: StudentRecord annaRecord = new StudentRecord();
14: }
Pemanggilan Constructor Dengan this()
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti Anda
dapat memanggil constructor di dalam constructor lain. Pemanggilan dapat
dilakukan dengan referensi this(). Perhatikan contoh kode sebagai berikut :
1: public StudentRecord(){
2: this("some string");
3:
4: }
5:
6: public StudentRecord(String temp){
7: this.name = temp;
8: }
9:
10: public static void main( String[] args )
11: {
12:
13: StudentRecord annaRecord = new StudentRecord();
14: }
Dari contoh kode diatas, pada saat baris ke 13 dipanggil akan memanggil
constructor dasar pada baris pertama. Pada saat baris kedua dijalankan, baris
tersebut akan menjalankan constructor yang memiliki parameter String pada
baris ke-6.
Beberapa hal yang patut diperhatikan pada penggunaan this() :
1. Harus dituliskan pada baris pertama pada sebuah constructor
2. Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini
dapatdiikuti dengan kode – kode berikutnya yang relevan
Packages
Packages dalam JAVA berarti pengelompokan beberapa class dan interface
dalam satu unit. Fitur ini menyediakan mekanisme untuk mengatur class dan
interface dalam jumlah banyak dan menghindari konflik pada penamaan.
Mengimport Packages
Supaya dapat meggunakan class yang berada diluar package yang sedang
dikerjakan, Anda harus mengimport package dimana class tersebut berada.
Pada dasarnya, seluruh program JAVA mengimport package java.lang.*,
sehingga Anda dapat menggunakan class seperti String dan Integer dalam
program meskipun belum mengimport package sama sekali.
Penulisan import package dapat dilakukan seperti dibawah ini :
import <namaPaket>;
Sebagai contoh, bila Anda ingin menggunakan class Color dalam package awt,
Anda harus menuliskan import package sebagai berikut :
import java.awt.Color;
import java.awt.*;
Baris pertama menyatakan untuk mengimport class Color secara spesifik pada
package, sedangkan baris kedua menyatakan mengimport seluruh class yang
terkandung dalam package java.awt.
Cara lain dalam mengimport package adalah dengan menuliskan referensi
package secara eksplisit. Hal ini dilakukan dengan menggunakan nama
package untuk mendeklarasikan
object sebuah class :
java.awt.Color color;
Membuat Package
Untuk membuat package, dapat dilakukan dengan menuliskan :
package <packageName>;
Anggaplah kita ingin membuat package dimana class StudentRecord akan
ditempatkan bersama dengan class – class yang lain dengan nama package
schoolClasses. Langkah pertama yang harus dilakukan adalah membuat folder
dengan nama schoolClasses. Salin seluruh class yang ingin diletakkan pada
package dalam folder ini. Kemudian tambahkan kode deklarasi package pada
awal file. Sebagai contoh :
package schoolClasses;
public class StudentRecord
{
private String name;
private String address;
private int age;
}
Package juga dapat dibuat secara bersarang. Dalam hal ini Java Interpreter
menghendaki struktur direktori yang mengandung class eksekusi untuk
disesuaikan dengan struktur package.
Pengaturan CLASSPATH
Diasumsikan package schoolClasses terdapat pada direktori C:\. Langkah
selanjutnya adalah mengatur classpath untuk menunjuk direktori tersebut
sehingga pada saat akan dijalankan, JVM dapat mengetahui dimana class
tersebut tersimpan. Sebelum membahas cara mengatur classpath, perhatikan
contoh dibawah yang menandakan kejadian bila kita tidak mengatur classpath.
Asumsikan kita mengkompilasi dan menjalankan class StudentRecord :
C:\schoolClasses>javac StudentRecord.java
C:\schoolClasses>java StudentRecord
Exception in thread "main" java.lang.NoClassDefFoundError: StudentRecord
(wrong name: schoolClasses/StudentRecord)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Kita akan mendapatkan pesan kesalahan berupa NoClassDefFoundError
yang berarti JAVA tidak mengetahui dimana posisi class. Hal tersebut
disebabkan oleh karena classStudentRecord berada pada package dengan
nama studentClasses. Jika kita ingin menjalankan class tersebut, kita harus
memberi informasi pada JAVA bahwa nama lengkap dari class tersebut adalah
schoolClasses.StudentRecord. Kita juga harusmenginformasikan kepada
JVM dimana posisi pencarian package, yang dalam hal ini berada
pada direktori C:\. Untuk melakukan langkah – langkah tersebut, kita harus
mengaturclasspath. Pengaturan classpath pada Windows dilakukan pada
command prompt :
C:\schoolClasses> set classpath=C:\
dimana C:\ adalah direktori dimana kita menempatkan package. Setelah
mengatur classpath, kita dapat menjalankan program di mana saja dengan
mengetikkan :
C:\schoolClasses> java schoolClasses.StudentRecord
Pada UNIX, asumsikan bahwa kita memiliki class - class yang terdapat dalam
direktori /usr/local/myClasses, ketikkan :
export classpath=/usr/local/myClasses
Perhatikan bahwa Anda dapat mengatur classpath dimana saja. Anda juga
dapat mengatur lebih dari satu classpath, kita hanya perlu memisahkannya
dengan menggunakan ;(Windows), dan : (UNIX). Sebagai contoh :
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java
dan untuk sistem UNIX :
export classpath=/usr/local/java:/usr/myClasses
Access Modifiers
Pada saat membuat, mengatur properties dan class methods, kita ingin untuk
mengimplementasikan beberapa macam larangan untuk mengakses data.
Sebagai contoh, jika Anda ingin beberapa atribut hanya dapat diubah hanya
dengan method tertentu, tentu Anda ingin menyembunyikannya dari object lain
pada class. Di JAVA, implementasi tersebut disebut dengan access modifiers.
Terdapat 4 macam access modifiers di JAVA, yaitu : public, private, protected
dan default. 3 tipe akses pertama tertulis secara ekplisit pada kode untuk
mengindikasikan tipe akses, sedangkan yang keempat yang merupakan tipe
default, tidak diperlukan penulisan keywordatas tipe.
Akses Default (Package Accessibility)
Tipe ini mensyaratkan bahwa hanya class dalam package yang sama yang
memiliki hak akses terhadap variabel dan methods dalam class. Tidak terdapat
keyword pada tipe ini. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
int name;
//akses dasar terhadap metode
String getName(){
return name;}}
Pada contoh diatas, variabel nama dan method getName() dapat diakses dari
object lain selama object tersebut berada pada package yang sama dengan
letak dari file StudentRecord.
Akses Public
Tipe ini mengijinkan seluruh class member untuk diakses baik dari dalam dan
luar class. Object apapun yang memiliki interaksi pada class memiliki akses
penuh terhadap member dari tipe ini. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
public int name;
//akses dasar terhadap metode
public String getName(){
return name;
}
}
Dalam contoh ini, variabel name dan method getName() dapat diakses dari
object lain.
Akses Protected
Tipe ini hanya mengijinkan class member untuk diakses oleh method dalam
class tersebut dan elemen – elemen subclass. Sebagai contoh :
public class StudentRecord
{
//akses pada variabel
protected int name;
//akses pada metode
protected String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat
diakses oleh method internal class dan subclass dari class StudentRecord.
Definisi subclass akan dibahas pada bab selanjutnya.
Akses Private
Tipe ini mengijinkan pengaksesan class hanya dapat diakses oleh class
dimana tipe ini dibuat. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
private int name;
//akses dasar terhadap metode
private String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat
diakses oleh method internal class tersebut. Petunjuk Penulisan Program :
Latihan
Entry Buku Alamat
Tugas Anda adalah membuat sebuah class yang memuat data-data pada buku
alamat. Tabel berikut mendefinisikan informasi yang dimiliki oleh buku alamat.




Buat implementasi dari method sebagai berikut :
1. Menyediakan accessor dan mutator method terhadap seluruh atribut
2. Constructor
Buku Alamat
Buat sebuah class buku alamat yang dapat menampung 100 data. Gunakan
class yang telah dibuat pada nomor pertama. Anda harus diimplementasikan
method berikut pada buku
alamat :
1. Memasukkan data
2. Menghapus data
3. Menampilkan seluruh data
4. Update data
SESI08
                  Pewarisan, Polimorfisme, dan Interface
Pewarisan
Dalam Java, semua class, termasuk class yang membangun Java API, adalah
subclassesdari superclass Object. Contoh hirarki class diperlihatkan di bawah
ini.Beberapa class di atas class utama dalam hirarki class dikenal sebagai
superclass.Sementara beberapa class di bawah class pokok dalam hirarki lass
dikenal sebagai subclass dari class tersebut.




Pewarisan adalah keuntungan besar dalam pemrograman berbasis object
karena suatu sifat atau method didefinisikan dalam superclass, sifat ini secara
otomatis diwariskan dari semua subclasses. Jadi, Anda dapat menuliskan kode
method hanya sekali dan mereka dapat digunakan oleh semua subclass.
Subclass hanya perlu mengimplementasikan perbedaannya sendiri dan
induknya.
                  Pewarisan, Polimorfisme, dan Interface
Mendefinisikan Superclass dan Subclass
Untuk memperoleh suatu class, kita menggunakan kata kunci extend. Untuk
mengilustrasikan ini, kita akan membuat contoh class induk. Dimisalkan kita
mempunyai class induk yang dinamakan Person.
public class Person
{
protected String name;
protected String address;
/**
* Default constructor
*/
public Person(){
System.out.println(―Inside Person:Constructor‖);
name = "";
address = "";
}
/**
*Constructor dengan dua parameter
*/
public Person( String name, String address ){
this.name = name;
this.address = address;
}
/**
* Method accessor
*/
public String getName(){
return name;
}
public String getAddress(){
return address;
}
public void setName( String name ){
this.name = name;
}
public void setAddress( String add ){
this.address = add;
}
}
Perhatikan bahwa atribut name dan address dideklarasikan sebagai protected.
Alasannyakita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa
diakses oleh subclassesdari superclassess. Jika kita mendeklarasikannya
sebagai private, subclasses tidak dapat menggunakannya. Catatan bahwa
semua properti dari superclass yang dideklarasikan sebagai public, protected
dan default dapat diakses oleh subclasses-nya. Sekarang, kita ingin membuat
class lain bernama Student. Karena Student juga sebagai Person, kita
putuskan hanya meng-extend class Person, sehingga kita dapat mewariskan
semua properti dan method dari setiap class Person yang ada. Untuk
melakukan ini, kita tulis,
public class Student extends Person
{
public Student(){
System.out.println(―Inside Student:Constructor‖);
//beberapa kode di sini
}
// beberapa kode di sini
}
Ketika object Student di-instantiate, default constructor dari superclass secara
mutlak meminta untuk melakukan inisialisasi yang seharusnya. Setelah itu,
pernyataan di dalam subclass dieksekusi. Untuk mengilustrasikannya,
perhatikan kode berikut,
public static void main( String[] args ){
Student anna = new Student();
}
Dalam kode ini, kita membuat sebuah object dari class Student. Keluaran dari
program adalah,
Inside Person:Constructor
Inside Student:Constructor
Kata Kunci Super
Subclass juga dapat memanggil constructor secara eksplisit dari superclass
terdekat. Hal ini dilakukan dengan pemanggil construktor super. Pemanggil
constructor super dalam constructor dari subclass akan menghasilkan eksekusi
dari superclass constructor yang bersangkutan, berdasar dari argumen
sebelumnya.Sebagai contoh, pada contoh class sebelumnya. Person dan
Student, kita tunjukkan contoh dari pemanggil constructor super. Diberikan
kode berikut untuk Student,
public Student(){
super( "SomeName", "SomeAddress" );
System.out.println("Inside Student:Constructor");
}
Kode ini memanggil constructor kedua dari superclass terdekat (yaitu Person)
dan mengeksekusinya. Contoh kode lain ditunjukkan sebagai berikut,
public Student(){
super();
System.out.println("Inside Student:Constructor");
}
Kode ini memanggil default constructor dari superclass terdekat (yaitu Person)
dan mengeksekusinya.
Ada beberapa hal yang harus diingat ketika menggunakan pemanggil
  constuktor super:
1.Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM
  constructor.
2. Pemanggil super() hanya dapat digunakan dalam definisi constructor.
3. Termasuk constructor this() dan pemanggil super() TIDAK BOLEH TERJADI
  DALAM constructor YANG SAMA.
  Pemakaian lain dari super adalah untuk menunjuk anggota dari
  superclass(seperti reference this). Sebagai contoh,
public Student()
{
super.name = “somename”;
super.address = “some address”;
}
Overriding Method
  Untuk beberapa pertimbangan, terkadang class asal perlu mempunyai
  implementasiberbeda dari method yang khusus dari superclass tersebut.
  Oleh karena itulah, method overriding digunakan. Subclass dapat
  mengesampingkan method yang didefinisikan dalam superclass dengan
  menyediakan implementasi baru dari method tersebut.
Misalnya kita mempunyai implementasi berikut untuk method getName dalam
  superclass Person,
public class Person
{
:
:
public String getName(){
System.out.println("Parent: getName");
return name;
}
:
}
Untuk override, method getName dalam subclass Student, kita tulis,
public class Student extends Person
{
:
:
public String getName(){
System.out.println("Student: getName");
return name;
}
:}
Jadi, ketika kita meminta method getName dari object class Student,
   methodoverriddeakan dipanggil, keluarannya akan menjadi,Student: getName
Method final dan class final
Dalam Java, juga memungkinkan untuk mendeklarasikan class-class yang
  tidak lama menjadi subclass. Class ini dinamakan class final. Untuk
  mendeklarasikan class untuk menjadi final kita hanya menambahkan kata
  kunci final dalam deklarasi class. Sebagai contoh, jika kita ingin class Person
  untuk dideklarasikan final, kita tulis,
public final class Person
{
//area kode
}
Beberapa class dalam Java API dideklarasikan secara final untuk memastikan
  sifatnya tidak dapat di-override. Contoh-contoh dari class ini adalah Integer,
  Double, dan String.
Ini memungkinkan dalam Java membuat method yang tidak dapat di-override.
  Method inidapat kita panggil method final. Untuk mendeklarasikan method
  untuk menjadi final, kita tambahkan kata kunci final ke dalam deklarasi
  method. Contohnya, jika kita ingin method getName dalam class Person
  untuk dideklarasikan final, kita tulis,
public final String getName(){
return name;
}
Method static juga secara otomatis final. Ini artinya Anda tidak dapat
  membuatnyaoverride.
Polimorfisme
Sekarang, class induk Person dan subclass Student dari contoh sebelumnya,
 kitatambahkan subclass lain dari Person yaitu Employee. Di bawah ini adalah
 hierarkinya,




Dalam Java, kita dapat membuat referensi yang merupakan tipe dari
superclass ke sebuah object dari subclass tersebut. Sebagai contohnya,
public static main( String[] args )
{
Person ref;
Student studentObject = new Student();
Employee employeeObject = new Employee();
ref = studentObject; //Person menunjuk kepada
// object Student
//beberapa kode di sini
}
Sekarang dimisalkan kita punya method getName dalam superclass Person
  kita, dan kita override method ini dalam kedua subclasses Student dan
  Employee,
public class Person
{
public String getName(){
System.out.println(―Person Name:‖ + name);
return name;
}
}
public class Student extends Person
{
public String getName(){
System.out.println(―Student Name:‖ + name);
return name;
}
}
public class Employee extends Person
{
public String getName(){
System.out.println(―Employee Name:‖ + name);
return name;
}
Kembali ke method utama kita, ketika kita mencoba memanggil method
   getName dari reference Person ref, method getName dari object Student
   akan dipanggil. Sekarang, jika kita berikan ref ke object Employee, method
   getName dari Employee akan dipanggil.
public static main( String[] args )
{
Person ref;
Student studentObject = new Student();
Employee employeeObject = new Employee();
ref = studentObject; //Person menunjuk kepada
// object Student
String temp = ref.getName(); //getName dari Student
//class dipanggil
System.out.println( temp );
ref = employeeObject; //Person menunjuk kepada
// object Employee
String temp = ref.getName(); //getName dari Employee
//class dipanggil
System.out.println( temp ); }
Kemampuan dari reference untuk mengubah sifat menurut object apa yang
   dijadikan acuan dinamakan polimorfisme. Polimorfisme menyediakan
   multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object
   dari superclass tunggal, secara otomatis menunjuk method yang tepat untuk
menggunakannya ke particular object berdasar subclass yang termasuk di
  dalamnya.
Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita
  mencoba melalui reference ke method. Misalkan kita punya method static
  printInformation yang mengakibatkan object Person sebagai reference, kita
  dapat me-reference dari tipe Employee dan tipe Student ke method ini
  selama itu masih subclass dari class Person.
public static main( String[] args )
{
Student studentObject = new Student();
Employee employeeObject = new Employee();
printInformation( studentObject );
printInformation( employeeObject );
}
public static printInformation( Person p ){
....
}
Abstract Class
Misalnya kita ingin membuat superclass yang mempunyai method tertentu yang
  berisiimplementasi, dan juga beberapa method yang akan di-overridden oleh
  subclasses nya. Sebagai contoh, kita akan membuat superclass bernama
  LivingThing. class ini mempunyai method tertentu seperti breath, eat, sleep,
  dan walk. Akan tetapi, ada beberapa method di dalam superclass yang
  sifatnya tidak dapat digeneralisasi.
Kita ambil contoh, method walk.
Tidak semua kehidupan berjalan(walk) dalam cara yang sama. Ambil manusia
  sebagai misal, kita manusia berjalan dengan dua kaki, dimana kehidupan
  lainnya seperti anjing berjalan dengan empat kaki. Akan tetapi, beberapa ciri
  umum dalam kehidupan sudah biasa, itulah kenapa kita inginkan membuat
  superclass umum dalam hal ini.




Kita dapat membuat superclass yang mempunyai beberapa method dengan
implementasi sedangkan yang lain tidak. Class jenis ini yang disebut dengan
class abstract. Sebuah class abstract adalah class yang tidak dapat di-
instantiate. Seringkali muncul di atas hirarki class pemrograman berbasis
object, dan mendefinisikan keseluruhan aksi yang mungkin pada object dari
seluruh subclasses dalam class. Method ini dalam class abstract yang tidak
mempunyai implementasi dinamakan method abstract. Untuk membuat
method abstract, tinggal menulis deklarasi method tanpa tubuh
class dan digunakan menggunakan kata kunci abstract. Contohnya,
public abstract void someMethod();
Sekarang mari membuat contoh class abstract.
public abstract class LivingThing
{
public void breath(){
System.out.println("Living Thing breathing...");
}
public void eat(){
System.out.println("Living Thing eating...");
}
/**
* abstract method walk
* Kita ingin method ini di-overridden oleh subclasses
*/
public abstract void walk();
}
Ketika class meng-extend class abstract LivingThing, dibutuhkan untuk override
   method abstract walk(), atau lainnya, juga subclass akan menjadi class
   abstract, oleh karena itu tidak dapat di-instantiate. Contohnya,
public class Human extends LivingThing
{
public void walk(){
System.out.println("Human walks...");
}}
Jika class Human tidak dapat overridde method walk, kita akan menemui pesan
  error berikut ini, Human.java:1: Human is not abstract and does not override
abstract method walk() in LivingThing
public class Human extends LivingThing
^
1 error
Interface
Interface adalah jenis khusus dari blok yang hanya berisi method
  signature(atau constant). Interface mendefinisikan sebuah(signature) dari
  sebuah kumpulan method tanpa tubuh.Interface mendefinisikan sebuah cara
  standar dan umum dalam menetapkan sifat-sifat dari class-class.
Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam
  hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan
  catatan bahwainterface-interface juga menunjukkan polimorfisme,
  dikarenakan program dapat memanggil method interface dan versi yang tepat
  dari method yang akan dieksekusi tergantung daritipe object yang melewati
  pemanggil method interface.
Kenapa Kita Memakai Interface?
Kita akan menggunakan interface jika kita ingin class yang tidak berhubungan
mengimplementasikan method yang sama. Melalui interface-interface, kita
  dapatmenangkap kemiripan diantara class yang tidak berhubungan tanpa
  membuatnya seolaholah class yang berhubungan. Mari kita ambil contoh
  class Line dimana berisi method yang menghitung panjang dari garis dan
  membandingkan object Line ke object dari class yang sama. Sekarang,
  misalkan kita punya class yang lain yaitu MyInteger dimana berisi method
  yang membandingkan object MyInteger ke object dari class yang sama.
  Seperti yang kita lihat disini, kedua class-class mempunyai method yang mirip
  dimana membandingkan mereka dari object lain dalam tipe yang sama, tetapi
  mereka tidak berhubungan sama sekali. Supaya dapat menjalankan cara
  untuk memastikan bahwa dua class-class ini mengimplementasikan beberapa
  method dengan tanda yang sama, kita dapat menggunakan sebuah interface
untuk hal ini. Kita dapat membuat sebuah class interface, katakanlah interface
  Relation dimana mempunyai deklarasi method pembanding. Relasi interface
  dapat dideklarasikan sebagai,
public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Alasan lain dalam menggunakan interface pemrograman object adalah untuk
  menyatakan sebuah interface pemrograman object tanpa menyatakan
  classnya. Seperti yang dapat kita lihat nanti dalam bagian Interface vs class,
  kita dapat benar-benar menggunakan interface sebagai tipe data. Pada
  akhirnya, kita perlu menggunakan interface untuk pewarisan model jamak
  dimana menyediakan class untuk mempunyai lebih dari satu superclass.
  Pewarisan jamak tidak ditunjukkan di Java, tetapi ditunjukkan di bahasa
  berorientasi object lain seperti C++.
Interface vs. Class Abstract
Berikut ini adalah perbedaan utama antara sebuah interface dan sebuah class
  abstract: method interface tidak punya tubuh, sebuah interface hanya dapat
  mendefinisikan konstanta dan interface tidak langsung mewariskan hubungan
  dengan class istimewa lainnya, mereka didefinisikan secara independent.
Interface vs. Class
Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka
  berdua. Ini artinya bahwa sebuah interface dapat digunakan dalam tempat-
  tempat dimana sebuah class dapat digunakan. Sebagai contoh, diberikan
  class Person dan interface PersonInterface, berikut deklarasi yang benar:
PersonInterface pi = new Person();
Person pc = new Person();
Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface.
Contohnya:
PersonInterface pi = new PersonInterface(); //COMPILE
//ERROR!!!
Ciri umum lain adalah baik interface maupun class dapat mendefinisikan
  method. Bagaimanapun, sebuah interface tidak punya sebuah kode
  implementasi sedangkan class memiliki salah satunya.
 Membuat Interface
Untuk membuat interface, kita tulis,
public interface [InterfaceName]
{
//beberapa method tanpa isi
}
Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan
  hubungan antara
dua object menurut urutan asli dari object.
public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Sekarang, penggunaan interface, kita gunakan kata kunci implements.
   Contohnya,
/**
* Class ini mendefinisikan segmen garis
*/
public class Line implements Relation
{
private double x1;
private double x2;
private double y1;
private double y2;
public Line(double x1, double x2, double y1, double y2){
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
public double getLength(){
double length = Math.sqrt((x2-x1)*(x2-x1) +
(y2-y1)* (y2-y1));
return length;
}
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen > bLen);
}
public boolean isLess( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen < bLen);
}
public boolean isEqual( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen == bLen);
}
}
Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu
  pastikan bahwa Anda mengimplementasikan semua method dari interface,
  jika tidak, Anda akan menemukan kesalahan ini,
Line.java:4: Line is not abstract and does not override abstract
method isGreater(java.lang.Object,java.lang.Object) in
Relation
public class Line implements Relation
^
1 error
Hubungan dari Interface ke Class
Seperti yang telah kita lihat dalam bagian sebelumnya, class dapat
  mengimplementasikansebuah interface selama kode implementasi untuk
  semua method yang didefinisikan dalam interface tersedia.
Hal lain yang perlu dicatat tentang hubungan antara interface ke class-class
  yaitu, class hanya dapat mengEXTEND SATU superclass, tetapi dapat
  mengIMPLEMENTASIkan BANYAK interface. Sebuah contoh dari sebuah
  class yang mengimplementasikan interface adalah,
public class Person implements PersonInterface,
LivingThing,
WhateverInterface {
//beberapa kode di sini
}
Contoh lain dari class yang meng-extend satu superclass dan
  mengimplementasikan sebuah interface adalah,
public class ComputerScienceStudent extends Student
implements PersonInterface,
LivingThing {
//beberapa kode di sini
}
Catatan bahwa sebuah interface bukan bagian dari hirarki pewarisan class.
  Class yang tidak berhubungan dapat mengimplementasikan interface yang
  sama.
Pewarisan Antar Interface
Interface bukan bagian dari hirarki class. Bagaimanapun, interface dapat
  mempunyai hubungan pewarisan antara mereka sendiri. Contohnya, misal
  kita punya dua interface StudentInterface dan PersonInterface. Jika
  StudentInterface meng-extend PersonInterface, maka ia akan mewariskan
  semua deklarasi method dalam PersonInterface.
public interface PersonInterface {
...
}
public interface StudentInterface extends PersonInterface {
...
}
SESI09
                 Dasar Exception Handling
Apa itu Exception?
Exception adalah sebuah peristiwa yang menjalankan alur proses normal pada
program. Peristiwa ini biasanya berupa kesalahan(error) dari beberapa bentuk.
Ini disebabkan program kita berakhir tidak normal. Beberapa contoh dari
exception yang Anda mungkin jumpai pada latihan-latihan sebelumnya
adalah: exception ArrayIndexOutOfBounds, yang terjadi jika kita mencoba
mengakses elemen array yang tidak ada, atau NumberFormatException, yang
terjadi ketika kita mencoba melalui parameter bukan angka dalam method
Integer.parseInt.
Menangani Exception
Untuk menangani exception dalam Java, kita gunakan blok try-catch-finally.
Apa yang kita lakukan dalam program kita adalah kita menempatkan
pernyataan yang mungkin menghasilkan exception dalam blok ini.
Bentuk umum dari blok try-catch-finally adalah,
                Dasar Exception Handling
try{
//tulis pernyataan yang dapat mengakibatkan exception
//dalam blok ini
}
catch( <exceptionType1> <varName1> ){
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
...
catch( <exceptionTypen> <varNamen> ){
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
finally{
//tambahkan kode terakhir di sini
}
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan
ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi.
                  Dasar Exception Handling
Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:
 Notasi blok bersifat perintah Setiap blok try, terdapat satu atau lebih blok
catch, tetapi hanya satu blok finally. Blok catch dan blok finally harus selalu
muncul dalam konjungsi dengan blok try, dan diatas urutan Blok try harus
diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau keduanya.
Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari
blok catch harus membawa satu argumen, dimana exception pada blok
tersebut akan ditangani. Exception harus menjadi class pelempar atau satu dari
subclassesnya.
Dasar Exception Handling
                 Dasar Exception Handling
Marilah mengambil contoh kode yang mencetak argumen kedua ketika kita
mencoba menjalankan kode menggunakan argumen command-line.
Perkirakan, tidak ada pengecekan dalam kode Anda untuk angka dari
argumen dan kita hanya mengakses argumen kedua args[1] segera, kita
akan mendapatkan exception berikut.
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 1
at ExceptionExample.main(ExceptionExample.java:5)
Untuk mencegah kejadian ini, kita dapat menempatkan kode ke dalam blok
try-catch. Blok finally hanya sebagai pilihan lain saja. Sebagai contoh, kita
tidak akan menggunakan blok finally.
                 Dasar Exception Handling
Untuk mencegah kejadian ini, kita dapat menempatkan kode ke dalam blok
try-catch. Blok finallyhanya sebagai pilihan lain saja. Sebagai contoh, kita
tidak akan menggunakan blok finally.
public class ExceptionExample
{
public static void main( String[] args ){
try{
System.out.println( args[1] );
}catch( ArrayIndexOutOfBoundsException exp ){
System.out.println("Exception caught!");
}
}
}
Jadi kita akan menjalankan program lagi tanpa argumen, keluarannya akan
menjadi,
Exception caught!
                Dasar Exception Handling
Latihan
Menangkap Exception 1
Diberikan kode berikut:
public class TestExceptions{
public static void main( String[] args ){
for( int i=0; true; i++ ){
System.out.println("args["+i+"]="+
args[i]);
}
}
}
Compile dan jalankan program TestExceptions. Keluarannya akan tampak
seperti ini:
javac TestExceptions one two three
args[0]=one
args[1]=two
args[2]=three
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 3
at TestExceptions.main(1.java:4)
                Dasar Exception Handling
Ubah program TestExceptions untuk menangani exception, keluaran program
setelah ditangkap
exception-nya akan seperti ini:
javac TestExceptions one two three
args[0]=one
args[1]=two
args[2]=three
Exception caught:
java.lang.ArrayIndexOutOfBoundsException: 3
Menangkap Exception 2
Melakukan percobaan pada beberapa program yang telah Anda tulis adalah
hal yang baik sebelum
menghadapi exception. Karena pada program di atas Anda tidak menangkap
exception, maka
eksekusi dengan mudahnya berhenti mengeksekusi program Anda. Kembali
kepada program
diatas dan gunakan penanganan exception.
SESI10
                         Desain Berorientasi object
Desain berorientasi object adalah sebuah teknik yang memusatkan desain
pada object dan class berdasarkan pada skenario dunia nyata. Hal ini
menegaskan keadaan(state), behaviour dan interaksi dari object. Selain itu juga
menyediakan manfaat akan kebebasan pengembangan, meningkatkan
kualitas, mempermudah pemeliharaan, mempertinggi kemampuan dalam
modifikasi dan meningkatkan penggunaan kembali software.
Class
Class mengizinkan Anda dalam mendeklarasikan tipe data baru. Ia dijalankan
sebagai blueprint, dimana model dari object yang Anda buat berdasarkan pada
tipe data baru ini.
Object
Sebuah object adalah sebuah entiti yang memiliki keadaan, behaviour dan
identitas yang yang tugasnya dirumuskan dalam suatu lingkup masalah dengan
baik. Inilah instance sebenarnya dari sebuah class. Ini juga dikenal sebagai
instance. Instance dibuat sewaktu Anda meng-instantiate class menggunakan
kata kunci new. Dalam sistem registrasi siswa, contoh dari sebuah object
yaitu entiti Student.
Atribut
Atribut menunjuk pada elemen data dari sebuah object. Atribut menyimpan
informasi tentang object. Dikenal juga sebagai member data, variabel instance,
properti atau sebuah field data. Kembali lagi ke contoh sistem registrasi siswa,
atribut dari sebuah siswa adalah nomor siswa.
                         Desain Berorientasi object
Method
Sebuah method menjelaskan behaviour dari sebuah object. Method juga
dikenal sebagai fungsi atau prosedur. Sebagai contoh, method yang mungkin
tersedia untuk entiti siswa adalah method register.
Constructor
Constructor adalah sebuah tipe khusus dari method yang digunakan untuk
membuat dan menginisialisasi sebuah object baru. Ingat bahwa constructor
bukan member (yaitu atribut, method atau inner class dari sebuah object).
Package
Package menunjuk pada pengelompokkan class dan/atau subpackages.
Strukturnya dapat disamakan dengan direktorinya.
Enkapsulasi
Enkapsulasi menunjuk pada prinsip dari menyembunyikan desain atau
mengimplementasikan informasi yang tidak sesuai pada object yang ada.
Abstraksi
Sementara enkapsulasi menyembunyikan detail, abstraksi mengabaikan aspek
dari subyek yang tidak sesuai dengan tujuan yang ada supaya lebih banyak
mengkonsentrasikan yang ada.
Pewarisan
Pewarisan adalah hubungan antara class dimana dalam satu class ada
superclass atau class induk dari class yang lain. Pewarisan menunjuk pada
properti dan behaviour yang diterima dari nenek moyang dari class. Ini dikenal
juga sebagai hubungan ―is-a‖. Perhatikan pada hirarki berikut.
Desain Berorientasi object
                       Desain Berorientasi object
Polimorfisme
Polimorfisme adalah kemampuan dari sebuah object untuk membolehkan
mengambil beberapa bentuk yang berbeda. Secara harfiah, ―poli‖ berarti
banyak sementara ―morph‖ berarti bentuk. Menunjuk pada contoh sebelumnya
pada pewarisan, kita lihat bahwa object SuperHero dapat juga
menjadi object FlyingSuperHero atau object UnderwaterSuperHero.
Interface
Sebuah interface adalah sebuah contract dalam bentuk kumpulan method dan
deklarasi konstanta. Ketika sebuah class implements sebuah interface, ini
mengimplementasikan semua method yang dideklarasikan dalam interface.
Struktur Program Java
Pada bagian ini meringkaskan syntax dasar yang digunakan dalam pembuatan
aplikasi Java. Mendeklarasikan class Java
<classDeclaration> ::=
<modifier> class <name> {
<attributeDeclaration>*
<constructorDeclaration>*
<methodDeclaration>*
}
dimana <modifier> adalah sebuah access modifier, yang mana boleh
dikombinasikan dengan tipe yang lain dari modifier.
                            Desain Berorientasi object
Contoh berikut ini mendeklarasikan blueprint SuperHero.
Class SuperHero {
String superPowers[];
void setSuperPowers(String superPowers[]) {
this.superPowers = superPowers;
}
void printSuperPowers() {
for (int i = 0; i < superPowers.length; i++) {
System.out.println(superPowers[i]);
}
}
}
Mendeklarasikan Atribut
<attributeDeclaration> ::=
<modifier> <type> <name> [= <default_value>];
<type> ::=
byte | short | int | long | char | float | double | boolean
| <class>
Petunjuk Penulisan Program:
[] = Menunjukkan bahwa bagian ini hanya sebagai pilihan.
                       Desain Berorientasi object
Inilah contohnya.
public class AttributeDemo {
private String studNum;
public boolean graduating = false;
protected float unitsTaken = 0.0f;
String college;
}
Mendeklarasikan Method
<methodDeclaration> ::=
<modifier> <returnType> <name>(<parameter>*) {
<statement>*
}
<parameter> ::=
<parameter_type> <parameter_name>[,]
                         Desain Berorientasi object
Sebagai contoh:
class MethodDemo {
int data;
int getData() {
return data;
}
void setData(int data) {
this.data = data;
}
void setMaxData(int data1, int data2) {
data = (data1>data2)? data1 : data2;
}
}
Mendeklarasikan sebuah Constructor
<constructorDeclaration> ::=
<modifier> <className> (<parameter>*) {
<statement>*
}
Jika tidak ada constructor yang disediakan secara jelas, constructor default
secara otomatis membuatkannya untuk Anda. Constructor default tidak
membawa argumen dan tidak berisi pernyataan pada tubuh class.
Perhatikan contoh berikut.
class ConstructorDemo {
private int data;
public ConstructorDemo() {
data = 100;
}
ConstructorDemo(int data) {
this.data = data;
}
}
Meng-instantiate sebuah class
Untuk meng-instantiate sebuah class, dengan sederhana kita gunakan kata
kunci new diikuti dengan pemanggilan sebuah constructor. Mari lihat langsung
ke contohnya.
class ConstructObj {
int data;
ConstructObj() {
/* menginisialisasi data */ }
public static void main(String args[]) {
ConstructObj obj = new ConstructObj(); //di-instantiate
}
}
Mengakses Anggota object
Untuk mengakses anggota dari sebuah object, kita gunakan notasi ―dot‖.
Penggunaanya seperti
berikut:
<object>.<member>
Contoh selanjutnya berdasar pada sebelumnya dengan pernyataan tambahan
untuk mengakses anggota dan method tambahan.
class ConstructObj {
int data;
ConstructObj() {
/* inisialisasi data */
}
void setData(int data) {
this.data = data;
}
public static void main(String args[]) {
ConstructObj obj = new ConstructObj(); //instantiation
obj.setData = 10; //access setData()
System.out.println(obj.data); //access data
}
}
Package
Untuk menunjukkan bahwa file asal termasuk package khusus, kita gunakan
syntax berikut:
<packageDeclaration> ::=
package <packageName>;
Untuk mengimpor package lain, kita gunakan syntax berikut:
<importDeclaration> ::=
import <packageName.elementAccessed>;
Dengan ini, source code Anda harus memiliki format berikut:
[<packageDeclaration>]
<importDeclaration>*
<classDeclaration>+
Sebagai contoh.
package registration.reports;
import registration.processing.*;
import java.util.List;
import java.lang.*; //imported by default
class MyClass {
/* rincian dari MyClass */
Acces Modifier
Tabel berikut meringkas acces modifier dalam Java.
Enkapsulasi
Menyembunyikan elemen dari penggunaan sebuah class dapat dilakukan
dengan pembuatan anggota yang ingin Anda sembunyikan secara private.
Contoh berikut menyembunyikan field secret. Catatan bahwa field ini tidak
langsung diakses oleh program lain menggunakan method getter dan setter.
class Encapsulation {
private int secret; //field tersembunyi
public boolean setSecret(int secret) {
if (secret < 1 || secret > 100) {
return false;
}
this.secret = secret;
return true;
}
public getSecret() {
return secret;
}
}
Pewarisan
Untuk membuat class anak atau subclass berdasarkan class yang telah ada,
kita gunakan kata kunci extend dalam mendeklarasikan class. Sebuah class
hanya dapat meng-extend satu class induk. Sebagai contoh, class Point di
bawah ini adalah superclass dari class ColoredPoint.
import java.awt.*;
class Point {
int x;
int y;
}
class ColoredPoint extends Point {
Color color;
}
Method Overriding
Method subclass override terhadap method superclass ketika subclass
mendeklarasikan method yang signaturenya serupa ke method dalam
superclass. Signature dari method hanyalah informasi yang ditemukan dalam
definisi method bagian atas. Signature mengikutkan tipe return, nama dan
daftar parameter method tetapi itu tidak termasuk acces modifier dan tipe yang
lain dari kata kunci seperti final dan static. Inilah perbedaan dari method
overloading. Method overloading secara singkat didiskusikan dalam sub bagian
pada kata kunci this.
class Superclass {
void display(int n) {
System.out.println("super: " + n);
}
}
class Subclass extends Superclass {
void display(int k) { //method overriding
System.out.println("sub: " + k);
}
}
class OverrideDemo {
public static void main(String args[]) {
Subclass SubObj = new Subclass();
Superclass SuperObj = SubObj;
SubObj.display(3);
((Superclass)SubObj).display(4);
}
}
Ini akan menghasilkan keluaran sebagai berikut.
sub: 3
sub: 4
Pemanggilan method ditentukan oleh tipe data sebenarnya dari object yang
diminta method. Acces modifier untuk method yang dibutuhkan tidak harus
sama. Bagaimanapun, acces modifier dari method overridding mengharuskan
salah satunya punya acces modifier yang sama seperti itu dari method
overridden atau acces modifier yang kurang dibatasi. Perhatikan contoh
selanjutnya. Periksa yang mana dari method overridding berikut akan
menyebabkan waktu meng-compile akan menyebabkan error.
class Superclass {
void overriddenMethod() {
}
}
class Subclass1 extends Superclass {
public void overriddenMethod() {
}
}
class Subclass2 extends Superclass {
void overriddenMethod() {
}
}
class Subclass3 extends Superclass {
protected void overriddenMethod() {
}
}
class Subclass4 extends Superclass {
private void overriddenMethod() {
}
}
Class Abstract dan Method
Bentuk umum dari sebuah method abstract adalah sebagai berikut:
abstract <modifier> <returnType> <name>(<parameter>*);
Sebuah class yang berisi method abstract harus dideklarasikan sebagai
sebuah class abstract.
abstract <modifier> <returnType> <name>(<parameter>*);abstract class
<name> {
/* constructors, fields and methods */
}
Kata kunci tidak dapat digunakan pada constructor atau method static. Ini juga
penting untuk diingat bahwa class abstract tidak dapat di-instantiate.
Class yang meng-extends sebuah class abstract harus mengimplementasikan
semua method abstract. Jika tidak subclass sendiri dapat dideklarasikan
sebagai abstract.
Sebagai contoh:
abstract class SuperHero {
String superPowers[];
void setSuperPowers(String superPowers[]) {
this.superPowers = superPowers;
}
void printSuperPowers() {
for (int i = 0; i < superPowers.length; i++) {
System.out.println(superPowers[i]);
}
}
abstract void displayPower();
}
class UnderwaterSuperHero extends SuperHero {
void displayPower() {
System.out.println("Communicate with sea creatures...");
System.out.println("Fast swimming ability...");
}
}
class FlyingSuperHero extends SuperHero {
void displayPower() {
System.out.println("Fly...");
}
}
Interface
Mendeklarasikan sebuah interface pada dasarnya mendeklarasikan sebuah
class tetapi sebagaipenggantinya menggunakan kata kunci class, kata kunci
interface digunakan. Berikut syntax-nya.
<interfaceDeclaration> ::=
<modifier> interface <name> {
<attributeDeclaration>*
[<modifier> <returnType> <name>(<parameter>*);]*
}
Anggotanya adalah public ketika interface dideklarasikan public.
Class mengimplementasikan sebuah interface yang telah ada dengan
menggunakan kata kunci implements. Class ini dibuat untuk
mengimplementasikan semua method interface. Sebuah class
boleh mengimplementasikan lebih dari satu interface. Contoh berikut
menunjukkan bagaimana mendeklarasikan dan menggunakan sebuah
interface.
interface MyInterface {
void iMethod();
}
class MyClass1 implements MyInterface {
public void iMethod() {
System.out.println("Interface method.");
}
void myMethod() {
System.out.println("Another method.");
}
}
class MyClass2 implements MyInterface {
public void iMethod() {
System.out.println("Another implementation.");
}
}
class InterfaceDemo {
public static void main(String args[]) {
MyClass1 mc1 = new MyClass1();
MyClass2 mc2 = new MyClass2();
mc1.iMethod();
mc1.myMethod(); mc2.iMethod(); } }
Kata kunci this
Kata kunci this dapat digunakan untuk beberapa alasan berikut:
1. Adanya ambigu pada atribut lokal dari variabel lokal
2. Menunjuk pada object yang meminta method non-static
3. Menunjuk pada constructor lain.
Sebagai contoh pada maksud pertama, perhatikan kode berikut dimana
variabel data disediakan
sebagai sebuah atribut dan parameter lokal pada saat yang sama.
class ThisDemo1 {
int data;
void method(int data) {
this.data = data;
/* this.data menunjuk ke atribut
sementara data menunjuk ke variabel lokal */
}
}
Contoh berikut menunjukkan bagaimana object this secara mutlak menunjuk
ketika anggota non.static dipanggil.
class ThisDemo2 {
int data;
void method() {
System.out.println(data); //this.data
}
void method2() {
method(); //this.method();
}
Sebelum melihat ke contoh yang lain, mari pertama meninjau pengertian
method overloading. Constructor seperti juga method dapat juga menjadi
overload. Method yang berbeda dalam class dapat memberi nama yang sama
asalkan list parameter juga berbeda. Method overloaded harus berbeda dalam
nomor dan/atau tipe dari parameternya. Contoh selanjutnya memiliki
constructor overloaded dan referensi this yang dapat digunakan untuk
menunjuk versi lain dari constructor.
class ThisDemo3 {
int data;
ThisDemo3() {
this(100);
}
ThisDemo3(int data) {
this.data = data; } }
Kata kunci super
Penggunaan kata kunci super berhubungan dengan pewarisan. Super
digunakan untuk meminta constructor superclass. Super juga dapat digunakan
seperti kata kunci this untuk menunjuk pada anggota dari superclass. Program
berikut mendemonstrasikan bagaimana referensi super digunakan untuk
memanggil
constructor superclass.
class Person {
String firstName;
String lastName;
Person(String fname, String lname) {
firstName = fname;
lastName = lname;
}
}
class Student extends Person {
String studNum;
Student(String fname, String lname, String sNum) {
super(fname, lname);
studNum = sNum;
}
}
Kata kunci dapat juga digunakan untuk menunjuk anggota superclass seperti
yang ditunjukkan
pada contoh berikut.
class Superclass{
int a;
void display_a(){
System.out.println("a = " + a);
}
}
class Subclass extends Superclass {
int a;
void display_a(){
System.out.println("a = " + a);
}
void set_super_a(int n){
super.a = n;
}
void display_super_a(){
super.display_a();
}
}
class SuperDemo {
public static void main(String args[]){
Superclass SuperObj = new Superclass();
Subclass SubObj = new Subclass();
SuperObj.a = 1;
SubObj.a = 2;
SubObj.set_super_a(3);
SuperObj.display_a();
SubObj.display_a();
SubObj.display_super_a();
System.out.println(SubObj.a);
}
}
Program tersebut akan menampilkan hasil berikut.
a=1
a=2
a=3
2
Kata Kunci static
Kata kunci static dapat digunakan untuk anggota dari sebuah class. Kata kunci
ini menyediakan static atau anggota class untuk diakses sama sebelum
beberapa instance dari class dibuat. Variabel class bersifat seperti variabel
umum. Ini artinya bahwa variabel dapat diakses oleh semua instance dari
class. Method class mungkin dapat diambil tanpa membuat sebuah object dari
class tersebut. Bagaimanapun, mereka hanya dapat mengakses anggota static
dari class. Ditambahkan juga, mereka tidak dapat menunjuk this dan super.
Kata kunci static dapat juga diaplikasikan pada blok. Ini dinamakan dengan
blok static. Blok ini dieksekusi hanya sekali, ketika class diisi. Hal ini biasanya
digunakan untuk menginisialisasi variabel class.
class Demo {
static int a = 0;
static void staticMethod(int i) {
System.out.println(i);
}
static { //blok static
System.out.println("This is a static block.");
a += 1;
}
}
class StaticDemo {
public static void main(String args[]) {
System.out.println(Demo.a);
Demo.staticMethod(5);
Demo d = new Demo();
System.out.println(d.a);
d.staticMethod(0);
Demo e = new Demo();
System.out.println(e.a);
d.a += 3;
System.out.println(Demo.a+", " +d.a +", " +e.a);
}
}
Keluaran dari source kode ditunjukkan di bawah ini.
This is a static block.
1
5
1
0
1
4, 4, 4
Kata Kunci final
Kata kunci final dapat diaplikasikan pada variabel, method dan class. Untuk
mengingat fungsi dari kata kunci, ingat bahwa itu secara mudah dibatasi apa
yang kita dapat lakukan dengan variabel, method dan class. Nilai dari variabel
final dapat tidak lama diubah sesudah nilainya telah diatur. Sebagai contoh,
final int data = 10;
Pernyataan berikut akan menyebabkan terjadi compilation error:
data++;
Method final tidak dapat di-override dalam class anak.
final void myMethod() { //in a parent class
}
myMethod tidak dapat lama di-override dalam class anak.
class final tidak dapat diwariskan tidak seperti class yang biasanya.
final public class MyClass {
}
Pernyataan ini akan menyebabkan kesalahan compilation terjadi karena
MyClass dapat tidak lama di-extended.
public WrongClass extends MyClass {
}
Inner Classes
Sebuah inner class secara mudah dideklarasikan dalam class lain.
class OuterClass {
int data = 5;
class InnerClass {
int data2 = 10;
void method() {
System.out.println(data);
System.out.println(data2);
}
}
public static void main(String args[]) {
OuterClass oc = new OuterClass();
InnerClass ic = oc.new InnerClass();
System.out.println(oc.data);
System.out.println(ic.data2);
ic.method();
}
}
Untuk mampu mengakses anggota dari inner class, kita butuh sebuah instance
dari inner class. Method-method dari inner class dapat secara langsung
mengakses anggota dari outer class.
Tabel Perkalian
Tulis program yang mempunyai masukkan size dari user dan mencetak tabel
perkalian dengan size yang ditetapkan.
Size untuk tabel perkalian : 5
Tabel perkalian dari size 5:




 Greatest Common Factor(GCF)
 Tulis sebuah program yang mempunyai tiga integer dan menghitung nilai
 GCF dari tiga angka. GCF adalah angka terbesar yang secara rata dibagi ke
 semua angka yang diberikan.
Shape
Buatlah class Shape. class memiliki dua field String: name dan size. class
mempunyai method printShapeInfo, dimana hanya mengeluarkan nilai name
dan field size dari object Shape. Juga memiliki method printShapeName dan
printShapeSize, dimana mencetak nama dan size dari object, berturut-turut.
Menggunakan pewarisan, buat class Square dengan field yang sama dan
method seperti itu dari class Shape. Class ini mempunyai dua tambahan field
integer: length dan width. Method printShapeLength dan printShapeWidth yang
mencetak panjang dan lebar object yang juga termasuk dalam class ini. Anda
juga harus meng-override printShapeInfo untuk mencetak keluaran field
tambahan dalam subclass juga.
Binatang
Buatlah interface Animal yang mempunyai tiga method:eat dan move. Semua
method ini tidak punya argumen atau nilai return. Method ini hanya
mengeluarkan bagaimana object Animal makan dan bergerak. Sebagai contoh,
seekor kelinci memakan wortel dan bergerak dengan melompat. Buat class
Fish dan Bear yang menggunakan interface Animal. Terserah kepada Anda
bagaimana menggunakan method eat dan move.
SESI11
                                Exceptional
Pendahuluan
Bugs dan error dalam sebuah program sangat sering muncul meskipun
program tersebut dibuat oleh programmer berkemampuan tinggi. Untuk
menghindari pemborosan waktu pada proses error-checking, Java
menyediakan mekanisme penanganan exception. Exception adalah
singkatan dari Exceptional Events. Kesalahan (errors) yang terjadi
saat runtime, menyebabkan gangguan pada alur eksekusi program. Terdapat
beberapa tipe error yang dapat muncul. Sebagai contoh adalah error
pembagian 0, mengakses elemen di luar jangkauan sebuah array, input yang
tidak benar dan membuka file yang tidak ada.
Error dan Exception Classes
Seluruh exceptions adalah subclasses, baik secara langsung maupun tidak
langsung, dari sebuah root class Throwable. Kemudian, dalam class ini
terdapat dua kategori umum : Error class dan Exception class.
Exception class menunjukkan kondisi yang dapat diterima oleh user program.
Umumnya hal tersebut disebabkan oleh beberapa kesalahan pada kode
program. Contoh dari exceptions adalah pembagian oleh 0 dan error di luar
jangkauan array. Error class digunakan oleh Java run-time untuk menangani
error yang muncul pada saat dijalankan. Secara umum hal ini di luar control
user karena kemunculannya disebabkan oleh run-time environment. Sebagai
contoh adalah out of memory dan harddisk crash.
Sebuah Contoh
Perhatikan contoh program berikut :
class DivByZero {
public static void main(String args[]) {
System.out.println(3/0);
System.out.println(―Cetak.‖);
}
}
Jika kode tersebut dijalankan, akan didapatkan pesan kesalahan sebagai
berikut :
Exception in thread "main" java.lang.ArithmeticException: / by
zero at DivByZero.main(DivByZero.java:3)
Pesan tersebut menginformasikan tipe exception yang terjadi pada baris
dimana exception itu berasal. Inilah aksi default yang terjadi bila terjadi
exception yang tidak tertangani. Jika tidak terdapat kode yang menangani
exception yang terjadi, aksi default akan bekerja otomatis. Aksi tersebut
pertama-tama akan menampilkan deskripsi exception yang terjadi. Kemudian
akan ditampilkan stack trace yang mengindentifikasi method dimana exception
terjadi. Pada bagian akhir, aksi default tersebut akan menghentikan program
secara paksa. Bagaimana jika Anda ingin melakukan penanganan atas
exception dengan cara yang berbeda? Untungnya, bahasa pemrograman Java
memiliki 3 keywords penting dalam penanganan exception, yaitu try, catch dan
Menangkap Exception
Try - Catch
Seperti yang telah dijelaskan sebelumnya, keyword try, catch dan finally
digunakan dalam menangani bermacam tipe exception. 3 Keyword tersebut
digunakan bersama, namun finally bersifat opsional. Akan lebih baik jika
memfokuskan pada dua keyword pertama, kemudian membahas finally pada
bagian akhir.
Berikut ini adalah penulisan try-catch secara umum :
try {
<code to be monitored for exceptions>
} catch (<ExceptionType1> <ObjName>) {
<handler if ExceptionType1 occurs>
}
...
} catch (<ExceptionTypeN> <ObjName>) {
<handler if ExceptionTypeN occurs>
}
Gunakan contoh kode tersebut pada program DivByZero yang telah dibuat
sebelumnya :
class DivByZero {
public static void main(String args[]) {
try {
System.out.println(3/0);
System.out.println(―Cetak.‖);
} catch (ArithmeticException exc) {
//Reaksi atas kejadian
System.out.println(exc);
}
System.out.println(―Setelah Exception.‖);
}
}
Kesalahan pembagian dengan bilangan 0 adalah salah satu contoh dari
ArithmethicException. Tipe exception kemudian mengindikasikan klausa catch
pada class ini. Program tersebut menangani kesalahan yang terjadi dengan
menampilkan deskripsi dari permasalahan.
Output program saat eksekusi akan terlihat sebagai berikut :
java.lang.ArithmeticException: / by zero
After exception.
Bagian kode yang terdapat pada blok try dapat menyebabkan lebih dari satu
tipe exception. Dalam hal ini, terjadinya bermacam tipe kesalahan dapat
ditangani menggunakan beberapa blok catch. Perlu dicatat bahwa blok try
dapat hanya menyebabkan sebuah exception pada satu waktu, namun dapat
pula menampikan tipe exception yang berbeda di lain waktu.
Berikut adalah contoh kode yang menangani lebih dari satu exception :
class MultipleCatch {
public static void main(String args[]) {
try {
int den = Integer.parseInt(args[0]); //baris 4
System.out.println(3/den); //baris 5
} catch (ArithmeticException exc) {
System.out.println(―Nilai Pembagi 0.‖);
} catch (ArrayIndexOutOfBoundsException exc2) {
System.out.println(―Missing argument.‖);
}
System.out.println(―After exception.‖);
}
}
Pada contoh ini, baris ke-4 akan menghasilkan kesalahan berupa
ArrayIndexOutOfBoundsException bilamana seorang user alpa dalam
memasukkan argument,
sedang baris ke-5 akan menghasilkan kesalahan ArithmethicException jika
pengguna memasukkan nilai 0 sebagai sebuah argument. Penggunaan try
bersarang diperbolehkan dalam pemrograman Java.
class NestedTryDemo {
public static void main(String args[]){
try {
int a = Integer.parseInt(args[0]);
try {
int b = Integer.parseInt(args[1]);
System.out.println(a/b);
} catch (ArithmeticException e) {
System.out.println(―Divide by zero error!");
}
} catch (ArrayIndexOutOfBoundsException) {
System.out.println(―2 parameters are required!");
}
}
}
sedang baris ke-5 akan menghasilkan kesalahan ArithmethicException jika
pengguna memasukkan nilai 0 sebagai sebuah argument. Penggunaan try
bersarang diperbolehkan dalam pemrograman Java.
class NestedTryDemo {
public static void main(String args[]){
try {
int a = Integer.parseInt(args[0]);
try {
int b = Integer.parseInt(args[1]);
System.out.println(a/b);
} catch (ArithmeticException e) {
System.out.println(―Divide by zero error!");
}
} catch (ArrayIndexOutOfBoundsException) {
System.out.println(―2 parameters are required!");
} }}
Pelajari apa yang akan terjadi pada program jika argument berikut
dimasukkan:
a) Tidak ada argumen
b) 15
c) 15 3
d) 15 0
Keyword Finally
Saatnya Anda mengimplementasikan finally dalam blok try-cacth. Berikut ini
cara
penggunaan keyword tersebut :
try {
<kode monitor exception>
} catch (<ExceptionType1> <ObjName>) {
<penanganan jika ExceptionType1 terjadi>
} ...
} finally {
<kode yang akan dieksekusi saat blok try berakhir>
}
Blok finally mengandung kode penanganan setelah penggunaan try dan catch.
Blok kode ini selalu tereksekusi walaupun sebuah exception terjadi atau tidak
pada blok try. Blok kode tersebut juga akan menghasilkan nilai true meskipun
return, continue ataupun break tereksekusi. Terdapat 4 kemungkinan skenario
yang berbeda dalam blok try-catch-finally. Pertama, pemaksaan keluar program
terjadi bila control program dipaksa untuk melewati blok try menggunakan
return, continue ataupun break. Kedua, sebuah penyelesaian normal terjadi jika
try-catch-finally tereksekusi secara normal tanpa terjadi error apapun. Ketiga,
kode program memiliki spesifikasi tersendiri dalam blok catch terhadap
exception yang terjadi.
Yang terakhir, kebalikan skenario ketiga. Dalam hal ini, exception yang terjadi
tidak terdefinisikan pada blok catch manapun. Contoh dari skenario – skenario
tersebut terlihat pada kode berikut ini :
class FinallyDemo {
static void myMethod(int n) throws Exception{
try {
switch(n) {
case 1: System.out.println("case pertama");
return;
case 3: System.out.println("case ketiga");
throw new RuntimeException("demo case
ketiga");
case 4: System.out.println("case keempat");
throw new Exception("demo case
keempat");
case 2: System.out.println("case Kedua");
}
} catch (RuntimeException e) {
System.out.print("RuntimeException terjadi: ");
System.out.println(e.getMessage());
} finally {
System.out.println("try-block entered.");
}
}
public static void main(String args[]){
for (int i=1; i<=4; i++) {
try {
FinallyDemo.myMethod(i);
} catch (Exception e){
System.out.print("Exception terjadi: ");
System.out.println(e.getMessage());
}
System.out.println();
}
}
}
Melempar Exception dengan Keyword Throw
Disamping menangkap exception, Java juga mengijinkan seorang user untuk
melempar sebuah exception. Sintaks pelemparan exception cukup sederhana.
throw <exception object>;
Perhatikan contoh berikut ini.
/* Melempar exception jika terjadi kesalahan input */
class ThrowDemo {
public static void main(String args[]){
String input = ―invalid input‖;
try {
if (input.equals(―invalid input‖)) {
throw new RuntimeException("throw demo");
} else {
System.out.println(input);
}
System.out.println("After throwing");
} catch (RuntimeException e) {
System.out.println("Exception caught here.");
System.out.println(e);
}
}
}
Keyword Throws
Jika sebuah method dapat menyebabkan sebuah exception namun tidak
menangkapnya, maka digunakan keyword throws. Aturan ini hanya berlaku
pada checked exception. Anda akan mempelajari lebih lanjut tentang checked
exception dan unchecked exception pada bagian selanjutnya, ―Kategori
Exception‖.
Berikut ini penulisan syntax menggunakan keyword throws :
<type> <methodName> (<parameterList>) throws <exceptionList> {
<methodBody>
}
Sebuah method perlu untuk menangkap ataupun mendaftar seluruh exceptions
yang mungkin terjadi, namun hal itu dapat menghilangkan tipe Error,
RuntimeException, ataupun subclass-nya. Contoh berikut ini menunjukkan
bahwa method myMethod tidak menangani
ClassNotFoundException.
class ThrowingClass {
static void myMethod() throws ClassNotFoundException {
throw new ClassNotFoundException ("just a demo");
}
}
class ThrowsDemo {
public static void main(String args[]) {
try {
ThrowingClass.myMethod();
} catch (ClassNotFoundException e) {
System.out.println(e);
}
}
}
Kategori Exception
Exception Classes dan Hierarki
Seperti yang disebutkan sebelumnya, root class dari seluruh exception classes
adalah Throwable class. Yang disebutkan dibawah ini adalah exception class
hierarki. Seluruh exceptions ini terdefinisi pada package java.lang.
Sekarang Anda sudah cukup familiar dengan beberapa exception classes,
saatnya untuk mengenalkan aturan : catch lebih dari satu harus berurutan dari
subclass ke superclass.
class MultipleCatchError {
public static void main(String args[]){
try {
int a = Integer.parseInt(args [0]);
int b = Integer.parseInt(args [1]);
System.out.println(a/b);
} catch (Exception e) {
System.out.println(e);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println(e2);
}
System.out.println("After try-catch-catch.");
}
}
Setelah mengkompilasi kode tersebut akan menghasilkan pesan error jika
Exception class adalah superclass dari ArrayIndexOutOfBoundsException
class. MultipleCatchError.java:9: exception
java.lang.ArrayIndexOutOfBoundsException has already been caught
} catch (ArrayIndexOutOfBoundsException e2) {
Checked dan Unchecked Exceptions
Exception terdiri atas checked dan unchecked exceptions.
Checked exceptions adalah exception yang diperiksa oleh Java compiler.
Compiler memeriksa keseluruhan program apakah menangkap atau mendaftar
exception yang terjadi dalam sintax throws. Apabila checked exception tidak
didaftar ataupun ditangkap, maka compiler error akan ditampilkan.
Tidak seperti checked exceptions, unchecked exceptions tidak berupa compile-
time checking dalam penanganan exceptions. Pondasi dasar dari unchecked
exception classes adalah Error, RuntimeException dan subclass-nya.
User Defined Exceptions
Meskipun beberapa exception classes terdapat pada package java.lang namun
tidak mencukupi untuk menampung seluruh kemungkinan tipe exception yang
mungkin terjadi. Sehingga sangat mungkin bahwa Anda perlu untuk membuat
tipe exception tersendiri. Dalam pembuatan tipe exception Anda sendiri, Anda
hanya perlu untuk membuat sebuah extended class terhadap
RuntimeException class, maupun Exception class lain. Selanjutnya tergantung
pada Anda dalam memodifikasi class sesuai permasalahan yang akan
diselesaikan. Members dan constructors dapat dimasukkan pada exception
class milik Anda.
Berikut ini contohnya :
class HateStringException extends RuntimeException{
/* Tidak perlu memasukkan member ataupun construktor */
}
c
lass TestHateString {
public static void main(String args[]) {
String input = "invalid input";
try {
if (input.equals("invalid input")) {
throw new HateStringException();
}
System.out.println("String accepted.");
} catch (HateStringException e) {
System.out.println("I hate this string: " + input +
".");
}
}
}
Assertions
User Defined Exceptions
Assertions mengijinkan programmer untuk menentukan asumsi yang dihadapi.
Sebagai contoh, sebuah tanggal dengan area bulan tidak berada antara 1
hingga 12 dapat diputuskan bahwa data tersebut tidak valid. Programmer dapat
menentukan bulan harus berada diantara area tersebut. Meskipun hal itu
dimungkinkan untuk menggunakan contructor lain untuk mensimulasikan fungsi
dari assertions, namun sulit untuk dilakukan karena fitur assertion dapat tidak
digunakan. Hal yang menarik dari assertions adalah seorang user memiliki
pilihan untuk digunakan atau tidak pada saat runtime. Assertion dapat diartikan
sebagai extensi atas komentar yang enginformasikan pembaca kode bahwa
sebagian kondisi harus terpenuhi. Dengan menggunakan assertions, maka
tidak perlu untuk membaca keseluruhan kode melalui setiap komentar untuk
mencari asumsi yang dibuat dalam kode. Namun, menjalankan
program tersebut akan memberitahu Anda tentang assertion yang dibuat benar
atau salah. Jika assertion tersebut salah, maka AssertionError akan terjadi.
Mengaktifkan dan Menonaktifkan Exceptions
Penggunaan assertions tidak perlu melakukan import package java.util.assert.
Menggunakan assertions lebih tepat ditujukan untuk memeriksa parameter dari
nonpublic methods jika public methods dapat diakses oleh class lain. Hal itu
mungkin terjadi bila penulis dari class lain tidak menyadari bahwa mereka
dapat menonaktifkan assertions. Dalam hal ini program tidak dapat bekerja
dengan baik. Pada non-public methods, hal tersebut tergunakan secara
langsung oleh kode yang ditulis oleh programmer yang memiliki akses
terhadap methods tersebut. Sehingga mereka menyadari bahwa saat
menjalankannya, assertion harus dalam keadaan aktif.
Untuk mengkompilasi file yang menggunakan assertions, sebuah tambahan
parameter perintah diperlukan seperti yang terlihat dibawah ini :
javac –source 1.4 MyProgram.java
Jika Anda ingin untuk menjalankan program tanpa menggunakan fitur
assertions, cukup jalankan program secara normal.
java MyProgram
Namun, jika Anda ingin mengaktifkan assertions, Anda perlu menggunakan
parameter –enableassertions atau –ea.
java –enableassertions MyProgram
Sintaks Assertions
Penulisan assertions memiliki dua bentuk.
Bentuk yang paling sederhana terlihat sebagai berikut :
assert <expression1>;
dimana <expression1> adalah kondisi dimana assertion bernilai true.
Bentuk yang lain menggunakan dua ekspresi, berikut ini cara penulisannya :
assert <expression1> : <expression2>;
dimana <expression1> adalah kondisi assertion bernilai true dan
<expression2> adalah informasi yang membantu pemeriksaan mengapa
program mengalami kesalahan.
class AgeAssert {
public static void main(String args[]) {
int age = Integer.parseInt(args[0]);
assert(age>0);
/* jika masukan umur benar (misal, age>0) */
if (age >= 18) {
System.out.println(―Congrats! You're an adult!
=)‖);
}
}
}
Latihan
Heksadesimal ke Desimal
Tentukan sebuah angka heksadesimal sebagai input. Konversi angka tersebut
menjadi bilangan desimal. Tentukan exception class Anda sendiri dan lakukan
penanganan jika input dari user bukan berupa bilangan heksadesimal.
Menampilkan Sebuah Berlian
Tentukan nilai integer positif sebagai input. Tampilkan sebuah berlian
menggunaakan karakter asterisk (*) sesuai angka yang diinput oleh user. Jika
user memasukkan bilangan integer negatif, gunakan assertions untuk
menanganinya. Sebagai contoh, jika user memasukkan integer bernilai 3,
program Anda harus menampilkan sebuah berlian sesuai bentuk berikut :
                                          *
                                         ***
                                        *****
                                         ***
                                          *

								
To top