• Tidak ada hasil yang ditemukan

Struktur Class Lanjutan

N/A
N/A
Protected

Academic year: 2021

Membagikan "Struktur Class Lanjutan"

Copied!
61
0
0

Teks penuh

(1)

Struktur Class Lanjutan

(2)

Subtopik Struktur Class Lanjutan

 For-each loop  Varargs

 Autoboxing dan Unboxing

 Enum

 Static

 Inner class

 “regular” inner class

 Method-local inner class

 Anonymous inner class

(3)
(4)

Advanced or Enhanced For Loop

 For-each loop diperkenal di Java versi 5.

 Umumnya digunakan untuk menjejaki (traverse)

array atau unsur dalam collection.

 Kegunaan:

 Membuat code lebih mudah dibaca

 Mengeliminasi kemungkinan error

 Syntax:

(5)

Contoh for-each loop

class ForEachExample1{

public static void main (String args[]){ int arr[]={12,13,14,44}; for(int i:arr){ System.out.println(i); } } } import java.util.*; class ForEachExample2{ public static void main

(String args[]){

ArrayList<String> list=new ArrayList <String>(); list.add(“ade"); list.add(“irma"); list.add(“sari"); for(String s:list){ System.out.println(s); } }

(6)
(7)

Variable Argument (varargs)

 Varargs membolehkan method untuk argumen yang

belum diketahui jumlahnya.

 Sebelum adanya varargs, biasanya kita

menggunakan overloaded method atau array

sebagai parameter. Namun hal ini mempersulit code maintenance.

 Jika kita tidak tahu berapa parameter yang akan

diantar pada method, maka gunakan varargs.

 Syntax varargs (… setelah tipe data):

(8)

Contoh penggunaan varargs

class VarargsExample1{

static void display(String... values){

System.out.println("display method invoked ");

}

public static void main(String

args[]){ display();//zero argument display("my","name","is","varargs"); //four arguments } class VarargsExample2{

static void display(String... values){

System.out.println("display method invoked "); for(String s:values){ System.out.println(s); } }

public static void main(String args[]){

display();//zero argument display("hello");//one argument display("my","name","is","varargs"); //four arguments } }

(9)

Aturan penggunaan varargs

 Ada aturan sewaktu menggunakan varargs, jika

tidak diikuti maka code tidak berhasil dikompil

 Hanya boleh ada satu varargs dalam method.

 Varargs haruslah argumen yang paling akhir.

 Contoh varargs yang salah:

void method(String... a, int... b){}//Compile time errorvoid method(int... a, String b){}//Compile time error

(10)

Contoh varargs

class VarargsExample3{

static void display(int num, String... values){

System.out.println("number is "+num);

for(String s:values){

System.out.println(s); }

}

public static void main(String args[]){

display(500,"hello");//one argument

display(1000,"my","name","is","varargs");//four arguments }

(11)
(12)

Autoboxing dan Boxing

 Boxing

 Konversi otomatis dari tipe data primitif ke class

Wrappernya.

 Unboxing

 Konvers otomatis dari class Wrapper ke tipe data

primitifnya.

 Keuntungan:

(13)

Contoh

Autoboxing Unboxing

class BoxingExample1{

public static void main(String

args[]){

int a=50;

Integer a2=new Integer(a); //Boxing

Integer a3=5;//Boxing

System.out.println(a2+" "+a3);

class UnboxingExample1{

public static void main(String

args[]){

Integer i=new Integer(50);

int a=i;

System.out.println(a); }

(14)

Contoh pada operator perbandingan

class UnboxingExample2{

public static void main(String args[]){

Integer i=new Integer(50);

if(i<100){ //unboxing internally

System.out.println(i); }

} }

(15)

Pada method overloading

 Autoboxing dan unboxing juga dapat dilakukan pada

method overloading.

 Namun ada aturan prioritas:

 Widening beats boxing

 Widening beats varargs

(16)

Contoh widening beats boxing

class Boxing1{

static void m(int i){System.out.println("int");}

static void m(Integer i){System.out.println("Integer");} public static void main(String args[]){

short s=30;

m(s); }

(17)

Contoh widening beats varargs

class Boxing2{

static void m(int i, int i2){System.out.println("int int");} static void m(Integer... i){System.out.println("Integer...");}

public static void main(String args[]){ short s1=30,s2=40;

m(s1,s2); }

(18)

Contoh boxing beats varargs

class Boxing3{

static void m(Integer i){System.out.println("Integer");}

static void m(Integer... i){System.out.println("Integer...");}

public static void main(String args[]){ int a=30;

m(a); }

(19)
(20)

Enum

 Enum merupakan tipe data yang mengandung

kumpulan konstan yang tetap.

 Enum juga dapat dianggap seperti class yang

memiliki beberapa nilai konstan yang tetap.

 Contoh digunakan untuk hari dalam seminggu

(SENIN, SELASA, RABU, KAMIS, JUMAT, SABTU, MINGGU).

 Contoh lainnya untuk arah mata angin (UTARA,

SELATAN, BARAT, TIMUR).

 Enum adalah static dan final (secara implisit)  Mulai diperkenalkan pada Java versi 5.

(21)

Point penting pada Enum

 Enum memperbaiki type safety

 Enum dapat digunakan pada switch  Enum dapat dijejaki (traverse)

 Enum dapat memiliki field, constructor dan method  Enum tidak dapat extend class lain karena secara

bawaan Enum adalah subclass dari class Enum

(22)

Contoh sederhana

class EnumExample1{

public enum Season { WINTER, SPRING, SUMMER, FALL } public static void main(String[] args) {

for (Season s : Season.values())

System.out.println(s); }}

(23)

Method values() pada enum

 Java compiler secara otomatis menambah method

values() ketika mencipta enum.

 Method values() mengembalikan array yang

(24)
(25)

Enum di luar class

 Enum juga bisa didefinisikan di luar class, karena enum

mirip dengan class

enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{

public static void main(String[] args) {

Season s=Season.WINTER; System.out.println(s);

(26)

Peraturan lainnya

Enum memiliki private constructor.

 Dapatkan kita mencipta objek dari enum dengan keyword

new? Tidak, kenapa?

 Enum boleh memiliki method abstract.  Enum dapat dipakai pada switch-case

(27)

Contoh pada switch-case

class EnumExample5{

enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){

Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println("sunday"); break; case MONDAY: System.out.println("monday"); break; default: System.out.println("other day"); }

(28)
(29)

Static

 Modifier static biasanya dipergunakan untuk

membuat method atau variable yang menyatakan milik dari kelas, bukan milik objek (sehingga

independen terhadap objek)

 Yang dapat diberi modifier static:

 Variable (atau class variable)

 Method (atau class method)

 Initialization block (static initializer)

 Inner class dalam class lain (bukan dalam method)

 Selain dari itu tidak bisa (constructor, class,

(30)

Java Static Variable

 Bila variable diberi modifier static, maka variable

tersebut menjadi milik kelas.

 Pengertian menjadi milik kelas adalah, kita dapat

mengakses atau menggunakannya tanpa proses instansiasi objek dari kelas tersebut (yang kita butuhkan hanya kelas tersebut dapat diakses).

 Static variable akan disharing oleh semua objek

(31)

Java Static Variable

 Static variable digunakan untuk atribut yang bernilai

sama untuk seluruh objek class tersebut

 Nama perusahaan

 Nama universitas

 Static variable hanya menggunakan memori sekali

pada class saat class tersebut diloading.

 Keuntungan:

(32)

Kondisi tidak pakai variabel statis

 Andai ada class Student yang mewakili student di

Unsyiah. class Student{ int NIM; String name; String college=“Unsyiah"; }

 NIM dan name jelas akan berbeda untuk setiap

objek Student. Namun semuanya adalah mahasiswa di Unsyiah.

 Kalau kita buat college sebagai static maka memory

(33)

Contoh

class Student8{ int NIM;

String name;

static String college ="Unsyiah";

Student8(int r,String n){ NIM = r;

name = n; }

void display (){System.out.println(NIM+" "+name+" "+college);} public static void main(String args[]){

Student8 s1 = new Student8(111,"Karan"); Student8 s2 = new Student8(222,"Aryan"); s1.display();

(34)

Ilustrasi

(35)

Bandingkan

class Counter{

int count=0;//will get memory when

//instance is created Counter(){

count++;

System.out.println(count); }

public static void main(String args[]){

Counter c1=new Counter(); Counter c2=new Counter(); Counter c3=new Counter();

}

class Counter2{

static int count=0;//will get memory

//only once and retain its value Counter2(){

count++;

System.out.println(count); }

public static void main(String args[]){

Counter2 c1=new Counter2(); Counter2 c2=new Counter2(); Counter2 c3=new Counter2();

(36)

Java Static Method

Method static adalah method milik class.  Method static dapat dipanggil tanpa perlu

menciptakan objek dari class tersebut.

 Method static dapat mengakses data static dan

dapat merubah nilainya.

 static method dan static variable ikut diwariskan

(37)

Contoh

class Student9{ int NIM;

String name;

static String college = “Unsyiah"; static void change(){

college = “USK"; }

Student9(int r, String n){ NIM = r;

name = n;

void display (){System.out.println(NIM+"

"+name+" "+college);}

public static void main(String args[]){

Student9.change();

Student9 s1 = new Student9 (111, "Karan");

Student9 s2 = new Student9 (222, "Aryan");

Student9 s3 = new Student9 (333, "Sonoo");

s1.display(); s2.display(); s3.display(); }

(38)

Batasan pada method static

 Ada 2 batasan bagi method static:

 Method static tidak dapat menggunakan variable

non-static atau memanggil method non-non-static secara langsung

 Kata kunci this dan super tidak dapat digunakan pada

bagian yang static

 Apakah boleh coding di bawah?

class A{

int a=40;//non static

public static void main(String args[]){

System.out.println(a); }

(39)

Kenapa method main pada Java static?

 Andaikan method main non-static maka JVM perlu

mencipta objek terlebih dahulu baru memanggil method main() -> extra memory allocation

(40)

Java Static Block

 Java static block juga disebut initialization block

(block initializer)

 Digunakan untuk menginisialisasi unsur data yang

static.

 Akan dieksekusi sebelum method main pada saat

loading class.

 Sifatnya:

 initializer block tidak memiliki nama.

 initializer block tidak memiliki parameter.

(41)

Contoh

class A2{

static{System.out.println("static block is invoked");} public static void main(String args[]){

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

(42)
(43)

Dapatkah kita eksekusi program tanpa

method main()?

class A3{ static{

System.out.println("static block is invoked"); System.exit(0);

} }

 Pada Java versi sebelum 7, hal ini tidak masalah  Namun pada Java versi 7 ke atas, akan ada error

(44)

Static import

 Static import diperkenalkan pada Java versi 5  Static import dapat dipergunakan bila kita ingin

mengakses member static dari kelas lain tanpa harus mengetik nama kelas.

 Member static disini adalah :

 static variable

 static method

 Penulisannya:

(45)

Contoh deklarasi

 Contoh deklarasi yang mungkin dari static import:

 Cara 1 : import static

namaPackage.namaKelas.namaMemberStatic;

 Cara 2 : import static namaPackage.namaKelas.*;

 Kita harus tetap menggunakan nama kelas untuk

memanggil suatu member static, bila nama dari member static tersebut ternyata dimiliki oleh lebih dari 1 kelas yang di-import static.

(46)
(47)
(48)

Inner class

 Suatu class yang berada di dalam class yang lain.  Ada 4 jenis inner class:

 “Regular” Inner class

 Method-local inner class

 Anonymous inner class

(49)

“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.

 Inner class didefinisikan (ditulis) di dalam kurung

(50)

Contoh

class MyOuter { class MyInner {

} }

 MyInner adalah inner class.

 Jika coding di atas dikompilasi maka akan ada 2 file

.class yaitu MyOuter.class dan MyOuter$MyInner.class

 Sebuah inner class tidak dapat memiliki member static.

 Objek dari inner class memiliki akses ke semua member

(51)

Objek inner class

 Untuk membuat objek dari inner class, harus

membuat objek dari outer class terlebih dahulu.

 Objek dari inner class dapat dibuat:

 Dari dalam outer class

 Dari luar outer class

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

(52)

Objek di dalam dan luar outer class

class A { void buatInstanceKelasB() { B b = new B(); } class B { } } 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(); }

}

(53)

This pada inner class

 Aturan inner class dalam hal mereferensi dirinya

sendiri atau instance dari outer class adalah sebagai berikut :

 Untuk merujuk pada dirinya sendiri (instance dari inner

class) dari dalam inner class, dapat digunakan

referensi this atauNamaOuterClass.NamaInnerClass.this.

 Untuk merujuk pada instance dari outer classnya dari

dalam inner class, dapat digunakan referensi NamaOuterClass.this.

(54)

Contoh

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();

} }

(55)

Method-local inner class

 Method-local inner class adalah inner class yang dideklarasikan di dalam

method.

 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. 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();

(56)

Method-local inner class (2)

 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).

 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

(57)

Anonymous Inner Class

 Suatu inner class yang dideklarasikan tanpa nama kelas.  Anonymous inner class dapat berupa (tidak bisa secara

bersamaan):

 Subclass dari suatu class yang telah dideklarasikan  Kelas implementasi dari suatu interface

 Tujuan :

 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.

 Bagian dari suatu statement.  Bentuk dari polymorphisme

 Method yang dapat dipanggil dari anonymous inner class adalah

(58)

Anonymous inner class sebagai

subclass

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

(59)

Anonymous inner class sebagai

implementasi dari interface

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();

(60)

Static nested class

 Static nested class adalah inner class dengan

modifier static.

 Static nested class sebenarnya bukan inner class,

static nested class hanyalah top-level class yang di sarangkan di dalam class lain.

 Karena static, maka untuk membuat instance dari

static nested class tidak diperlukan instance dari outer classnya. (tidak seperti regular inner class ataupun method-local inner class).

 Static nested class tidak dapat mengakses

(61)

Contoh

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(); }

Referensi

Dokumen terkait

mendamaikan kedua belah pihak dengan cara mempertemukan para pihak untuk mediasi. Ketua Pengadilan Agama Rengat Bapak Drs. Muhdi Kholil, SH., M.A., M.M juga menyampaikan

Menurut Sukatamsi (1984:158) mengemukakan bahwa menggiring bola merupakan salah satu teknik dasar yang sangat penting dalam permainan sepakbola. Menggiring bola

Kelompok Usaha mereklasifikasi keuntungan atau kerugian yang sebelumnya diakui dalam pendapatan komprehensif lain dari ekuitas ke laporan laba rugi (sebagai

berpengaruh signifikan terhadap kinerja karyawan pada PT.PLN (Persero) Area Pekanbaru Rayon Kota Timur, untuk itu pihak perusahaan perlu memperhatikan dan

Sedangkan, dilihat dari sisi lingkungan ( environment) masih kurangnya fasilitas toilet terutama toilet pria, ruang tunggu poliklinik penuh dan ruang tunggu apotik panas

Negara kepulauan merupakan suatu wilayah negara yang memiliki banyak pulau dan keberagam suku, adat istiadat, dan kebudayan yang berada dalam satu wijayah yaitu negara itu

Menimbang, bahwa dari surat-surat tersebut ternyata bahwa sekarang Termohon Kasasi dahulu sebagai Penggugat telah menggugat cerai terhadap Pemohon Kasasi dahulu sebagai Tergugat

Penelitian ini bertujuan untuk mengetahui Langkah – langkah apa yang diambil dalam persiapan Dinas Pendidikan Provinsi Jawa Tengah untuk menghadapi Alih Kewenangan