Tampilkan postingan dengan label javamoklet. Tampilkan semua postingan
Tampilkan postingan dengan label javamoklet. Tampilkan semua postingan

Stream IO Pada Java




Program komputer bisa berguna jika ia bisa berinteraksi dengan dunia lain. Interaksi di sini maksudnya input/output atau I/O. Pada bab ini, kita akan melihat input output pada file dan koneksi jaringan (network). Pada Java, input/output pada file dan jaringan dilakukan berdasarkan aliran (stream), di mana semua objek dapat melakukan perintah I/O yang sama. Standar output (System.out) dan standar input (System.in) adalah contoh aliran.
Untuk bekerja dengan file dan jaringan, kita membutuhkan pengetahuan tentang pengecualian, yang telah dibahas sebelumnya. Banyak subrutin yang digunakan untuk bekerja dengan I/O melemparkan pengecualian yang wajib ditangani. Artinya subrutin tersebut harus dipanggil di dalam pernyataan try ... catch sehingga pengecualian yang terjadi bisa ditangani dengan baik.
Tanpa bisa berinteraksi dengan dunia lain, suatu program tidak ada gunanya. Interaksi suatu program dengan dunia lain sering disebut input/output atau I/O. Sejak dulu, salah satu tantangan terbesar untuk mendesain bahasa pemrograman baru adalah mempersiapkan fasilitas untuk melakukan input dan output. Komputer bisa terhubung dengan beragam jenis input dan output dari berbagai perangkat. Jika bahasa pemrograman harus dibuat secara khusus untuk setiap jenis perangkat, maka kompleksitasnya akan tak lagi bisa ditangani.
Salah satu kemajuan terbesar dalam sejarah pemrograman adalah adanya konsep (atau abstraksi) untuk memodelkan perangkat I/O. Dalam Java, abstraksi ini disebut dengan aliran (stream). Bagian ini akan memperkenalkan tentang aliran, akan tetapi tidak menjelaskan dengan komplit. Untuk lebih lengkapnya, silakan lihat dokumen resmi Java.
Ketika berhubungan dengan input/output, kita harus ingat bahwa ada dua kategori data secara umum : data yang dibuat oleh mesin, dan data yang bisa dibaca manusia. Data yang dibuat mesin ditulis dengan model yang sama dengan bagaimana data tersebut disimpan di dalam komputer, yaitu rangkaian nol dan satu. Data yang bisa dibaca manusia adalah data dalam bentuk rangkaian huruf. Ketika kita membaca suatu bilangan 3.13159, kita membacanya sebagai rangkaian huruf yang kita terjemahkan sebagai angka. Angka ini akan ditulis dalam komputer sebagai rangkaian bit yang kita tidak mengerti.
Untuk menghadapi kedua jenis data ini, Java memiliki dua kategori besar untuk aliran : aliran byte untuk data mesin (byte stream), dan aliran karakter (character stream) untuk data yang bisa dibaca manusia. Ada banyak kelas yang diturunkan dari kedua kategori ini.
Setiap objek yang mengeluarkan data ke aliran byte masuk sebagai kelas turunan dari kelas abstrak OutputStream. Objek yangmembaca data dari aliran byte diturunkan dari kelas abstrak InputStream. Jika kita menulis angka ke suatu OutputStream, kita tidak akan bisa membaca data tersebut karena ditulis dalam bahasa mesin. Akan tetapi data tersebut bisa dibaca kembali olehInputStream. Proses baca tulis data akan menjadi sangat efisien, karena tidak ada penerjemahan yang harus dilakukan : bit yang digunakan untuk menyimpan data di dalam memori komputer hanya dikopi dari dan ke aliran tersebut.
Untuk membaca dan menulis data karakter yang bisa dimengerti manusia, kelas utamanya adalah Reader dan Writer. Semua kelas aliran karakter merupakan kelas turunan dari salah satu dari kelas abstrak ini. Jika suatu angka akan ditulis dalam aliranWriter, komputer harus bisa menerjemahkannya ke dalam rangkaian karakter yang bisa dibaca maunsia.
Membaca angka dari aliran Reader menjadi variabel numerik juga harus diterjemahkan, dari deretan karakter menjadi rangkaian bit yang dimengerti komputer. (Meskipun untuk data yang terdiri dari karakter, seperti dari editor teks, masih akan ada beberapa terjemahan yang dilakukan. Karakter disimpan dalam komputer dalam nilai Unicode 16-bit. Bagi orang yang menggunakan alfabet biasa, data karakter biasanya disimpan dalam file dalam kode ASCII, yang hanya menggunakan 8-bit. Kelas Reader dan Writerakan menangani perubahan dari 16-bit ke 8-bit dan sebaliknya, dan juga menangani alfabet lain yang digunakan negara lain.)
Adalah hal yang mudah untuk menentukan apakah kita harus menggunakan aliran byte atau aliran karakter. Jika kita ingin data yang kita baca/tulis untuk bisa dibaca manusia, maka kita gunakan aliran karakter. Jika tidak, gunakan aliran byte. System.in danSystem.out sebenarnya adalah aliran byte dan bukan aliran karakter, karenanya bisa menangani input selain alfabet, misalnya tombol enter, tanda panah, escape, dsb.
Kelas aliran standar yang akan dibahas berikutnya didefinisikan dalam paket java.io beserta beberapa kelas bantu lainnya. Kita harus mengimpor kelas-kelas tersebut dari paket ini jika kita ingin menggunakannya dalam program kita. Artinya dengan menggunakan "import java.io.*" di awal kode sumber kita.
Aliran tidak digunakan dalam GUI, karena GUI memiliki aliran I/O tersendiri. Akan tetapi kelas-kelas ini digunakan juga untuk file atau komunikasi dalam jaringan. Atau bisa juga digunakan untuk komunikasi antar thread yang sedang bekerja secara bersamaan. Dan juga ada kelas aliran yang digunakan untuk membaca dan menulis data dari dan ke memori komputer.
Contoh Program yang menggunkan Stream IO pada java adalah seperti pada coding berikut ini silahkan anda simak :

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class MainClass {
public static void main(String[] args) {
boolean areFilesIdentical = true;
File file1 = new File(“c:\\file1.txt”);
File file2 = new File(“c:\\file2.txt”);
if (!file1.exists() || !file2.exists()) {
System.out.println(“File tidak ditemukan”);
System.out.println(false);
}
System.out.println(“length:” + file1.length());
if (file1.length() != file2.length()) {
System.out.println(“panjang file 1 dan file 2 tidak sama”);
System.out.println(false);
}
try {
FileInputStream fis1 = new FileInputStream(file1);
FileInputStream fis2 = new FileInputStream(file2);
int i1 = fis1.read();
int i2 = fis2.read();
while (i1 != -1) {
if (i1 != i2) {
areFilesIdentical = false;
break;
}
i1 = fis1.read();
i2 = fis2.read();
}
fis1.close();
fis2.close();
} catch (IOException e) {
System.out.println(“IO exception”);
areFilesIdentical = false;
}
System.out.println(areFilesIdentical);
}
}

Nah Sekarang anda pasti udah dapet bayangan apa itu Stream IO pada java .Sekareng mulailah unutk berkreasi sendiri sekian tutorial dari ane semoga bermanfaat bagi anda semua selamat mencoba dan semoga sukses.

Enkripsi Pada Project Java

Enkripsi pada projet java itu biasanya selalu digunakan agar sebuah project tidak terdeteksi oleh siapapun hanya yang mengetahui adalah orang yang membuat enkripsi tersebut. Guna dari enkripsi tersebut adalah antara lain digunakan untuk security pada sebuah project ataupun program yang kita punya. Dikarenakan sekarang sudah jaman modern banyak hecker-hecker berkeliaran dimanapun . sebabnya itulah dibentuk enkripsi agar sebuah file tidak dijual bebas atau dipasarkan secara gratis. Apalagi itu file penting dalam hidup kita .
Nah sekarang kita mulai saja padan tahap coding pada Netbeans silahkan lihat dengan seksama coding berikut ini :

  1. pertama kita buat 2 javaclass namanya terserah anda
  2. kedua copi paste coding dibawah ini :
    untuk class pertama/primary kita kasih coding :
package tes_jeni;

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.security.NoSuchAlgorithmException;

public class Contoh {
    public static void main(String[] args) throws IOException { 
        BufferedReader userInput = new BufferedReader (new InputStreamReader(System.in));
 
        System.out.println("Masukkan String:");
        String rawString = userInput.readLine();
 
        try { 
            System.out.println("Enkripsi dengan MD5: " + EncryptMD5.MD5(rawString));
        } catch (NoSuchAlgorithmException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace();
        } 
    } 
}

     3. untuk koding ke-2nya /secondary/methotnya kita kasih coding berikut ini :

package tes_jeni;

import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException;

public class EncryptMD5 {

    private static String convertToHex(byte[] data) { 
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < data.length; i++) { 
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do { 
                if ((0 <= halfbyte) && (halfbyte <= 9)) 
                    buf.append((char) ('0' + halfbyte));
                else 
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data[i] & 0x0F;
            } while(two_halfs++ < 1);
        } 
        return buf.toString();
    } 
 
    public static String MD5(String text) 
    throws NoSuchAlgorithmException, UnsupportedEncodingException  { 
        MessageDigest md;
        md = MessageDigest.getInstance("MD5");
        byte[] md5hash = new byte[32];
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        md5hash = md.digest();
        return convertToHex(md5hash);
    } 
} 
 
yang akan kita run adalah coding pertama atau koding yang primary kita tekan shift + f6 dan hasilnya adalah seperti berikut ini :


referensi : fajar ardyanto

Merubah Icon Pada Aplikasi Java Swing





Apa itu swing java ?
Swing Java adalah salah satu 
pemrograman berbasis GUI(Graphical User Interface) di Java. Sesungguhnya di Java terdapat dua macam pemrograman berbasis GUI(Graphical User Interface) yaitu : AWT dan Swing.
Namun dalam perkembangannya AWT sudah tidak dianjurkan untuk digunakan dikarenakan faktor keamanan. Banyak sekali fitur yang terdapat di Swing, namun dalam kesempatan ini kita hanya akan mengganti icon saja.
Walaupun Swing jarang di gunakan di aplikasi desktop base, karena kebanyakan developer lebih memilih menggunakan VB, Delphi ataupun .NET yang lebih ringan dan tidak makan banyak resource memory karena sifatnya yang native.
Namun penggunaan java bisa untuk lintas platform sehingga kita tidak perlu membuat aplikasi dua kali.
  • Memulai Coding
Tentunya saya tidak perlu mengingatkan kembali, dimana anda harus menulis kode program java serta bagaimana cara melakukan kompilasi dan mengeksekusinya.
Dibawah ini kode program sebelum icon terganti


// SebelumGanti.java

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

 class SebelumGanti {
 private static void gantiIcon() {
   JFrame.setDefaultLookAndFeelDecorated(true);
   JFrame f = new JFrame("Icon Belum Terganti");
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setSize(400, 400);
   f.setVisible(true);
 }

 public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
   public void run() {
  gantiIcon();
   }
  });
    }
 }
Merubah Icon Pada Aplikasi Swing Java Image
Dibawah ini kode program untuk mengganti icon
// SesudahGanti.java
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
import java.awt.Toolkit;

public class SesudahGanti {
  private static void gantiIcon() {

// ini membuat frame tampilan yang sama di semua sistem operasi
   JFrame.setDefaultLookAndFeelDecorated(true);

   // membuat objek frame yang mempunyai judul
   JFrame f = new JFrame("Icon Sudah Terganti");

   // cara pertama untuk merubah icon pada swing
   ImageIcon gambar = new ImageIcon("bomb.png");
   f.setIconImage(gambar.getImage());

   // cara kedua untuk merubah icon pada swing
   f.setIconImage(Toolkit.getDefaultToolkit().getImage("bomb.png"));
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.setSize(400, 400);
   f.setVisible(true);
 }

  public static void main(String[] args) {
 // aplikasi swing ditempatkan di thread yang berbeda
 SwingUtilities.invokeLater(new Runnable() {
   public void run() {
  gantiIcon();
   } });
 }
  }
Merubah Icon Pada Aplikasi Swing Java Image
Demikianlah tutorial singkat mengenai aplikasi desktop menggunakan java. Semoga bisa bermanfaat dan membantu untuk anda yang sedang belajar pemrograman java. Kita bertemu lagi di edisi mendatang.

GUI AWT Pada Java

Kali ini saya akan share ilmu tentang java. Pada umumnya java itu juga ada yang namanya GUI ( Grapchical User Interfaces) itu terbagi banyak sekali diantaranya ada java GUI AWT, SWT, Swing ,dan lain sebagainya. kali ini saya akan membuat atau menerapkan java berbasis GUI AWT yaitu menggambar dengan  java GUI AWT. AWT adalah Java yang setara dengan Microsoft Windows Common Control Library atau Motif widget toolkit. Ini termasuk pendukung untuk pemrograman grafik sederhana serta sejumlah komponen seperti tombol, menu, daftar, dan kelas check box .Nah sekarang langsung saja kita lihat coding di bawah ini : 



package tes_jeni;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class awt extends JFrame {
private int pointCount = 0;
private Point points[] = new Point[1000];

public awt () {
super ("SILAHKAN Menggambar");

getContentPane().add(new JLabel("Klik Kanan Mouse Untuk Gambar"), BorderLayout.SOUTH);

addMouseMotionListener (
new MouseMotionAdapter() {
public void mouseDragged (MouseEvent e) {
if (pointCount < points.length) {
points[pointCount] = e.getPoint();
++pointCount;
repaint();
}
}
}
);

setSize (300,150);
setLocationRelativeTo(null);
setVisible(true);
}

public void paint (Graphics g) {
super.paint(g);
for (int i = 0; i < points.length && points[i] != null; i++) {
g.setColor(Color.red);
g.fillOval (points[i].x, points[i].y, 4,4);
}
}

public static void main (String args[]) {
awt test = new awt();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

Silahkan copi paste coding diatas dan rasakan manfaatnya hasil run nya seperti gambar dibawah ini  :


Oh iya jangan lupa setelah copi paste adna harus menggantii nama package diatas sesuai dengan package yang anda buat kalo di atas tertulis package tes_jeni; maka anda harus mengganti nama package tersebut dengan nama package yang anda buat . Dan jangan lupa mengganti nama public class sesuia yang anda create . Sekian tutorial java dari ane semoga bermanfaat dan selamat mencoba semoga berhasil seperti ane gan .

referensi : Fajar Ardyanto

Pengertian Java GUI




Java GUI mendukung pembangunan melalui Abstract Windowing Toolkit, atau AWT. AWT adalah Java yang setara dengan Microsoft Windows Common Control Library atau Motif widget toolkit. Ini termasuk pendukung untuk pemrograman grafik sederhana serta sejumlah komponen seperti tombol, menu, daftar, dan kelas check box.

Tiga langkah yang umum untuk semua aplikasi Java GUI adalah:

1. Pembentukan Container
2. Tata letak komponen GUI
3. Penanganan event.

JAVA GUI HISTORY

AWT vs. Swing/JFC

o AWT
* Abstract Window Toolkit
* AWT memberikan beberapa komponen yang sederhana, tidak sebanyak Swing
* Memiliki beberapa masalah dalam pengimplementasiannya awal tahun 1996
* AWT menggambar/membuat interface dengan menggunakan “native peers” à pembuatan tombol AWT membuat hubungan yang sinkron dengan (Unix, Mac, Win 32) terhadap suatu screen,
* Keuntungan : aplikasi AWT memiliki penampilan yang asli/lugas (bawaan SO)
*
o Swing
* Juga disebut dengan JFC
* Di implementasikan oleh Java à seperti bytecode yang dapat berjalan ke semua platform
* Swing memiliki 10 kali lebih banyak class, dan kemampuan dibanding AWT
* Swing memiliki look-and-feel yang pluggable. Terlihat ketika pembuatan tombol

MATISSE GUI BUILDER

Mattise GUI Builder yang baru mengubah sama sekali konsep perancangan program Java GUI dalam Netbeans. Sebelumnya, untuk merancang sebuah form Java GUI, kita disibukkan dengan pengaturan layout yang rumit. Mulai dari pemilihan layout-manager yang cocok, peletakan dan pengaturan posisi komponen dalam layout, sampai pengaturan berbagai atribut layout.

1. Free Design

Sekarang dengan paradigma baru free design yang diusung oleh Project Matisse, merancang GUI dalam Netbeans menjadi lebih mudah.

Komponen Java (baik AWT, Swing, Beans) benar-benar dapat diletakkan dalam form dengan konsep drag n drop atau pick n plop.

Kita tidak perlu lagi peduli dengan layout dan layout manager. Semua akan diatur secara otomatis oleh GUI Builder

Secara background, GUI Builder akan menerjemahkan semua susunan komponen yang kita letakkan dalam form, dengan memakai layout manager baru, GrupLayout, serta berbagai konstruksi yang ada didalam paket Swing.

Secara otomatis kode program dihasilkan oleh GUI Builder ini.

2. Snapping

Saat kita meletakkan komponen dalam form, GUI Builder secara otomatis akan menampilkan garis bantu (guidelines) secara visual. Yang akan membantu kita dalam menentukan posisi komponen relatif terhadap komponen lainnya ataupun relatif terhadap tepi kontainer.

3. Visual Feedback

GUI Builder akan menampilkan berbagai visual-feedback. Satu yang telah dikemukakan diatas adalah garis bantu yang ditampilkan saat penempatan komponen. Visual feedback lainnya, yang ditampilkan paska peletakan, akan menunjukkan hubungan anchoring (penjangkaran atau posisi absolut) dan chaining (keterkaitan) antar komponen.

Pembahasan INNER CLASS dan Anonymous Inner Class

  Bagian ini memberi Anda tinjauan ulang atas konsep yang sudah Anda pelajari di pelajaran pemrograman pertama. Inner class dan anonymous inner class sangatlah bermanfaat untuk GUI event handling.
yang pertama adalah INNER CLASS
a. INNER CLASS
  • Inner class adalah suatu class yang berada di dalam class lainnya. [1]
  • Di buku [2], disebutkan ada 4 jenis inner class, yaitu :
            1. “Regular” Inner class
2. Method-local inner class
3. Anonymous inner class
4. Static nested classes

 BONUS DARI CODE APLIKASI MENUTUP WINDOW PAKEK INNER CLASS
============================================================

Contoh Menutup Window
import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
Label label;
CloseFrame(String title) {
super(title);
label = new Label("Close the frame.");
this.addWindowListener(new CFListener());
}
void launchFrame() {
setSize(300,300);
setVisible(true);
}
class CFListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(1);
}
}
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window
Example");
cf.launchFrame();
}
}

========================================================
1. “Regular” Inner class
  • Kata “Regular” di atas memiliki maksud bahwa inner class yang dibahas di sini adalah inner class yang bukan static / method-local / anonymous. [2]
  • Inner class didefinisikan (ditulis) di dalam kurung kurawal dari outer class. [2]
  • Bila ada kode java sebagai berikut : [2]

Program 01
=================================== 
class MyOuter {
      class MyInner {
      }
}
===============================
Dan kemudian dicompile dengan perintah :
%java MyOuter.java
Maka akan tercipta 2 buah file .class, yaitu : MyOuter.class dan MyOuter$MyInner.class. 

  • Instance inner class memiliki akses ke semua member dari outer class (termasuk member outer class yang ber access modifier private). [2]
Contoh : [1]
Program 02

class A {
    private int x = 101;
    class B {
        void lakukanSesuatu() {
            System.out.print("x = " + x);
        }
    }
}

public class BelajarInnerClass02 {
    public static void main(String[] args) {
        A a = new A();
        A.B b = a.new B();
        b.lakukanSesuatu();
    }
}

  • Sebuah inner class tidak dapat memiliki member static. [2]
Contoh : [1]
Program 03

class A {
    class B {
        static int a = 10; //error!!!
    }
}

  • Untuk membuat instance dari inner class, kita harus memiliki instance dari outer class terlebih dahulu. Tidak ada  pengecualisan untuk aturan ini. [2]
  • Untuk membuat instance dari inner class, terdapat 2 cara, yaitu :
1.      Dari dalam outer class
2.      Dari luar outer class
·         Contoh membuat instance inner class dari dalam outer class : [1]
Program 04

class A {
    void buatInstanceKelasB() {
        B b = new B();
    }
    class B {
    }
}

Dari contoh di atas, untuk dapat menjalankan method buatInstanceKelasB, harus terdapat instance dari kelas A terlebih dahulu. Dengan kata lain, untuk membuat instance inner class, harus terdapat instance dari outer class terlebih dahulu.

Maksud dari membuat instance inner class dari dalam outer  class tidak termasuk membuat instance dari dalam method static. Sebab method static tidak dapat menunjuk sesuatu yang tidak static. Untuk membuat instance inner class dari dalam method static, maka dipergunakan cara seperti ketika membuat instance inner class dari luar outer class.

  • Contoh membuat instance inner class dari luar outer class  : [1]
Program 05

class A {
    class B {
        void sesuatuDiKelasB() {
            System.out.println("Hello, ini di method kelas B");
        }
    }
}

public class Contoh {
    public static void main(String[] args) {
        A a = new A();
        A.B b = a.new B();
        b.sesuatuDiKelasB();
    }
}


Program 05 di atas dapat disingkat menjadi : [1]
Program 06

class A {f
    class B {
        void sesuatuDiKelasB() {
            System.out.println("Hello, ini di method kelas B");
        }
    }
}

public class BelajarInnerClass04 {
    public static void main(String[] args) {
        A.B b = new A().new B();
        b.sesuatuDiKelasB();
    }
}

Ketika kita ingin membuat instance dari method static dari outer class, maka cara di ataslah yang digunakan. Hal ini karena method static tidak memiliki reference this.
  • Aturan inner class dalam hal mereferensi dirinya sendiri atau instance dari outer class adalah sebagai berikut : [2]
1.      Untuk merujuk pada dirinya sendiri (instance dari inner class) dari dalam inner class, dapat digunakan referensi this atau NamaOuterClass.NamaInnerClass.this.
2.      Untuk merujuk pada instance dari outer classnya dari dalam inner class, dapat digunakan referensi NamaOuterClass.this.
Contoh : [1]
Program 07

class A {
    int i = 10;
    class B {
        int i = 11;
        class C {
            int i = 12;
            void lakukanSesuatu() {
                System.out.println("A.this.i     = " + A.this.i);
                System.out.println("A.B.this.i   = " + A.B.this.i);
                System.out.println("A.B.C.this.i = " + A.B.C.this.i);
                System.out.println("this.i       = " + this.i);
            }
        }
    }
}
public class BelajarInnerClass05 {
    public static void main(String[] args) {
        A.B.C c = new A().new B().new C();
        c.lakukanSesuatu();
    }
}
  • Modifier-modifier berikut dapat diberikan pada inner class : [2]
1.  final
2.  abstract
3.  public
4.  protected
5.  private
6.      static (tapi dengan modifier ini, maka akan menjadi static nested class, bukan inner class).
7.  strictfp


2. Method-Local Inner Class
·         Method-local inner class adalah inner class yang dideklarasikan di dalam method [2].
·         Mendeklarasikan method-local inner class tidak berarti kita membuat instance dari class tersebut. Jadi, sebelum kita menggunakan inner class tersebut, kita harus membuat instancenya dari suatu tempat di dalam method dan setelah definisi inner class tersebut. [2].
Contoh :
Program 08

class A { //1
    void myMethod() { //2
        class B { //3
            int i = 10;
            void lakukanSesuatu() { //4
                System.out.println(" i = " + i);
            } //4
        } //3
       
        B b = new B();
        b.lakukanSesuatu();
    } //2
} //1


  • Method-local inner class hanya dapat diinstansiasi dari dalam method yang mendefinisikan method-local inner class tersebut.
  • Instance method-local inner class memiliki akses ke semua member dari outer class (termasuk member outer class yang ber access modifier private). [2]
Contoh : [1]
Program 09

class A { //1
    private int i = 10;
    void lakukanSesuatu() { //2
        class B { //3
            void aksesMemberOuterClass() { //4
                System.out.println("i = " + i);
            } //4
        } //3
       
        B b = new B();
        b.aksesMemberOuterClass();
    } //2
} //1


  • Instance dari method-local inner class tidak dapat mengakses local variabel (termasuk parameter) dari method dimana method-local inner class tersebut didefinisikan. Kecuali bila variabel tersebut bermodifier final.[2]
Contoh : [2]
Program 10

class A { //1
    void lakukanSesuatu() { //2
        int nonFinalVar = 10;
        final int finalVar = 11;
        class B { //3
            void aksesLocalVar() { //4
                //ERROR
                System.out.println("nonFinalVar = " + nonFinalVar);
                //TIDAK ERROR
                System.out.println("finalVar = " + finalVar);
            } //4
        } //3
       
        B b = new B();
        b.aksesLocalVar();
    } //2
} //1


  • Method-local inner class yang didefinisikan di dalam static method tidak dapat mengakses non-static member dari outer classnya [2].
  • Modifier-modifier yang dapat diberikan pada method-local inner class adalah : [2]
1.      abstract (tidak dapat digabung dengan final)
2.      final (tidak dapat digabung dengan abstract)


NAH . .  yang selanjutnya adalah Anonymous Inner Class

b. Anonymous Inner Class

BONUS APLIKASI CLOSE WINDOWS ANONYMOUS INNER CLASS

================================================
import java.awt.*;
import java.awt.event.*;
class CloseFrame extends Frame{
Label label;
CloseFrame(String title) {
super(title);
label = new Label("Close the frame.");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
dispose();
System.exit(1);
}
});
}
void launchFrame() {
setSize(300,300);
setVisible(true);
}
public static void main(String args[]) {
CloseFrame cf = new CloseFrame("Close Window Example");
cf.launchFrame();
}
}

=============================================

·         Anonymous inner class adalah suatu inner class yang dideklarasikan tanpa nama kelas. 
·         Anonymous inner class pasti adalah salah satu dari 2 hal berikut :
1.      Subclass dari suatu class yang telah dideklarasikan
2.      Kelas implementasi dari suatu interface
·         Suatu anonymous inner class tidak dapat secara bersamaan menjadi subclass dari class yang telah dideklarasikan dan juga sebagai kelas implementasi dari suatu interface.

·         Tujuan utama dari anonymous inner class adalah mengoverride satu atau lebih method dari super classnya atau mengimplement semua method dari suatu interface. 

·         Anonymous inner class tidak dapat mengimplement lebih dari sebuah interface.
·         Anonymous inner class selalu dibuat sebagai bagian dari suatu statement. 
·         Contoh Anonymous inner class sebagai subclass : 
Program 11

class A {
    int i = 10;
    void lakukanSesuatu() {
        i--;
        System.out.println("i = " + i);
    }
}

public class BelajarAnonymous1 {    //1
    public static void main(String[] args) {    //2
        A a = new A() {   //3
            void lakukanSesuatu() { //4
                i++;
                System.out.println("i = " + i);
            }   //4
        };  //3
       
        a.lakukanSesuatu();
    }   //2
}   //1

Note: variabel referensi a di atas mereferensi ke suatu instance anonymous inner class yang merupakan subclass dari class A. Jadi, variabel referensi a bukan mereferensi ke instance dari kelas A.

  • Contoh anonymous inner class sebagai implementasi suatu interface : 
Program 12

interface A {
    public void doA();
}

interface B extends A {
    public void doB();
}

public class BelajarAnonymous2 {
    public static void main(String[] args) {
        B b = new B() {
            public void doA() {
                System.out.println("Ini method doA()");
            }
           
            public void doB() {
                System.out.println("Ini method doB()");
            }
        };
       
        b.doA();
        b.doB();
    }
}


  • Anonymous inner class adalah salah satu bentuk dari polymorphisme, oleh karena itu, method yang dapat dipanggil dari anonymous inner class adalah method yang dideklarasikan di super class atau interfacenya (meskipun di dalam anonymous inner class dapat dideklarasikan method-method yang tidak ada di super class atau interfacenya).
Contoh : [1]
Program 13

class A {
    int i = 10;
    void lakukanSesuatu() {
        i--;
        System.out.println("i = " + i);
    }
}

public class BelajarAnonymous1 {
    public static void main(String[] args) {
        A a = new A() {
            void lakukanSesuatu() {
                i++;
                System.out.println("i = " + i);
            }
           
            //Di bawah ini adalah method yang tidak ada di class A
            void newMethod() {
                System.out.println("Hallo, nama saya Anton");
            }
        };
       
        a.lakukanSesuatu(); //Tidak error
        a.newMethod(); //ERROR !!!!!!!
    }
}


  • Anonymous inner class dapat diletakkan sebagai argument dari suatu method. Contoh : [1]
Program 14

class A {
    void lakukanSesuatu() {
        System.out.println("Ini isi aslinya");
    }
}

class B {
    static void demoAnonymousInnerClassSebagaiArgument(A a) {
        a.lakukanSesuatu();
    }
}

public class BelajarAnonymous3 {
    public static void main(String[] args) {
        B.demoAnonymousInnerClassSebagaiArgument(new A() {
            void lakukanSesuatu() {
                System.out.println("Ini method di anonymous inner class");
            }
        });
    }
}


4. Static nested class
  • Static nested class adalah inner class dengan modifier static. [2]
  • Static nested class sebenarnya bukan inner class, static nested class hanyalah top-level class yang di sarangkan di dalam class lain. [2]
  • Karena static, maka untuk membuat instance dari static nested class tidak diperlukan instance dari outer classnya. [2] (tidak seperti regular inner class ataupun method-local inner class [1]).
Contoh : [1]
Program 15

class A {
    static class B {
        void lakukanSesuatu() {
            System.out.println("Hallo");
        }
    }
}

public class StaticNestedClass {
    public static void main(String[] args) {
        A.B b = new A.B(); //cara instansiasi static nested class
        b.lakukanSesuatu();
    }
}


  • Cara instansiasi static nested inner class adalah : [2]
NamaOuterClass.NamaStaticNestedClass varRef = new NamaOuterClass.NamaStaticNestedClass()

  • Static nested class tidak dapat mengakses non-static member dari outer classnya. [2]
Contoh : [1]
Program 16

class A {
    int i = 10;
    static class B {
        void lakukanSesuatu() {
            System.out.println("i = " + i);
        }
    }
}

public class StaticNestedClass2 {
    public static void main(String[] args) {
        A.B b = new A.B();
        b.lakukanSesuatu();
    }
}


Sekian tutorial dari ane semoga ini semua bermanfaat bagi anda semua selamat mencoba dan semoga sukses selalu dan sampai bertemu di tutorial berikutnye .