0% menganggap dokumen ini bermanfaat (0 suara)
33 tayangan

Modul Java Dasar - Arif Rohmadi

Modul ini membahas dasar-dasar pemrograman Java mulai dari membuat program Hello World, komentar, variabel, operator, struktur percabangan IF-ELSE dan perulangan FOR-WHILE. Terdapat pula penjelasan tentang kelas matematika Math dan contoh kode program.

Diunggah oleh

Ringgo Dwi
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
33 tayangan

Modul Java Dasar - Arif Rohmadi

Modul ini membahas dasar-dasar pemrograman Java mulai dari membuat program Hello World, komentar, variabel, operator, struktur percabangan IF-ELSE dan perulangan FOR-WHILE. Terdapat pula penjelasan tentang kelas matematika Math dan contoh kode program.

Diunggah oleh

Ringgo Dwi
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 48

MODUL JAVA DASAR

by: Arif Rohmadi


1. Dasar-Dasar Pemrograman Java

1.1 Membuat Program Hello World

public class Hello {


public static void main (String args[]){

//menampilkan tulisan Hello World pada layar


System.out.println("Hello World"); }
}

Program diatas akan menampilkan tulisan Hello World pada layar. Terdapat beberapa aturan dalam
membuat program dalam java :
a. Nama File harus sama dengan nama kelas program. Pada kasus diatas nama kelas program
adalah Hello, maka nama file harus Hello.java
b. Hanya boleh terdapat satu kelas public pada sebuah file.
c. Kelas yang menjalankan program utama harus memiliki metode public static void main
(String args[])

1.2 Komentar pada Java

Ada 3 jenis komentar pada java :


a. Komentar 1 baris (C++ style)
//contoh penulisan komentar 1 baris bergaya C++
b. Komentar beberapa baris (C style) , diawali tanda /* dan diakhiri dengan tanda */
/* penulisan komentar beberapa baris
Bergaya C */
c. Komentar khusus javadoc
Digunakan untuk meng-generate dokumentasi html untuk program java yang dibuat. Dimulai
dengan tanda /** dan diakhiri dengan tanda */
/** This is an example of special java doc comments used for \n
Generating an html documentation. It uses tags like
@author Arif */

1.3 Pernyataan dalam Java dan Blok

Pernyataan merupakan satu atau lebih baris kode yang diakhiri dengan tanda titik koma. Contoh
pernyataan tunggal
System.out.println("Hello World");
Sedangkan blok merupakan satu atau lebih pernyataan yang terbentang antara kurung kurawal buka (
dan kurung kurawal tutup ).

public class Hai {


public static void main (String args[]){
System.out.println("Hai");
System.out.println("Aku sedang belajar java");
}
}

2 arifrohmadi.blogspot.com
1.4 Keyword dalam Java

Keyword merupakan identifier (penanda) yang telah dipesan atau didefinisikan oleh Java untuk tujuan
tertentu. Sehingga Anda tidak boleh menggunakan keyword untuk penamaan kelas, variabel, method,
dan sejenisnya. Berikut daftar keyword pada java

1.5 Tipe Data

Beberapa tipe data pada java

String bukan termasuk tipe data di java, tetapi merupakan Object. Namun String memiliki keunikan
sendiri yaitu dapat langsung dipakai tanpa harus membuat Object.

1.6 Variabel

Variabel merupakan bagian dari program yang digunakan untuk menyimpan data. Deklarasi variabel
dapat dilakukan sebagai berikut :

<tipe data> <nama variabel> [=initial value]

notes : nilai yang berada pada tanda [] bersifat opsional

3 arifrohmadi.blogspot.com
Variabel Primitif dan Variabel Reference
Pada java variabel dibedakan menjadi 2 tipe : variabel primitif dan variabel reference. Variabel
Primitif merupakan variabel dengan tipe data primitif dimana data disimpan dalam lokasi memori yang
sebenarnya. Sedangkan variabel reference merupakan variabel yang menyimpan alamat dalam lokasi
memori yang menunjuk ke lokasi memori dimana data sebenarnya berada.

Contoh
 Variabel Primitive
int a;
double b = 3.5;
String nama;

 Variabel Reference
Mobil Mercedes = new Mobil("Merah",2008,"Pertamax");

1.7 Operator

Operator merupakan sebuah karakter khusus yang digunakan untuk menghasilkan suatu nilai.

a. Operator Aritmetika

Contoh:
int a=5;
int b=7;
int hasil = a+b;
System.out.println(hasil);

b. Operator Penugasan

4 arifrohmadi.blogspot.com
Contoh:
public class Operator {
public static void main (String args[]){
int a=5;
a *=5;
System.out.println(a);
}

Selain bentuk penyederhanaan operator diatas, ada juga pernyataan untuk incremental
(penambahan) dan decremental (pengurangan) sebanyak 1.
Contoh:
int i = 3;
int j = 7;
int k = ++j + i; //akan menghasilkan k=8+3=11
System.out.println(k);

int i = 3;
int j = 7;
int k = j++ + i; //akan menghasilkan k=7+3=10
System.out.println(k);
Lihat perbedaannya..

c. Operator Pembanding

Contoh:
boolean angka = 10==100;
boolean b = 7 != 3;
System.out.println(angka);
System.out.println(b);

5 arifrohmadi.blogspot.com
d. Operator Logika

Contoh:
boolean banding = 7 == 100 && 100 == 100;
System.out.println(banding);

1.8 Casting

Ada kalanya proses perhitungan melibatkan berbagai tipe data yang berbeda. Oleh karena itu perlu
melakukan proses konversi tipe data. Konversi tipe data dari jangkauan lebih kecil ke jangkauan lebih
besar dinamakan widening (memperluas). Sedangkan konversi tipe data dari jangkauan lebih besar ke
jangkauan lebih kecil dinamakan narrowing (mempersempit).

Contoh ;
long m = (long) 200.75; //proses narrowing dari tipe data double ke long
byte i = 72;
int j = (int) i; //proses widening dari tipe data byte ke integer
System.out.println(m+" "+i+" "+j);

1.9 Kelas Math

Kelas Math berisi sekumpulan method dan konstanta matematika. Beberapa diantaranya

static double toRadians(double sudut);


static double toDegrees(double sudut);
static double sin(double d);
static double cos(double d);
static double tan(double d);
static double asin(double d);
static double acos(double d);
static double atan(double d);
static double exp(double d); // e pangkat d
static double log(double d); // ln(d);
static double sqrt(double d); //
static double pow(double a, double b); // a pangkat b
static double ceil(double d); // pembulatan ke atas
static double floor(double d); //pembulatan ke bawah
static int round(float f); // pembulatan biasa
static long round(double d); // pembulatan biasa
static double rint(double d); // pembulatan ke int terdekat
static double atan2(double a, double b); // cartesius ke polar
static synchronized double random();

Method Lainnya:
static int abs(int i);

6 arifrohmadi.blogspot.com
static long abs(long l);
static float abs(float f);
static double abs(double d);
static int min(int a, int b);
static long min(long a, long b);
static float min(float a, float b);
static double min(double a, double b);
static int max(int a, int b);
static long max(long a, long b);
static float max(float a, float b);
static double max(double a, double b);
Math.E=2.7…; Math.PI=3.14…;

Contoh :

double input = 90;


double input2 = Math.exp(input); //menghitung nilai exponen
double input3 = Math.sin(Math.toRadians(input)); //nilai sinus
double input4 = Math.round(input); //pembulatan biasa
double input5 = Math.ceil(input); //pembulatan keatas
double input6 = Math.floor(input); //pembulatan kebawah
double input7 = Math.pow(input,2); //pangkat 2

2. Struktur Percabangan

Ada 4 jenis percabangan pada java : Percabangan IF, Percabangan IF-ELSE, Percabangan NESTED-IF (IF
Bersarang), dan SWITCH-CASE

2.1 Percabangan IF

Percabangan IF merupakan salah satu bentuk pernyataan yang berfungsi untuk mengambil sebuah
keputusan.

Struktur dari Percabangan IF :

if (kondisi){
//statement yang akan dijalankan}

2.2 Percabangan IF-ELSE

Percabangan IF-ELSE mirip dengan percabangan IF, hanya saja pada percabangan IF-ELSE, memiliki
kondisi untuk else. Maksudnya bila kondisi pada IF tidak terpenuhi, maka perintah pada else akan
dijalankan

Struktur dari Percabangan IF-ELSE:

if (kondisi){
//statement yang akan dijalankan jika true}
else {
//statement yang akan dijalankan jika false}

7 arifrohmadi.blogspot.com
2.3 Percabangan NESTED-IF

Percabangan NESTED-IF merupakan gabungan dari beberapa percabangan IF atau IF-ELSE.

Struktur dari Percabangan NESTED-IF:

if (kondisi1){
//statement dijalankan jika kondisi 1 terpenuhi}
else if (kondisi2){
//statement dijalankan jika kondisi 2 terpenuhi}
else if (kondisi3){
//statement dijalankan jika kondisi 3 terpenuhi}
else {
//statement dijalankan bila semua kondisi tdk terpenuhi}

2.4 Percabangan SWITCH-CASE

Merupakan percabangan untuk kasus banyak pilihan dan biasanya berupa urutan.

Struktur dari Percabangan SWITCH-CASE:

switch (switch_expression){
case case_selector1:
statement1;
statement2;
....
break;
case case_selector2:
statement1;
statement2;
....
break;
....
default:
statement1;
statement2;
----
break;}

3. Struktur Perulangan

3.1 Perulangan For

Merupakan perulangan yang memiliki variabel untuk pengkondisian. Pada perulangan For, terdapat blok
untuk membuat variabel dan melakukan proses pengkondisian. Bentuk umum :

For (kondisi awal; persyaratan atau kondisi akhir; increment/decrement){

Blok Statement;

8 arifrohmadi.blogspot.com
Contoh:

for (int i=0; i<=5; i++){


System.out.println("urutan ke -"+i);

3.2 Perulangan While

Perulangan While melakukan proses perulangan untuk suatu kondisi dimana perulangan akan terus
berjalan selama kondisi bernilai benar, dan akan berhenti bila kondisi bernilai salah. Bentuk umum :

while (kondisi) {

Blok statement;

Contoh :

int counter = 0;
while (counter <=5){ //kondisi perulangan
System.out.println("counter ke -"+counter);
counter++; //increment
}

3.3 Perulangan Do While

Perulangan ini mirip dengan perulangan while, hanya saja minimal instruksi akan dijalankan sekali
meskipun kondisinya bernilai salah. Bentuk umum

Do {

Blok statement;

} While (kondisi);

Contoh :

int counter = 5;
do {
System.out.println("counter ke -"+counter);

9 arifrohmadi.blogspot.com
counter++; //increment
}
while (counter <5);

3.4 Perintah Break dan Continue

Perintah break berfungsi untuk menghentikan proses perulangan.

Contoh :

for (int i=1; i <=10; i++){


System.out.println("counter - "+i);
if (i==5){break;} //kondisi untuk memberhentikan loop
}

Sedangkan perintah continue, digunakan untuk meloncati sebuah perulangan, maksudnya instruksi yang
seharusnya dijalankan dapat dilewati.

Contoh :

for (int i=1; i <=6; i++){


if (i%2 == 0){continue;}
System.out.println("counter - "+i);
}

4. Array

Array merupakan suatu variabel yang dapat menyimpan beberapa data dengan tipe yang sama. Data
disimpan dalam sebuah blok memori yang berdekatan yang kemudian dibagi menjadi beberapa ruang.

Pendeklarasian:

TipeData[] namaArray; atau

TipeData namaArray[];

10 arifrohmadi.blogspot.com
Pendeklarasian sekaligus pembentukan objek

TipeData[] namaArray = new tipedata[jumlah] atau

TipeData namaArray[] = new tipedata[jumlah]

Contoh :

int[] angka = new int[100];


System.out.println ("barisan bilangan : ");
for (int i=1; i<=10; i++){
angka[i]=i;
System.out.print(angka[i]+" ");
}

4.1 Array Multidimensi

Selain deretan variabel satu dimensi, kita dapat membuat array yang berukuran lebih dari satu dimensi,
yaitu array multidimensi.

Pendeklarasian :

TipeData [] [] namaArray = new TipeData [jumlah] [jumlah]

Contoh:

int[][] angka = new int[3][2];


for (int i=0; i<angka.length;i++){
for (int j=0; j<angka[0].length;j++){
angka[i][j]=j;
System.out.println("baris ke-"+i+" kolom ke-"+j+" bernilai "+angka[i][j]);
}
}

5. Pemrograman Berorientasi Objek

5.1 Pemrograman Terstruktur vs Pemrograman Berorientasi Objek

Konsep pemrograman terstruktur memandang sebuah program sebagai suatu prosedur besar yang
selanjutnya dapat dibagi menjadi prosedur-prosedur yang lebih kecil dan saling berinteraksi satu sama
lain. Sedangkan konsep pemrograman berorientasi objek (OOP) membagi program menjadi objek-objek
yang saling berinteraksi satu sama lain. Objek dapat berupa benda yang nyata maupun tidak nyata
(konsep).

11 arifrohmadi.blogspot.com
5.2 Konvensi Pemrograman Java

Ketentuan- ketentuan dalam penamaan di Java

Konvensi selengkapnya ada di http://www.oracle.com/technetwork/java/codeconv-138413.html

5.3 Kelas

Kelas merupakan konsep atau deskripsi dari sesuatu. Bisa kita ibaratkan kelas ini seperti sebuah cetakan
kue yang siap digunakan untuk menciptakan kue-kue (object).

Pendeklarasian Kelas dalam Java

Class NamaKelas

Contoh:

class Kue{
}

Di dalam kelas, kita dapat mendeklarasikan berbagai atribut (disebut sebagai variabel) dan perilaku
(disebut sebagai methods) yang dimiliki oleh object yang akan diciptakan.

Contoh:

class Kue {
String warna, ukuran, rasa; //variabel

String ringan(){ //methods


String kondisi = "aku bisa terapung di air";
return kondisi;

}
}
5.4 Objek

Objek merupakan perwujudan (instansiasi) dari Kelas. Bila Kelas sebagai cetakan kue, maka objek
merupakan kue yang diciptakan dari cetakan tersebut.

12 arifrohmadi.blogspot.com
Deklarasi Object

//membuat objek dari suatu kelas menggunakan new

nama kelas nama_objek = new nama_kelas

//memanggil method dari objeknya


nama_objek.nama_method();

//mengeset atribut
nama_objek.nama_atribut=value;

Di dalam kelas kita mendeklarasikan berbagai variabel/properties dan method. Adapun objek
merupakan instansiasi (perwujudan) dari kelas yang ada.

Contoh:

public class Kue {


//variabel
String warna, ukuran, rasa;

String ringan() { //methods


String kondisi = "aku bisa terapung di air";
return kondisi;
}

public static void main(String args[]) {


Kue bolu = new Kue(); //membuat objek kue bolu

//mengeset nilai variabel


bolu.warna = "cokelat";
bolu.ukuran = "sedang";
bolu.rasa = "manis";

bolu.ringan(); //memanggil methods

System.out.println("sku kue " + bolu.warna + ", " + bolu.ukuran + ",


" + bolu.rasa
+ ", dan "+bolu.ringan());
}
}

5.5 Methods

Ada 2 jenis Methods dalam java :

1. Methods yang memiliki nilai kembalian (dalam pemrograman terstruktur disebut Fungsi).

13 arifrohmadi.blogspot.com
2. Methods yang tidak memiliki nilai kembalian (dalam pemrograman terstruktur disebut
Prosedur)

Contoh :

class Mobil {

void klakson() { //tidak memiliki nilai kembalian, ditandai dengan void


System.out.println("piiiiiiiiiim");
}

String ngebut(String aksi) { //memiliki nilai kembalian (ada return)


return aksi;
}
}

public class Transport {

public static void main(String args[]) {


Mobil lamborgini = new Mobil();
lamborgini.klakson();
System.out.println(lamborgini.ngebut("broooom"));

}
}

5.6 Variabel This

Variabel this merupakan variabel yang digunakan untuk mengacu kedalam class dimana kita coding. Jadi
misalkan kita coding di class titik lalu di dalam salah satu method kita mengetikan this, berarti kita
mengacu kepada class titik.

//penulisan variabel tanpa this


public class Titik{
int x = 0;
int y = 0;

//constructor
public Titik(int a, int b){
x = a;
y = b;
}
}

//penulisan variabel dengan this


public class Titik{
int x = 0;
int y = 0;

//constructor
public Titik(int x, int y){

14 arifrohmadi.blogspot.com
this.x = x;
this.y = y;
}
}

5.7 Konstruktor

Konstruktor merupakan metode yang secara otomatis dipanggil ketika objek dipanggil. Cara membuat
konstruktor : memiliki nama yang sama dengan kelas, tidak mengembalikan nilai dan tidak
menggunakan kata kunci void.

public class Motor {

String bahan = "baja";

//konstruktor
public Motor() {
System.out.println("mesin pembuat rangka motor siap dijalankan");
}

public static void main(String args[]) {


Motor Yamaha = new Motor();
System.out.println(Yamaha.bahan);
}
}

5.8 Hak Akses Dalam Java

1. public : dapat digunakan dari luar kelas maupun package


2. protected : dapat digunakan dari sub-class atau class lain dalam satu package
3. private : hanya digunakan oleh class tersebut saja
4. tanpa hak akses (default): dapat digunakan class lain dalam satu package

secara lebih detail dapat dilihat pada tabel

Aksesibilitas Public Private Protected Default


Dari kelas yang sama ya ya ya ya
Dari sembarang kelas dalam ya tidak ya ya
package yang sama

Dari sembarang kelas di luar ya tidak tidak tidak


package
Dari sub kelas dalam package ya tidak ya ya
yang sama
Dari sub kelas di luar package ya tidak ya tidak

15 arifrohmadi.blogspot.com
5.9 Paket (Package)

Paket dalam java digunakan untuk mengelompokkan beberapa kelas agar lebih teratur dan mudah
dalam melakukan maintenance.

Deklarasi :

Pembuatan paket :

Package NamaPackage

Nama paket tidak boleh diawali dengan nomor dan tidak boleh mengandung karakter unik dan spasi.
Paket biasanya bertingkat, untuk memberikan tingkatan pada paket, dapat menggunakan tanda titik (.)

Bila Anda ingin menggunakan kelas yang berada di luar paket dimana Anda bekerja, maka Anda perlu
mengimport paket dimana kelas tersebut berada

Import NamaPackage.NamaKelas

Contoh:

Misalkan kita mempunyai dua buah paket, paket kendaraan dan paket udara yang berada di dalam
paket kendaraan.

a. Paket udara
package kendaraan.udara;

public class Pesawat {

public Pesawat() {
System.out.println("Pesawat Ready");
}

public String terbang() {


String aksi = "wuuuuuuuuuush";
return aksi;
}
}
b. Paket kendaraan
package kendaraan;

import kendaraan.udara.Pesawat;

public class Kendaraan {

public static void main(String args[]) {


Pesawat garuda = new Pesawat();

16 arifrohmadi.blogspot.com
System.out.println(garuda.terbang());
}
}

5.10 Pewarisan (Inheritance)

Merupakan mekanisme dimana sebuah kelas dapat mewarisi seluruh atribut atau methods milik kelas
lain dengan ketentuan tertentu. Ibaratnya kalau di dunia nyata, seorang anak pasti mewarisi sifat dari
orang tuanya. Kelas yang mewariskan sifat disebut superclass, sedangkan kelas yang mewarisi sifat
disebut subclass. Kelas yang ingin mewarisi sifat dari superclass menggunakan keyword extends,
sedangkan untuk memanggil atribut atau method dari superclass menggunakan keyword super.
class Orang{
String nama,alamat;
public Orang(String n,String a){
nama=n;
alamat=a;
}
}

class Mahasiswa extends Orang { //mahasiswa mewarisi atribut dan method Orang
String nim;
Mahasiswa(String n,String a,String i){
super(n,a); //pemanggilan superclass menggunakan keyword super
nim=i;
}
void belajar(){
System.out.println("belajar sungguh-sungguh");
}
}

public class JenisOrang {


public static void main (String args[]){
Mahasiswa arif = new Mahasiswa("arif","baki","M0508031");
arif.belajar();
}
}

Pada contoh diatas, kelas Mahasiswa merupakan turunan dari kelas Orang. Jadi meskipun kelas
Mahasiswa tidak memiliki atribut nama dan alamat, tetapi karena kelas Mahasiswa merupakan turunan
dari kelas Orang, maka semua atribut maupun methods yang dimiliki kelas Orang juga ada pada kelas
Mahasiswa.

17 arifrohmadi.blogspot.com
5.11 Keyword Final

Keyword final merupakan keyword yang dapat digunakan untuk menandai bahwa suatu kelas, atribut,
atau methods sudah tidak dapat diubah lagi. Selain itu ketika menggunakan keyword final, atribut harus
langsung dideklarasikan. Jika tidak dideklarasikan langsung, akan terjadi kesalahan (error).

Contoh:
public class Final {

private final double pi = 3.14;

void ubahpi(double pi) {


this.pi = pi;
}
}
Ketika atribut pi kita deklarasikan ulang, akan muncul pesan kesalahan karena keyword final
dideklarasikan ulang

5.12 Polimorfisme

Polimorfisme merupakan kemampuan untuk memperlakukan object yang memiliki bentuk atau perilaku
yang berbeda.

Implementasi konsep polimorfisme : [1]Overloading dan, [2]Overriding

5.12.1 Overloading

Overloading ini ada 2 : Overloading pada konstruktor dan Overloading pada methods. Overloading
merupakan mekanisme membuat lebih dari satu konstruktor atau methods pada sebuah kelas, dengan
nama yang sama namun harus memiliki parameter yang berbeda.

Contoh:

public class Motor {


String bahan = "baja";

//konstruktor
public Motor() {
System.out.println("mesin pembuat rangka motor siap dijalankan");
}

18 arifrohmadi.blogspot.com
public Motor(String warna){ //overloading konstruktor
System.out.println("bahan berwarna "+warna);
}

String aksi(){
String suara="broom";
return suara;
}

String aksi(String klakson){ //overloading methods


return klakson;
}

public static void main(String args[]) {


Motor Yamaha = new Motor("hitam");
System.out.println(Yamaha.aksi());
System.out.println(Yamaha.aksi("piiiiiiim"));
}
}

5.12.2 Overriding

Berbeda dengan Overloading, Overriding merupakan kemampuan subclass (kelas turunan) untuk
menimpa methods dari superclass (kelas induk), yaitu dengan cara menggunakan nama dan parameter
yang sama pada methods.

Contoh
class Bayi{
void lari(){
System.out.println("Tidak bisa lari");
}
}

public class Remaja extends Bayi {

@Override
void lari() {
System.out.println("bisa lari");
}

public static void main (String args[]){


Remaja Arif = new Remaja();
Arif.lari();

}
}

19 arifrohmadi.blogspot.com
5.13 Abstract dan Interface

Abstract merupakan kelas yang memiliki methods namun tidak dideklarasikan, pendeklarasian dilakukan
pada kelas turunannya. Untuk mengimplementasikan abstraksi menggunakan keyword extends.

public abstract class Hewan {

public abstract void suara();

Contoh:
public abstract class Hewan {

public abstract void suara();


}

class Kucing extends Hewan {

public void suara() {


System.out.println("Meooong....");
}
}

class Ayam extends Hewan {

public void suara() {


System.out.println("kukuruyuuk....");
}
}

class HewanDarat {

public static void main(String args[]) {


Kucing anggora = new Kucing();
anggora.suara();
}
}

Interface : merupakan mekanisme dimana kita dapat menentukan methods yang harus ada pada kelas.
Mirip dengan abstract tetapi memiliki sedikit perbedaan.

Abstract Interface
Bisa berisi abstract dan non-abstract method. Hanya boleh berisi abstract method.
Method boleh bersifat static. Method tidak boleh bersifat static.

20 arifrohmadi.blogspot.com
Method boleh bersifat final. Method tidak boleh bersifat final.
Kita harus menuliskan sendiri modifiernya. Kita t idak perlu susah2 menulis public abstract di depan
nama method. Karena secara imp lisit, modifier untuk
method di interface adalah public dan abstract.
Bisa mendeklarasikan constant dan instance Hanya bisa mendeklarasikan constant. Secara implisit
variable. variable yang dideklarasikan di interface bersifat
public, static dan final.
Suatu abstact class hanya bisa meng- Suatu interface bisa meng-extend satu atau lebih interface
extend satu abstract class lainnya. lainnya.
Suatu abstract class hanya bisa meng- Suatu interface hanya bisa meng-extend interface lainnya.
extend satu abstract class dan meng- Dan tidak bisa meng-implement class atau interface lainnya.
implement beberapa interface.
Untuk mengimplementasikan interface menggunakan keyword implements.

Contoh;
abstract class HewanDarat {
public abstract void jalan();
}

abstract class HewanLaut {


public abstract void berenang();
}

interface infHewanDarat {
public abstract void jalan();
}

interface infHewanLaut {
public abstract void berenang();
}

class Katak extends HewanDarat {


public void jalan() {
System.out.println("jalan diatas tanah");
}
}

class KatakHijau implements infHewanDarat, infHewanLaut {


public void jalan() {
System.out.println("jalan diatas tanah");
}
public void berenang(){
System.out.println("berenang di air");
}
}

public class Hewan {


public static void main(String args[]) {
Katak k1 = new Katak();
k1.jalan();
KatakHijau kh1 = new KatakHijau();
kh1.jalan();kh1.berenang();
}
}

21 arifrohmadi.blogspot.com
Notes : baik pada abstract maupun interface, hak akses tidak boleh private.

5.14 Inner Class

Java mendukung pembuatan kelas di dalam kelas (inner class). Cara membuatnya seperti membuat kelas
biasa, hanya saja letak kelas berada di dalam kelas lain.

Contoh :
public class Hitung {

class Tambah { //inner class


void tambah(double a, double b) {
double hasil = a + b;
System.out.println(hasil);
}
}

public static void main(String args[]) {


System.out.println("Selamat belajar");

//membuat objek dari inner class (kelas Tambah)


Hitung.Tambah bil = new Hitung().new Tambah();
bil.tambah(5, 7);
}
}

5.15 Keyword Static

Keyword static membolehkan kita untuk mengakses sebuah atribut atau metode dari kelas secara
langsung tanpa harus membuat objek dari kelas tersebut.

Contoh:
public class Berhitung {
public static int tambah (int a, int b){ //static
return a+b;
}

public double tambah (double a, double b){ //non static


return a+b;
}

public static void main (String args[]){


int hasil1 = Berhitung.tambah(2, 3); //static

22 arifrohmadi.blogspot.com
System.out.println(hasil1);

Berhitung hasil2 = new Berhitung(); //non static, perlu membuat objek


System.out.println(hasil2.tambah(5, 5));
}
}

5.16 Penanganan Kesalahan

Ada 2 jenis kesalahan, [1] kesalahan pada saat kompilasi program, dan [2] kesalahan ketika program
dijalankan. Kalau kesalahan terjadi saat kompilasi, maka program tidak akan dijalankan. Akan tetapi bila
kesalahan terjadi saat program berjalan, maka program akan menjadi error. Oleh karena itu perlu
mekanisme penanganan kesalahan. Dalam java penanganan kesalahan menggunakan mekanisme Try-
Catch.

Hirarki Exception

Deklarasi

a. Penanganan Tunggal
try {

//isi yang memungkinkan error

} catch (jenis error){

23 arifrohmadi.blogspot.com
//dijalankan jika tidak terjadi error

Contoh:
public class Bilangan {

public static void main(String args[]) {


try {
int a = 5;
int b = 0;
int c = a / b;
System.out.println(c);
} catch (Throwable e) {
System.out.println("terjadi error");
System.out.println(e.getMessage());
}
}
}

b. Penanganan Bertingkat
try {

} catch (jenis error 1) {

//jika jenis error 1 terjadi

} catch (jenis error 2) {

//jika jenis error 2 terjadi

}.....

catch (jenis error n) {

//jika jenis error n terjadi

Contoh:
public class Bilangan {

public static void main(String args[]) {


try {
int[] bil=new int[3];
bil[4]=7;

int a = 5;
int b = 0;
int c = a / b;
System.out.println(c);

24 arifrohmadi.blogspot.com
} catch (ArithmeticException e) {
System.out.println("terjadi error");
System.out.println(e.getMessage());
} catch (IndexOutOfBoundsException e){
System.out.println("error");
System.out.println(e.getMessage());
}
}
}

c. Melontarkan Exception

Melontarkan Exception berfungsi untuk memberitahukan kepada user ketika terjadi kesalahan, misalnya
seperti mahasiswa salah dalam memasukkan nim, maka perlu ada pemberitahuan kesalahan input data.

Pelontaran kesalahan menggunakan keyword throws diikuti dengan kelas exception-nya.

Contoh:
public class Mahasiswa {
String nim;
public String getNim(){
return nim;
}

public void setNim(String nim) throws Throwable{


if (nim==null){
throw new Throwable("nim harus diisi");
}
this.nim=nim;
}
public static void main (String args[]){
try {
Mahasiswa m1 = new Mahasiswa();
m1.setNim(null);
} catch (Throwable e){
System.out.println("terjadi error");
System.out.println(e.getMessage());
}
}
}

25 arifrohmadi.blogspot.com
d. Penggunaan Blok Finally

Blok Finally merupakan blok yang selalu dijalankan pada proses try catch, terlepas terjadi error pada
program ataupun tidak.

Contoh:
public class Mahasiswa {
String nim;
public String getNim() {
return nim;
}

public void setNim(String nim) throws Throwable {


if (nim == null) {
throw new Throwable("nim harus diisi");
}
this.nim = nim;
}

public static void main(String args[]) {


try {
Mahasiswa m1 = new Mahasiswa();
m1.setNim(null);
} catch (Throwable e) {
System.out.println("terjadi error");
System.out.println(e.getMessage());
} finally {
System.out.println("program tetap jalan, apapun yang terjadi");
}
}
}

5.17 Multi Threading

Thread merupakan sekumpulan instruksi yang dieksekusi secara independen. Sedangkan makna multi
threading merupakan suatu kemampuan yang memungkinkan beberapa kumpulan instruksi dijalankan
secara bersamaan dalam sebuah program.

Contoh:
class Mobil implements Runnable{ //Runnable merupakan interface bawaan java
String nama;
public Mobil(String m){
nama=m;
}
public void run(){ //implementasi interface Runnable
for (int i=0;i<4;i++){
try {
Thread.currentThread().sleep(1000); //jeda 1 detik

26 arifrohmadi.blogspot.com
} catch (InterruptedException ie){
System.out.println("terinterupsi");
}
int j = i+1;
System.out.println("Thread "+nama+" : Posisi"+j);
}
}
}

public class ThreadMobil {


public static void main (String args[]){
Thread fortuner = new Thread(new Mobil("Fortuner"));
Thread avanza = new Thread(new Mobil("Avanza"));
fortuner.start();avanza.start(); //menjalankan thread
}
}

6. GUI Dasar

6.1 Komponen Swing dan Manajemen Layout

a. Membuat Frame

Ada 2 cara untuk membuat frame :

 Membuat class yang objek utamanya diinstansiasi dari class JFrame

Contoh :

JFrame frame = new JFrame (“teks….”);

 Membuat class yang diturunkan dari class JFrame. Contoh :

class Frame extends JFrame {

b. Meletakkan komponen ke Frame


 Mendeklarasikan komponen-komponen

JLabel namaKomponen = new JLabel (“teks…”);

27 arifrohmadi.blogspot.com
c. Memilih Layout
 Cara 1 :

getContentPane ().setLayout (new FlowLayout());

 Cara 2 :

Container konten = getContentPane();

Konten.setLayout (new FlowLayout());

 Cara 3 :

frame.add (nama Komponen);

d. Memasukkan komponen-komponen ke frame


 Cara 1 :

getContentPane().add(namaKomponen);

 Cara 2 :

Konten.add(namaKomponen);

6.2 Pengaplikasian

 Membuat Text Field

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionListener;

public class TextField {

private JFrame layar;

private JLabel l1,l2;

private JTextField tf1;

private JPasswordField psw;

private JButton b1,b2;

//membuat instance dari kelas-kelas tersebut

28 arifrohmadi.blogspot.com
public TextField(){

layar = new JFrame ("Text Field");

l1 = new JLabel ("Username : ");

l2 = new JLabel ("Password : ");

tf1 = new JTextField (25);

psw = new JPasswordField (25);

b1 = new JButton("OK");

b2 = new JButton ("Cancel");

Container c = layar.getContentPane();

c.setLayout(new FlowLayout());

c.add(l1);

c.add(tf1);

c.add(l2);

c.add(psw);

c.add(b1);

c.add(b2);

b1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

JOptionPane.showMessageDialog(null, "Pastikan Data diisi dengan Benar");

});

b2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent ae) {

tf1.setText(null);

psw.setText(null);

29 arifrohmadi.blogspot.com
});

layar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

layar.setSize(380,150);

layar.setVisible(true);

public static void main(String[] args) {

new TextField();

Form CheckList

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class CheckList extends JFrame{

//membuat instance baru dari CheckList

public CheckList(){

JPanel panel1 = new JPanel();

JPanel panel2 = new JPanel();

panel1.setLayout(new GridLayout(3,1));

30 arifrohmadi.blogspot.com
panel2.setLayout(new GridLayout(3,1));

Container c = this.getContentPane();

c.setLayout(new GridLayout(1,2));

c.add(panel1);

c.add(panel2);

JCheckBox cb1 = new JCheckBox("WIndows");

JCheckBox cb2 = new JCheckBox("Linux");

JCheckBox cb3 = new JCheckBox("Max OS");

panel1.setBorder(BorderFactory.createTitledBorder("Sistem Operasi"));

panel1.add(cb1);

panel1.add(cb2);

panel1.add(cb3);

JRadioButton rb1 = new JRadioButton("Distributor");

JRadioButton rb2 = new JRadioButton("Reseller");

JRadioButton rb3 = new JRadioButton("Partner");

//daftarkan setiap radiobutton sebagai anggota grup

ButtonGroup rbgroup = new ButtonGroup();

rbgroup.add(rb1);

rbgroup.add(rb2);

rbgroup.add(rb3);

panel2.setBorder(BorderFactory.createTitledBorder("Status"));

panel2.add(rb1);

panel2.add(rb2);

panel2.add(rb3);

31 arifrohmadi.blogspot.com
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocation(60,60);

this.setSize(300,200);

this.setVisible(true);

public static void main(String[] args) {

new CheckList();

 Program Kuas

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Kuas extends JPanel{

private Point posisi;

private Color warna;

public Kuas(){

addMouseMotionListener(new MMListener());

32 arifrohmadi.blogspot.com
}

class MMListener extends MouseMotionAdapter {

//tambahkan kode untuk tombol mouse

public void mouseDragged(MouseEvent ev) {

if (ev.isMetaDown()){

System.out.println("Right clicked");

posisi = ev.getPoint();

warna = getBackground();

repaint();

else {

posisi = ev.getPoint();

System.out.println("Repaint and clicked at "

+ posisi.x + " "+posisi.y);

warna = Color.RED;

repaint();

public void paintComponent (Graphics g){

g.setColor(warna);

if (posisi != null){

g.fillOval(posisi.x, posisi.y, 10, 10);

public static void main(String[] args) {

JFrame layar = new JFrame();

33 arifrohmadi.blogspot.com
Kuas m = new Kuas();

m.setSize(300,300);

Container c = layar.getContentPane();

c.setLayout(null);

c.add(m);

layar.setLocation(200,200);

layar.setSize(300,300);

layar.setTitle("Program Kuas");

layar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

layar.show();

7. GUI Lanjutan

Tampilan Window NetBean

34 arifrohmadi.blogspot.com
7.1 Membuat Form Sederhana

Ubah property name dan text dari masing-masing komponen form menjadi seperti berikut:

Komponen Name Text


jLabel1 lblNama Nama
jLabel2 lblJK Jenis Kelamin
jLabel3 lblHobi Hobi
jLabel4 lblJurusan Jurusan
jTextField1 txtNama Kosong
jRadioButton1 rbLaki Laki-Laki
jRadioButton2 rbPerempuan Perempuan
jCheckBox1 cbHobi1 Makan
jCheckBox2 cbHobi2 Tidur
jCheckBox3 cbHobi3 Internetan
jCheckBox4 cbHobi4 Shopping
listBox1 lstJurusan List Nama Jurusan
jButton1 btnSubmit Submit

Tambahkan code berikut pada btnSubmit

private void btSubmitActionPerformed(java.awt.event.ActionEvent evt) {


String nama = "";
String jenisKelamin = "";
String hobi = "";
String jurusan = "";
String info = "";

35 arifrohmadi.blogspot.com
nama = txtNama.getText();

if (rbLaki.isSelected()) {
jenisKelamin += "Laki-Laki";
} else {
jenisKelamin += "Perempuan";
}

if (cbHobi1.isSelected()) {
hobi += "Makan ";
}
if (cbHobi2.isSelected()) {
hobi += "Tidur ";
}
if (cbHobi3.isSelected()) {
hobi += "Internetan ";
}
if (cbHobi4.isSelected()) {
hobi += "Shopping ";
}

jurusan = lstJurusan.getSelectedValue().toString();

info = "Nama Saya adalah " + nama + "\n.";


info += "Jenis Kelamin : " + jenisKelamin + "\n.";
info += "Hobi : " + hobi + "\n.";
info += "Jurusan : " + jurusan;
JOptionPane.showMessageDialog(null, info);

36 arifrohmadi.blogspot.com
7.2 Membuat Kalkulator Sederhana

Komponen Name Text


jButton1 btn0 0
jButton2 btn1 1
jButton3 btn2 2
jButton4 btn3 3
jButton5 btn4 4
jButton6 btn5 5
jButton7 btn6 6
jButton8 btn7 7
jButton9 btn8 8
jButton10 btn9 9
jButton11 btnTitik .
jButton12 btnHapus c
jButton13 btnTambah +
jButton14 btnKurang -
jButton15 btnKali *
jButton16 btnBagi /
jButton17 btnHasil =
jTextField1 Display kosong

String angka="";
double hasil, angka1,angka2;
int pilih;

public Kalkulator() {
initComponents();
}

private void btn0ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="0";
display.setText(angka);
}

private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="1";
display.setText(angka);
}

private void btnTitikActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
angka +=".";
display.setText(angka);
}

private void btn2ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="2";
display.setText(angka);
}

private void btn3ActionPerformed(java.awt.event.ActionEvent evt) {

37 arifrohmadi.blogspot.com
angka +="3";
display.setText(angka);
}

private void btn4ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="4";
display.setText(angka);
}

private void btn5ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="5";
display.setText(angka);
}

private void btn6ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="6";
display.setText(angka);
}

private void btn7ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="7";
display.setText(angka);
}

private void btn8ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="8";
display.setText(angka);
}

private void btn9ActionPerformed(java.awt.event.ActionEvent evt) {


angka +="9";
display.setText(angka);
}

private void btnTambahActionPerformed(java.awt.event.ActionEvent evt) {


angka1 = Double.parseDouble(angka);
display.setText("+");
angka = "";
pilih = 1;
}

private void btnKurangActionPerformed(java.awt.event.ActionEvent evt) {


angka1 = Double.parseDouble(angka);
display.setText("-");
angka = "";
pilih = 2;
}

private void btnKaliActionPerformed(java.awt.event.ActionEvent evt) {


angka1 = Double.parseDouble(angka);
display.setText("*");
angka = "";
pilih = 3;
}

private void btnBagiActionPerformed(java.awt.event.ActionEvent evt) {


angka1 = Double.parseDouble(angka);

38 arifrohmadi.blogspot.com
display.setText("/");
angka = "";
pilih = 4;
}

private void btnHasilActionPerformed(java.awt.event.ActionEvent evt) {


switch (pilih ){
case 1 :
angka2 = Double.parseDouble(angka);
hasil = angka1 + angka2;
angka = Double.toString(hasil);
display.setText(angka);
break;

case 2 :
angka2 = Double.parseDouble(angka);
hasil = angka1 - angka2;
angka = Double.toString(hasil);
display.setText(angka);
break;

case 3 :
angka2 = Double.parseDouble(angka);
hasil = angka1 * angka2;
angka = Double.toString(hasil);
display.setText(angka);
break;

case 4 :
angka2 = Double.parseDouble(angka);
hasil = angka1 / angka2;
angka = Double.toString(hasil);
display.setText(angka);
break;

default :
break;
}
}

private void btnHapusActionPerformed(java.awt.event.ActionEvent evt) {


display.setText("");
angka1=0;
angka2=0;
hasil =0;
angka="";
}

39 arifrohmadi.blogspot.com
8. Java Database Connectivity (JDBC)

 MySQL

8.1 Membuat Database Baru

CREATE DATABASE NAMA_DATABASE;

8.2 Menampilkan Database yang Telah Dibuat

SHOW DATABASES;

8.3 Menghapus Database yang sudah dibuat

DROP DATABASE NAMA_DATABASE;

40 arifrohmadi.blogspot.com
8.4 Menggunakan Database yang Telah Dibuat

USE NAMA_DATABASE;

8.5 Membuat Tabel baru pada Database yang telah dipilih

CREATE TABLE NAMA_TABLE (

NAMA_ATRIBUT TIPE_DATA [KETERANGAN],

NAMA_ATRIBUT TIPE_DATA [KETERANGAN],

41 arifrohmadi.blogspot.com
Nb: KETERANGAN boleh disertakan, boleh tidak, sesuai dengan kebutuhan

8.6 Menampilkan Tabel

SHOW TABLES;

8.7 Menghapus Tabel

DROP TABLES NAMA_TABLE;

8.8 Menambah Data pada Tabel

INSERT INTO NAMA_TABLE (

(NAMA_ATRIBUT,…)

VALUES

(NILAI_ATRIBUT,…),

(NILAI_ATRIBUT,…)

);

42 arifrohmadi.blogspot.com
8.9 Menampilkan Data

SELECT [NAMA_ATRIBUT,…]

FROM [NAMA_TABEL,…];

Bila ingin menampilkan seluruh data pada tabel :

SELECT * FROM [NAMA_TABEL,…];

Bila ingin menampilkan data dengan criteria tertentu

SELECT [NAMA_ATRIBUT,…]

FROM [NAMA_TABEL,…]

[WHERE KONDISI];

8.10 Mengubah Data pada Tabel

UPDATE NAMA_TABEL

SET

NAMA_ATRIBUT = “NILAI BARU”,

43 arifrohmadi.blogspot.com
[WHERE KONDISI];

8.11 Menghapus Data pada Tabel

DELETE FROM NAMA_TABEL

[WHERE KONDISI];

8.12 Membuat Form Insert, Update, Delete Sederhana

Buat Form seperti berikut

44 arifrohmadi.blogspot.com
Ubah property name dan text dari masing-masing komponen form menjadi seperti berikut:

Komponen Name Text


jTextField1 Kodemk kosong
jTextField2 Matkul kosong
jTextField3 Sks kosong
jButton1 btnClear Clear
jButton2 btnAdd Add
jButton3 btnEdit Edit
jButton4 btnDelete Delete

Source Code Program

import java.sql.*;
import javax.swing.JOptionPane;

public class Kuliah extends javax.swing.JFrame {


Connection con;
String url, db, driver, user;
public Statement stat;
public ResultSet rs;

public void connect() {


con = null;
url = "jdbc:mysql://localhost:3306/";
db = "kuliah";
driver = "com.mysql.jdbc.Driver";
try {
Class.forName(driver);
} catch (ClassNotFoundException cnfe) {
System.err.println("Class driver tidak ada : " +
cnfe.getMessage());
}

45 arifrohmadi.blogspot.com
}

public void hapus() {


kodemk.setText("");
matkul.setText("");
sks.setText("");
kodemk.requestFocus();

public Kuliah() {
initComponents();
}

private void kodemkActionPerformed(java.awt.event.ActionEvent evt) {


connect();
try {
con = DriverManager.getConnection(url + db, "root", "");
stat = con.createStatement();
String kode = "select * from mk where kodemk = '" +
kodemk.getText() + "'";
rs = stat.executeQuery(kode);
ResultSetMetaData meta = rs.getMetaData();
rs.beforeFirst();
if (rs.next()) {
matkul.setText(rs.getString("matkul"));
sks.setText(rs.getString("sks"));
} else {
JOptionPane.showMessageDialog(null, "Maaf data tidak
ditemukan", "information", JOptionPane.INFORMATION_MESSAGE);
hapus();
kodemk.requestFocus();
}
} catch (SQLException se) {
System.err.println("Terjadi kesalahan perintah SQL" +
se.getMessage());
}
}

//menghapus konten pada form


private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
hapus();
}

//menambah data tabel


private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
connect();
try {
con = DriverManager.getConnection(url + db, "root", "");
stat = con.createStatement();
String kode = "insert into mk values ('" + kodemk.getText() +
"','" + matkul.getText() + "','" + sks.getText() + "')";
int tambah = stat.executeUpdate(kode);
if (tambah == 1) {
JOptionPane.showMessageDialog(this, "Berhasil Menambah Data",
"informasi", JOptionPane.INFORMATION_MESSAGE);
System.out.println("1 data berhasil ditambahkan");

46 arifrohmadi.blogspot.com
hapus();
kodemk.requestFocus();
} else {
JOptionPane.showMessageDialog(this, "Gagal Menambah Data",
"informasi", JOptionPane.INFORMATION_MESSAGE);
}
} catch (SQLException se) {
JOptionPane.showMessageDialog(this, "Maaf kode tersebut sudah ada
", "CRITICSAL", JOptionPane.INFORMATION_MESSAGE);
}
}

//update data tabel


private void btnEditActionPerformed(java.awt.event.ActionEvent evt) {
connect();
try {
con = DriverManager.getConnection(url+db,"root","");
stat = con.createStatement();
String kode = "update mk set matkul =
'"+matkul.getText()+"',sks='"+sks.getText()+"' where
kodemk='"+kodemk.getText()+"'";
int edit = stat.executeUpdate(kode);
if (edit==1){
JOptionPane.showMessageDialog(this, "Data berhasil
diupdate","informasi",JOptionPane.INFORMATION_MESSAGE);
hapus();
kodemk.requestFocus();
}
else {
JOptionPane.showMessageDialog(this, "Gagal memperbaiki
data","informasi",JOptionPane.INFORMATION_MESSAGE);
}
} catch(SQLException se){
JOptionPane.showMessageDialog(this, "Terjadi kesalahan perintah
SQL"+se.getMessage(),"CRITICSAL",JOptionPane.INFORMATION_MESSAGE);
}
}

//menghapus data tabel


private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {
connect();
try{
con = DriverManager.getConnection(url+db, "root","");
stat = con.createStatement();
String kode = "delete from mk where kodemk =
'"+kodemk.getText()+"'";
int hapus = stat.executeUpdate(kode);
if (hapus==1){
JOptionPane.showMessageDialog(this, "Data berhasil
dihapus","informasi",JOptionPane.INFORMATION_MESSAGE);
hapus();
kodemk.requestFocus();
} else {
JOptionPane.showMessageDialog(this, "Gagal menghapus
data","informasi",JOptionPane.INFORMATION_MESSAGE);
}
} catch(SQLException se){

47 arifrohmadi.blogspot.com
JOptionPane.showMessageDialog(this, "Terjadi kesalahan
perintah"+se.getMessage(),"CRITICSAL",JOptionPane.INFORMATION_MESSAGE);
}
}

Referensi

Dasar OOP Bayu Pratama

Java Dasar Eko Kurniawan Khannedy

Menguasai Java 2 dan OOP Benny Hermawan

Modul Praktikum PBO UKDW

Modul Pemrograman Java Ardhi Wijayanto

OOP Lanjut Palgunadi

Pemrograman Berbasis Objek Sandya Yuda Pratama

Pemrograman Berorientasi Objek dengan Java – Novrido Charibaldi, Agus Sasmito Aribowo

Slide Java Fundamental Romi Satria Wahono

48 arifrohmadi.blogspot.com

Anda mungkin juga menyukai