Java - Panduan Cepat

Bahasa pemrograman Java pada awalnya dikembangkan oleh Sun Microsystems yang diprakarsai oleh James Gosling dan dirilis pada tahun 1995 sebagai komponen inti dari platform Java Sun Microsystems (Java 1.0 [J2SE]).

Rilis terbaru dari Java Standard Edition adalah Java SE 8. Dengan kemajuan Java dan popularitasnya yang tersebar luas, beberapa konfigurasi dibangun untuk menyesuaikan dengan berbagai jenis platform. Misalnya: J2EE untuk Aplikasi Perusahaan, J2ME untuk Aplikasi Seluler.

Versi J2 yang baru diganti namanya masing-masing menjadi Java SE, Java EE, dan Java ME. Java dijaminWrite Once, Run Anywhere.

Jawa adalah -

  • Object Oriented- Di Jawa, semuanya adalah Objek. Java dapat dengan mudah diperpanjang karena didasarkan pada model Object.

  • Platform Independent- Tidak seperti banyak bahasa pemrograman lain termasuk C dan C ++, ketika Java dikompilasi, itu tidak dikompilasi ke dalam mesin khusus platform, melainkan ke dalam kode byte platform independen. Kode byte ini didistribusikan melalui web dan diinterpretasikan oleh Mesin Virtual (JVM) pada platform mana pun yang sedang dijalankan.

  • Simple- Java dirancang agar mudah dipelajari. Jika Anda memahami konsep dasar OOP Java, itu akan mudah untuk dikuasai.

  • Secure- Dengan fitur aman Java, ini memungkinkan untuk mengembangkan sistem bebas virus dan bebas gangguan. Teknik otentikasi didasarkan pada enkripsi kunci publik.

  • Architecture-neutral - Kompilator Java menghasilkan format file objek netral arsitektur, yang membuat kode yang dikompilasi dapat dieksekusi pada banyak prosesor, dengan kehadiran sistem runtime Java.

  • Portable- Menjadi arsitektur-netral dan tidak memiliki aspek implementasi tergantung dari spesifikasi membuat Java portabel. Compiler di Java ditulis dalam ANSI C dengan batas portabilitas yang bersih, yang merupakan subset POSIX.

  • Robust - Java berusaha untuk menghilangkan situasi rawan kesalahan dengan menekankan terutama pada pemeriksaan kesalahan waktu kompilasi dan pemeriksaan runtime.

  • Multithreaded- Dengan fitur multithread Java, dimungkinkan untuk menulis program yang dapat melakukan banyak tugas secara bersamaan. Fitur desain ini memungkinkan para pengembang untuk membangun aplikasi interaktif yang dapat berjalan dengan lancar.

  • Interpreted- Kode byte Java diterjemahkan dengan cepat ke instruksi mesin asli dan tidak disimpan di mana pun. Proses pengembangan lebih cepat dan analitis karena penautan merupakan proses tambahan dan ringan.

  • High Performance - Dengan penggunaan kompiler Just-In-Time, Java memungkinkan kinerja tinggi.

  • Distributed - Java dirancang untuk lingkungan internet terdistribusi.

  • Dynamic- Java dianggap lebih dinamis daripada C atau C ++ karena dirancang untuk beradaptasi dengan lingkungan yang berkembang. Program Java dapat membawa informasi run-time dalam jumlah ekstensif yang dapat digunakan untuk memverifikasi dan menyelesaikan akses ke objek pada run-time.

Sejarah Jawa

James Gosling memulai proyek bahasa Java pada bulan Juni 1991 untuk digunakan dalam salah satu dari banyak proyek dekoder. Bahasa, awalnya disebut 'Oak' setelah pohon ek yang berdiri di luar kantor Gosling, juga menggunakan nama 'Green' dan akhirnya diganti namanya menjadi Java, dari daftar kata acak.

Sun merilis implementasi publik pertama sebagai Java 1.0 pada tahun 1995. Itu menjanjikan Write Once, Run Anywhere (WORA), menyediakan waktu pengoperasian gratis di platform populer.

Pada 13 November 2006, Sun merilis sebagian besar Java sebagai perangkat lunak bebas dan sumber terbuka di bawah ketentuan GNU General Public License (GPL).

Pada 8 Mei 2007, Sun menyelesaikan prosesnya, membuat semua kode inti Java gratis dan bersumber terbuka, selain dari sebagian kecil kode yang hak ciptanya tidak dimiliki Sun.

Alat yang Anda Butuhkan

Untuk melakukan contoh yang dibahas dalam tutorial ini, Anda memerlukan komputer Pentium 200-MHz dengan minimal 64 MB RAM (disarankan 128 MB RAM).

Anda juga membutuhkan perangkat lunak berikut -

  • Sistem operasi Linux 7.1 atau Windows xp / 7/8
  • Java JDK 8
  • Microsoft Notepad atau editor teks lainnya

Tutorial ini akan memberikan keterampilan yang diperlukan untuk membuat GUI, jaringan, dan aplikasi web menggunakan Java.

Apa selanjutnya?

Bab selanjutnya akan memandu Anda tentang cara mendapatkan Java dan dokumentasinya. Terakhir, ia menginstruksikan Anda tentang cara menginstal Java dan menyiapkan lingkungan untuk mengembangkan aplikasi Java.

Dalam bab ini, kita akan membahas tentang berbagai aspek pengaturan lingkungan yang cocok untuk Java.

Pengaturan Lingkungan Lokal

Jika Anda masih ingin mengatur lingkungan Anda untuk bahasa pemrograman Java, maka bagian ini memandu Anda tentang cara mengunduh dan mengatur Java di komputer Anda. Berikut adalah langkah-langkah untuk mengatur lingkungan.

Java SE tersedia secara gratis dari tautan Unduh Java . Anda dapat mengunduh versi berdasarkan sistem operasi Anda.

Ikuti petunjuk untuk mengunduh Java dan menjalankan .exeuntuk menginstal Java di komputer Anda. Setelah Anda menginstal Java di komputer Anda, Anda perlu mengatur variabel lingkungan agar mengarah ke direktori instalasi yang benar -

Menyiapkan Path untuk Windows

Dengan asumsi Anda telah menginstal Java di direktori c: \ Program Files \ java \ jdk -

  • Klik kanan pada 'My Computer' dan pilih 'Properties'.

  • Klik tombol 'Variabel lingkungan' di bawah tab 'Lanjutan'.

  • Sekarang, ubah variabel 'Path' sehingga juga berisi path ke Java yang dapat dieksekusi. Contoh, jika jalur saat ini disetel ke 'C: \ WINDOWS \ SYSTEM32', ubah jalur Anda menjadi 'C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin'.

Menyiapkan Path untuk Linux, UNIX, Solaris, FreeBSD

Variabel lingkungan PATH harus disetel agar mengarah ke tempat biner Java telah dipasang. Lihat dokumentasi shell Anda, jika Anda kesulitan melakukan ini.

Contoh, jika Anda menggunakan bash sebagai shell Anda, maka Anda akan menambahkan baris berikut di akhir '.bashrc: export PATH = / path / to / java: $ PATH'

Editor Java Populer

Untuk menulis program Java Anda, Anda memerlukan editor teks. Ada IDE yang lebih canggih yang tersedia di pasaran. Tetapi untuk saat ini, Anda dapat mempertimbangkan salah satu dari yang berikut -

  • Notepad - Pada mesin Windows, Anda dapat menggunakan editor teks sederhana seperti Notepad (Disarankan untuk tutorial ini), TextPad.

  • Netbeans - IDE Java yang open-source dan gratis yang dapat diunduh dari https://www.netbeans.org/index.html.

  • Eclipse - IDE Java yang dikembangkan oleh komunitas open-source eclipse dan dapat diunduh dari https://www.eclipse.org/.

Apa selanjutnya?

Bab selanjutnya akan mengajarkan Anda cara menulis dan menjalankan program Java pertama Anda dan beberapa sintaks dasar penting di Java yang diperlukan untuk mengembangkan aplikasi.

Ketika kita mempertimbangkan program Java, itu bisa didefinisikan sebagai kumpulan objek yang berkomunikasi melalui saling memanggil metode. Sekarang mari kita lihat secara singkat apa arti variabel kelas, objek, metode, dan contoh.

  • Object- Objek memiliki status dan perilaku. Contoh: Seekor anjing memiliki keadaan - warna, nama, ras serta perilaku seperti menggoyangkan ekornya, menggonggong, makan. Objek adalah turunan dari kelas.

  • Class - Kelas dapat didefinisikan sebagai templat / cetak biru yang mendeskripsikan perilaku / status yang didukung oleh objek dari tipenya.

  • Methods- Metode pada dasarnya adalah perilaku. Kelas dapat berisi banyak metode. Ini adalah metode di mana logika ditulis, data dimanipulasi dan semua tindakan dieksekusi.

  • Instance Variables- Setiap objek memiliki set variabel instan yang unik. Status objek dibuat oleh nilai yang diberikan ke variabel instan ini.

Program Java Pertama

Mari kita lihat kode sederhana yang akan mencetak kata-kata Hello World.

Contoh

public class MyFirstJavaProgram {

   /* This is my first java program.
    * This will print 'Hello World' as the output
    */

   public static void main(String []args) {
      System.out.println("Hello World"); // prints Hello World
   }
}

Mari kita lihat bagaimana cara menyimpan file, mengkompilasi, dan menjalankan program. Silakan ikuti langkah-langkah selanjutnya -

  • Buka notepad dan tambahkan kode seperti di atas.

  • Simpan file sebagai: MyFirstJavaProgram.java.

  • Buka jendela prompt perintah dan masuk ke direktori tempat Anda menyimpan kelas. Asumsikan itu C: \.

  • Ketik 'javac MyFirstJavaProgram.java' dan tekan enter untuk menyusun kode Anda. Jika tidak ada kesalahan dalam kode Anda, prompt perintah akan membawa Anda ke baris berikutnya (Asumsi: Variabel jalur disetel).

  • Sekarang, ketik 'java MyFirstJavaProgram' untuk menjalankan program Anda.

  • Anda akan dapat melihat 'Hello World' tercetak di jendela.

Keluaran

C:\> javac MyFirstJavaProgram.java
C:\> java MyFirstJavaProgram 
Hello World

Sintaks Dasar

Tentang program Java, sangat penting untuk memperhatikan poin-poin berikut.

  • Case Sensitivity - Java peka huruf besar kecil, yang artinya pengenal Hello dan hello akan memiliki arti yang berbeda di Jawa.

  • Class Names- Untuk semua nama kelas, huruf pertama harus dalam Huruf Besar. Jika beberapa kata digunakan untuk membentuk nama kelas, huruf pertama setiap kata dalam harus menggunakan Huruf Besar.

    Example: kelas MyFirstJavaClass

  • Method Names- Semua nama metode harus dimulai dengan huruf Kecil. Jika beberapa kata digunakan untuk membentuk nama metode, maka huruf pertama setiap kata dalam harus menggunakan Huruf Besar.

    Example: public void myMethodName ()

  • Program File Name - Nama file program harus sama persis dengan nama kelas.

    Saat menyimpan file, Anda harus menyimpannya menggunakan nama kelas (Ingat Java peka huruf besar kecil) dan tambahkan '.java' di akhir nama (jika nama file dan nama kelas tidak cocok, program Anda tidak akan dikompilasi ).

    Example:Asumsikan 'MyFirstJavaProgram' adalah nama kelas. Kemudian file tersebut harus disimpan sebagai 'MyFirstJavaProgram.java'

  • public static void main(String args[]) - Pemrosesan program Java dimulai dari metode main () yang merupakan bagian wajib dari setiap program Java.

Pengenal Java

Semua komponen Java membutuhkan nama. Nama yang digunakan untuk kelas, variabel, dan metode dipanggilidentifiers.

Di Jawa, ada beberapa hal yang perlu diingat tentang pengenal. Mereka adalah sebagai berikut -

  • Semua pengidentifikasi harus dimulai dengan huruf (A sampai Z atau a sampai z), karakter mata uang ($) atau garis bawah (_).

  • Setelah karakter pertama, pengenal dapat memiliki kombinasi karakter apa pun.

  • Kata kunci tidak dapat digunakan sebagai pengenal.

  • Yang terpenting, pengenal peka huruf besar / kecil.

  • Contoh pengenal resmi: usia, $ gaji, _value, __1_value.

  • Contoh pengenal ilegal: 123abc, -salary.

Pengubah Java

Seperti bahasa lain, dimungkinkan untuk memodifikasi kelas, metode, dll., Dengan menggunakan pengubah. Ada dua kategori pengubah -

  • Access Modifiers - default, publik, dilindungi, pribadi

  • Non-access Modifiers - final, abstrak, strikfp

Kami akan melihat lebih detail tentang pengubah di bagian selanjutnya.

Variabel Java

Berikut adalah jenis-jenis variabel di Java -

  • Variabel Lokal
  • Variabel Kelas (Variabel Statis)
  • Variabel Instance (Variabel Non-statis)

Array Jawa

Array adalah objek yang menyimpan banyak variabel dengan tipe yang sama. Namun, array itu sendiri adalah objek di heap. Kita akan melihat bagaimana mendeklarasikan, membangun, dan menginisialisasi di bab-bab selanjutnya.

Java Enums

Enum diperkenalkan di Java 5.0. Enum membatasi variabel untuk memiliki salah satu dari sedikit nilai yang telah ditentukan. Nilai-nilai dalam daftar yang disebutkan ini disebut enum.

Dengan penggunaan enum, dimungkinkan untuk mengurangi jumlah bug dalam kode Anda.

Misalnya, jika kita mempertimbangkan aplikasi untuk toko jus segar, akan mungkin membatasi ukuran gelas menjadi kecil, sedang, dan besar. Ini akan memastikan bahwa itu tidak akan memungkinkan siapa pun untuk memesan ukuran apa pun selain kecil, sedang, atau besar.

Contoh

class FreshJuice {
   enum FreshJuiceSize{ SMALL, MEDIUM, LARGE }
   FreshJuiceSize size;
}

public class FreshJuiceTest {

   public static void main(String args[]) {
      FreshJuice juice = new FreshJuice();
      juice.size = FreshJuice.FreshJuiceSize.MEDIUM ;
      System.out.println("Size: " + juice.size);
   }
}

Contoh di atas akan menghasilkan hasil sebagai berikut -

Keluaran

Size: MEDIUM

Note- Enum dapat dideklarasikan sebagai milik mereka atau di dalam kelas. Metode, variabel, konstruktor dapat didefinisikan di dalam enum juga.

Kata Kunci Java

Daftar berikut menunjukkan kata-kata yang dipesan di Jawa. Kata-kata yang dicadangkan ini tidak boleh digunakan sebagai konstanta atau variabel atau nama pengenal lainnya.

abstrak menegaskan boolean istirahat
byte kasus menangkap arang
kelas const terus default
melakukan dua kali lipat lain enum
meluas terakhir akhirnya mengapung
untuk pergi ke jika mengimplementasikan
impor contoh int antarmuka
panjang asli baru paket
pribadi terlindung publik kembali
pendek statis strikfp super
beralih disinkronkan ini melemparkan
melempar sementara mencoba kosong
lincah sementara

Komentar di Jawa

Java mendukung komentar satu baris dan banyak baris yang sangat mirip dengan C dan C ++. Semua karakter yang tersedia di dalam komentar apa pun diabaikan oleh kompiler Java.

Contoh

public class MyFirstJavaProgram {

   /* This is my first java program.
    * This will print 'Hello World' as the output
    * This is an example of multi-line comments.
    */

   public static void main(String []args) {
      // This is an example of single line comment
      /* This is also an example of single line comment. */
      System.out.println("Hello World");
   }
}

Keluaran

Hello World

Menggunakan Garis Kosong

Sebuah baris yang hanya berisi spasi, kemungkinan dengan komentar, disebut sebagai baris kosong, dan Java mengabaikannya sama sekali.

Warisan

Di Java, kelas bisa diturunkan dari kelas. Pada dasarnya, jika Anda perlu membuat kelas baru dan di sini sudah ada kelas yang memiliki beberapa kode yang Anda perlukan, maka dimungkinkan untuk mendapatkan kelas baru Anda dari kode yang sudah ada.

Konsep ini memungkinkan Anda untuk menggunakan kembali kolom dan metode kelas yang ada tanpa harus menulis ulang kode di kelas baru. Dalam skenario ini, kelas yang ada disebutsuperclass dan kelas turunan disebut subclass.

Antarmuka

Dalam bahasa Java, antarmuka dapat didefinisikan sebagai kontrak antar objek tentang cara berkomunikasi satu sama lain. Antarmuka memainkan peran penting dalam hal konsep warisan.

Sebuah antarmuka mendefinisikan metode, kelas turunan (subclass) harus digunakan. Tetapi penerapan metode ini sepenuhnya tergantung pada subclass.

Apa selanjutnya?

Bagian selanjutnya menjelaskan tentang Objek dan kelas dalam pemrograman Java. Di akhir sesi, Anda akan bisa mendapatkan gambaran yang jelas tentang apa itu objek dan apa kelas di Java.

Java adalah Bahasa Berorientasi Objek. Sebagai bahasa yang memiliki fitur Berorientasi Objek, Java mendukung konsep dasar berikut -

  • Polymorphism
  • Inheritance
  • Encapsulation
  • Abstraction
  • Classes
  • Objects
  • Instance
  • Method
  • Message Passing

Dalam bab ini, kita akan melihat konsep - Kelas dan Objek.

  • Object- Objek memiliki status dan perilaku. Contoh: Seekor anjing memiliki keadaan - warna, nama, ras serta perilaku - mengibaskan ekor, menggonggong, makan. Objek adalah turunan dari kelas.

  • Class - Kelas dapat didefinisikan sebagai templat / cetak biru yang menggambarkan perilaku / keadaan yang didukung oleh objek jenisnya.

Objek di Java

Mari kita sekarang melihat lebih dalam apa itu objek. Jika kita mempertimbangkan dunia nyata, kita dapat menemukan banyak benda di sekitar kita, mobil, anjing, manusia, dll. Semua benda ini memiliki keadaan dan perilaku.

Jika kita menganggap seekor anjing, maka statusnya adalah - nama, ras, warna kulit, dan perilakunya adalah - menggonggong, mengibas-ngibaskan ekor, berlari.

Jika Anda membandingkan objek perangkat lunak dengan objek dunia nyata, mereka memiliki karakteristik yang sangat mirip.

Objek perangkat lunak juga memiliki status dan perilaku. Status objek perangkat lunak disimpan dalam bidang dan perilaku ditampilkan melalui metode.

Jadi dalam pengembangan perangkat lunak, metode beroperasi pada keadaan internal suatu objek dan komunikasi objek-ke-objek dilakukan melalui metode.

Kelas di Jawa

Kelas adalah cetak biru dari mana objek individu dibuat.

Berikut adalah contoh sebuah kelas.

Contoh

public class Dog {
   String breed;
   int age;
   String color;

   void barking() {
   }

   void hungry() {
   }

   void sleeping() {
   }
}

Kelas dapat berisi salah satu tipe variabel berikut.

  • Local variables- Variabel yang didefinisikan di dalam metode, konstruktor atau blok disebut variabel lokal. Variabel akan dideklarasikan dan diinisialisasi dalam metode dan variabel akan dimusnahkan ketika metode telah selesai.

  • Instance variables- Variabel instance adalah variabel di dalam kelas tetapi di luar metode apa pun. Variabel-variabel ini diinisialisasi saat kelas dibuat. Variabel instance dapat diakses dari dalam metode, konstruktor, atau blok apa pun dari kelas tertentu itu.

  • Class variables - Variabel kelas adalah variabel yang dideklarasikan di dalam kelas, di luar metode apa pun, dengan kata kunci statis.

Kelas dapat memiliki sejumlah metode untuk mengakses nilai berbagai jenis metode. Dalam contoh di atas, menggonggong (), lapar () dan tidur () adalah metode.

Berikut adalah beberapa topik penting yang perlu didiskusikan saat mempelajari kelas Bahasa Java.

Konstruktor

Saat membahas tentang kelas, salah satu sub topik terpenting adalah konstruktor. Setiap kelas memiliki konstruktor. Jika kita tidak secara eksplisit menulis konstruktor untuk kelas, kompilator Java akan membangun konstruktor default untuk kelas itu.

Setiap kali objek baru dibuat, setidaknya satu konstruktor akan dipanggil. Aturan utama konstruktor adalah mereka harus memiliki nama yang sama dengan kelasnya. Sebuah kelas dapat memiliki lebih dari satu konstruktor.

Berikut adalah contoh konstruktor -

Contoh

public class Puppy {
   public Puppy() {
   }

   public Puppy(String name) {
      // This constructor has one parameter, name.
   }
}

Java juga mendukung Kelas Singleton di mana Anda hanya dapat membuat satu instance kelas.

Note- Kami memiliki dua jenis konstruktor. Kami akan membahas konstruktor secara rinci di bab-bab selanjutnya.

Membuat Objek

Seperti yang disebutkan sebelumnya, kelas menyediakan cetak biru untuk objek. Jadi pada dasarnya, sebuah objek dibuat dari sebuah kelas. Di Java, kata kunci baru digunakan untuk membuat objek baru.

Ada tiga langkah saat membuat objek dari kelas -

  • Declaration - Deklarasi variabel dengan nama variabel dengan tipe objek.

  • Instantiation - Kata kunci 'baru' digunakan untuk membuat objek.

  • Initialization- Kata kunci 'baru' diikuti dengan panggilan ke konstruktor. Panggilan ini menginisialisasi objek baru.

Berikut adalah contoh membuat objek -

Contoh

public class Puppy {
   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name );
   }

   public static void main(String []args) {
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

Jika kita melakukan compile dan menjalankan program diatas, maka akan menghasilkan hasil sebagai berikut:

Keluaran

Passed Name is :tommy

Mengakses Variabel dan Metode Instans

Variabel dan metode instance diakses melalui objek yang dibuat. Untuk mengakses variabel instance, berikut adalah jalur yang sepenuhnya memenuhi syarat -

/* First create an object */
ObjectReference = new Constructor();

/* Now call a variable as follows */
ObjectReference.variableName;

/* Now you can call a class method as follows */
ObjectReference.MethodName();

Contoh

Contoh ini menjelaskan cara mengakses variabel instan dan metode kelas.

public class Puppy {
   int puppyAge;

   public Puppy(String name) {
      // This constructor has one parameter, name.
      System.out.println("Name chosen is :" + name );
   }

   public void setAge( int age ) {
      puppyAge = age;
   }

   public int getAge( ) {
      System.out.println("Puppy's age is :" + puppyAge );
      return puppyAge;
   }

   public static void main(String []args) {
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge );
   }
}

Jika kita melakukan compile dan menjalankan program diatas, maka akan menghasilkan hasil sebagai berikut:

Keluaran

Name chosen is :tommy
Puppy's age is :2
Variable Value :2

Aturan Deklarasi File Sumber

Sebagai bagian terakhir dari bagian ini, sekarang mari kita lihat aturan deklarasi file sumber. Aturan ini penting saat mendeklarasikan kelas, pernyataan impor , dan pernyataan paket dalam file sumber.

  • Hanya boleh ada satu kelas publik per file sumber.

  • File sumber dapat memiliki beberapa kelas non-publik.

  • Nama kelas publik harus menjadi nama file sumber juga yang harus ditambahkan oleh .javapada akhirnya. Misalnya: nama kelasnya adalah kelas publik Employee {} maka file sumbernya adalah Employee.java.

  • Jika kelas didefinisikan di dalam sebuah paket, maka pernyataan paket harus menjadi pernyataan pertama dalam file sumber.

  • Jika ada pernyataan import, maka itu harus ditulis di antara pernyataan paket dan deklarasi kelas. Jika tidak ada pernyataan paket, maka pernyataan impor harus menjadi baris pertama di file sumber.

  • Pernyataan impor dan paket akan menunjukkan ke semua kelas yang ada di file sumber. Tidak mungkin mendeklarasikan import dan / atau pernyataan paket yang berbeda ke kelas yang berbeda dalam file sumber.

Kelas memiliki beberapa tingkat akses dan terdapat berbagai jenis kelas; kelas abstrak, kelas akhir, dll. Kami akan menjelaskan tentang semua ini di bab pengubah akses.

Terlepas dari jenis kelas yang disebutkan di atas, Java juga memiliki beberapa kelas khusus yang disebut kelas dalam dan kelas Anonim.

Paket Java

Dengan kata sederhana, ini adalah cara mengkategorikan kelas dan antarmuka. Saat mengembangkan aplikasi di Java, ratusan kelas dan antarmuka akan ditulis, oleh karena itu mengkategorikan kelas-kelas ini adalah suatu keharusan dan juga membuat hidup lebih mudah.

Pernyataan Impor

Di Java, jika nama yang sepenuhnya memenuhi syarat, yang menyertakan paket dan nama kelas diberikan, maka kompilator dapat dengan mudah menemukan kode sumber atau kelas. Pernyataan import adalah cara untuk memberikan lokasi yang tepat bagi compiler untuk menemukan kelas tertentu tersebut.

Misalnya, baris berikut akan meminta kompilator untuk memuat semua kelas yang tersedia di direktori java_installation / java / io -

import java.io.*;

Studi Kasus Sederhana

Untuk studi kasus kami, kami akan membuat dua kelas. Mereka adalah Employee dan EmployeeTest.

Pertama buka notepad dan tambahkan kode berikut. Ingat ini adalah kelas Karyawan dan kelas tersebut adalah kelas umum. Sekarang, simpan file sumber ini dengan nama Employee.java.

Kelas Karyawan memiliki empat variabel contoh - nama, usia, penunjukan dan gaji. Kelas memiliki satu konstruktor yang didefinisikan secara eksplisit, yang mengambil parameter.

Contoh

import java.io.*;
public class Employee {

   String name;
   int age;
   String designation;
   double salary;

   // This is the constructor of the class Employee
   public Employee(String name) {
      this.name = name;
   }

   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge) {
      age = empAge;
   }

   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig) {
      designation = empDesig;
   }

   /* Assign the salary to the variable	salary.*/
   public void empSalary(double empSalary) {
      salary = empSalary;
   }

   /* Print the Employee details */
   public void printEmployee() {
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}

Seperti yang disebutkan sebelumnya dalam tutorial ini, pemrosesan dimulai dari metode utama. Oleh karena itu, agar kita dapat menjalankan kelas Karyawan ini, harus ada metode utama dan objek harus dibuat. Kami akan membuat kelas terpisah untuk tugas-tugas ini.

Berikut adalah kelas EmployeeTest , yang membuat dua instance kelas Employee dan memanggil metode untuk setiap objek untuk menetapkan nilai untuk setiap variabel.

Simpan kode berikut di file EmployeeTest.java.

import java.io.*;
public class EmployeeTest {

   public static void main(String args[]) {
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");

      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

Sekarang, kompilasi kedua kelas tersebut lalu jalankan EmployeeTest untuk melihat hasilnya sebagai berikut -

Keluaran

C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0

Apa selanjutnya?

Pada sesi berikutnya, kita akan membahas tipe data dasar di Java dan bagaimana mereka dapat digunakan saat mengembangkan aplikasi Java.

Konstruktor menginisialisasi objek saat dibuat. Ini memiliki nama yang sama dengan kelasnya dan secara sintaksis mirip dengan sebuah metode. Namun, konstruktor tidak memiliki tipe kembalian eksplisit.

Biasanya, Anda akan menggunakan konstruktor untuk memberikan nilai awal ke variabel instan yang ditentukan oleh kelas, atau untuk melakukan prosedur permulaan lain yang diperlukan untuk membuat objek yang terbentuk sepenuhnya.

Semua kelas memiliki konstruktor, baik Anda mendefinisikan satu atau tidak, karena Java secara otomatis menyediakan konstruktor default yang menginisialisasi semua variabel anggota ke nol. Namun, setelah Anda menentukan konstruktor Anda sendiri, konstruktor default tidak lagi digunakan.

Sintaksis

Berikut ini adalah sintaks konstruktor -

class ClassName {
   ClassName() {
   }
}

Java memungkinkan dua jenis konstruktor yaitu -

  • Tidak ada Konstruktor argumen
  • Konstruktor Parameterisasi

Tidak ada Konstruktor argumen

Karena namanya menentukan, konstruktor tanpa argumen dari Java tidak menerima parameter apa pun sebagai gantinya, menggunakan konstruktor ini variabel instance dari suatu metode akan diinisialisasi dengan nilai tetap untuk semua objek.

Contoh

Public class MyClass {
   Int num;
   MyClass() {
      num = 100;
   }
}

Anda akan memanggil konstruktor untuk menginisialisasi objek sebagai berikut

public class ConsDemo {
   public static void main(String args[]) {
      MyClass t1 = new MyClass();
      MyClass t2 = new MyClass();
      System.out.println(t1.num + " " + t2.num);
   }
}

Ini akan menghasilkan hasil sebagai berikut

100 100

Konstruktor Parameterisasi

Paling sering, Anda memerlukan konstruktor yang menerima satu atau lebih parameter. Parameter ditambahkan ke konstruktor dengan cara yang sama seperti yang ditambahkan ke metode, cukup deklarasikan di dalam tanda kurung setelah nama konstruktor.

Contoh

Berikut adalah contoh sederhana yang menggunakan konstruktor -

// A simple constructor.
class MyClass {
   int x;
   
   // Following is the constructor
   MyClass(int i ) {
      x = i;
   }
}

Anda akan memanggil konstruktor untuk menginisialisasi objek sebagai berikut -

public class ConsDemo {
   public static void main(String args[]) {
      MyClass t1 = new MyClass( 10 );
      MyClass t2 = new MyClass( 20 );
      System.out.println(t1.x + " " + t2.x);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

10 20

Variabel hanyalah lokasi memori yang dicadangkan untuk menyimpan nilai. Ini berarti bahwa ketika Anda membuat variabel, Anda menyediakan beberapa ruang di memori.

Berdasarkan tipe data variabel, sistem operasi mengalokasikan memori dan memutuskan apa yang dapat disimpan dalam memori yang dicadangkan. Oleh karena itu, dengan menetapkan tipe data yang berbeda ke variabel, Anda dapat menyimpan bilangan bulat, desimal, atau karakter dalam variabel ini.

Ada dua tipe data yang tersedia di Java -

  • Tipe Data Primitif
  • Jenis Data Referensi / Objek

Tipe Data Primitif

Ada delapan tipe data primitif yang didukung oleh Java. Tipe data primitif ditentukan sebelumnya oleh bahasa dan dinamai dengan kata kunci. Sekarang mari kita lihat delapan tipe data primitif secara mendetail.

byte

  • Tipe data byte adalah bilangan bulat komplemen dua bertanda 8-bit

  • Nilai minimum adalah -128 (-2 ^ 7)

  • Nilai maksimum adalah 127 (inklusif) (2 ^ 7 -1)

  • Nilai defaultnya adalah 0

  • Tipe data byte digunakan untuk menghemat ruang dalam array besar, terutama sebagai pengganti integer, karena byte empat kali lebih kecil dari integer.

  • Contoh: byte a = 100, byte b = -50

pendek

  • Tipe data pendek adalah integer komplemen dua yang bertanda tangan 16-bit

  • Nilai minimum adalah -32,768 (-2 ^ 15)

  • Nilai maksimum adalah 32.767 (inklusif) (2 ^ 15 -1)

  • Tipe data pendek juga dapat digunakan untuk menghemat memori sebagai tipe data byte. Pendek adalah 2 kali lebih kecil dari bilangan bulat

  • Nilai defaultnya adalah 0.

  • Contoh: short s = 10000, short r = -20000

int

  • Tipe data int adalah integer komplemen dua yang bertanda tangan 32-bit.

  • Nilai minimum adalah - 2.147.483.648 (-2 ^ 31)

  • Nilai maksimum adalah 2.147.483.647 (inklusif) (2 ^ 31 -1)

  • Integer umumnya digunakan sebagai tipe data default untuk nilai integral kecuali jika ada masalah tentang memori.

  • Nilai defaultnya adalah 0

  • Contoh: int a = 100000, int b = -200000

panjang

  • Tipe data panjang adalah bilangan bulat komplemen dua yang ditandatangani 64-bit
  • Nilai minimum adalah -9.223.372.036.854.775.808 (-2 ^ 63)
  • Nilai maksimum adalah 9.223.372.036.854.775.807 (inklusif) (2 ^ 63 -1)
  • Tipe ini digunakan ketika jarak yang lebih luas dari int dibutuhkan
  • Nilai defaultnya adalah 0L
  • Contoh: panjang a = 100000L, panjang b = -200000L

mengapung

  • Tipe data float adalah floating point IEEE 754 32-bit presisi tunggal

  • Float terutama digunakan untuk menghemat memori dalam array besar bilangan floating point

  • Nilai defaultnya adalah 0.0f

  • Tipe data float tidak pernah digunakan untuk nilai yang tepat seperti mata uang

  • Contoh: float f1 = 234.5f

dua kali lipat

  • tipe data ganda adalah titik mengambang IEEE 754 64-bit presisi ganda

  • Tipe data ini umumnya digunakan sebagai tipe data default untuk nilai desimal, umumnya pilihan default

  • Tipe data ganda tidak boleh digunakan untuk nilai yang tepat seperti mata uang

  • Nilai defaultnya adalah 0.0d

  • Contoh: dobel d1 = 123,4

boolean

  • tipe data boolean mewakili satu bit informasi
  • Hanya ada dua kemungkinan nilai: benar dan salah
  • Tipe data ini digunakan untuk tanda sederhana yang melacak kondisi benar / salah
  • Nilai default salah
  • Contoh: boolean one = true

arang

  • tipe data char adalah karakter Unicode 16-bit tunggal
  • Nilai minimum adalah '\ u0000' (atau 0)
  • Nilai maksimum adalah '\ uffff' (atau termasuk 65.535)
  • Tipe data Char digunakan untuk menyimpan karakter apapun
  • Contoh: char letterA = 'A'

Referensi Jenis Data

  • Variabel referensi dibuat menggunakan konstruktor kelas yang ditentukan. Mereka digunakan untuk mengakses objek. Variabel ini dideklarasikan sebagai jenis tertentu yang tidak dapat diubah. Misalnya Karyawan, Anak Anjing, dll.

  • Objek kelas dan berbagai tipe variabel array berada di bawah tipe data referensi.

  • Nilai default dari variabel referensi apa pun adalah nol.

  • Variabel referensi dapat digunakan untuk merujuk objek apa pun dari tipe yang dideklarasikan atau tipe yang kompatibel.

  • Contoh: Animal animal = new Animal ("giraffe");

Literal Jawa

Literal adalah representasi kode sumber dari nilai tetap. Mereka direpresentasikan langsung dalam kode tanpa perhitungan apa pun.

Literal dapat ditetapkan ke variabel tipe primitif apa pun. Misalnya -

byte a = 68;
char a = 'A';

byte, int, long, dan short dapat diekspresikan dalam sistem bilangan desimal (basis 10), heksadesimal (basis 16) atau oktal (basis 8).

Awalan 0 digunakan untuk menunjukkan oktal, dan awalan 0x menunjukkan heksadesimal saat menggunakan sistem bilangan ini untuk literal. Misalnya -

int decimal = 100;
int octal = 0144;
int hexa =  0x64;

String literal di Java ditentukan seperti di sebagian besar bahasa lain dengan mengapit urutan karakter di antara sepasang tanda kutip ganda. Contoh literal string adalah -

Contoh

"Hello World"
"two\nlines"
"\"This is in quotes\""

Jenis string dan karakter literal dapat berisi karakter Unicode apa pun. Misalnya -

char a = '\u0001';
String a = "\u0001";

Bahasa Java mendukung beberapa escape sequence khusus untuk String dan literal char juga. Mereka adalah -

Notasi Karakter terwakili
\ n Baris baru (0x0a)
\ r Pengembalian kereta (0x0d)
\ f Formfeed (0x0c)
\ b Spasi mundur (0x08)
\ s Spasi (0x20)
\ t tab
\ " Kutipan ganda
\ ' Kutipan tunggal
\\ garis miring terbalik
\ ddd Karakter oktal (ddd)
\ uxxxx Karakter UNICODE heksadesimal (xxxx)

Apa selanjutnya?

Bab ini menjelaskan berbagai tipe data. Topik selanjutnya menjelaskan berbagai jenis variabel dan penggunaannya. Ini akan memberi Anda pemahaman yang baik tentang bagaimana mereka dapat digunakan di kelas Java, antarmuka, dll.

Variabel memberi kita penyimpanan bernama yang dapat dimanipulasi oleh program kita. Setiap variabel di Java memiliki tipe tertentu, yang menentukan ukuran dan tata letak memori variabel; kisaran nilai yang dapat disimpan dalam memori itu; dan set operasi yang dapat diterapkan ke variabel.

Anda harus mendeklarasikan semua variabel sebelum dapat digunakan. Berikut adalah bentuk dasar dari deklarasi variabel -

data type variable [ = value][, variable [ = value] ...] ;

Di sini tipe data adalah salah satu tipe data Java dan variabel adalah nama variabel. Untuk mendeklarasikan lebih dari satu variabel dari jenis yang ditentukan, Anda dapat menggunakan daftar yang dipisahkan koma.

Berikut adalah contoh yang valid dari deklarasi variabel dan inisialisasi di Java -

Contoh

int a, b, c;         // Declares three ints, a, b, and c.
int a = 10, b = 10;  // Example of initialization
byte B = 22;         // initializes a byte type variable B.
double pi = 3.14159; // declares and assigns a value of PI.
char a = 'A';        // the char variable a iis initialized with value 'a'

Bab ini akan menjelaskan berbagai tipe variabel yang tersedia dalam Bahasa Java. Ada tiga jenis variabel di Java -

  • Variabel lokal
  • Variabel instance
  • Variabel Kelas / Statis

Variabel Lokal

  • Variabel lokal dideklarasikan dalam metode, konstruktor, atau blok.

  • Variabel lokal dibuat ketika metode, konstruktor atau blok dimasukkan dan variabel akan dihancurkan setelah keluar dari metode, konstruktor, atau blok.

  • Pengubah akses tidak dapat digunakan untuk variabel lokal.

  • Variabel lokal hanya terlihat dalam metode, konstruktor, atau blok yang dideklarasikan.

  • Variabel lokal diimplementasikan pada tingkat tumpukan secara internal.

  • Tidak ada nilai default untuk variabel lokal, jadi variabel lokal harus dideklarasikan dan nilai awal harus diberikan sebelum penggunaan pertama.

Contoh

Di sini, usia adalah variabel lokal. Ini didefinisikan di dalam metode pupAge () dan cakupannya terbatas hanya pada metode ini.

public class Test {
   public void pupAge() {
      int age = 0;
      age = age + 7;
      System.out.println("Puppy age is : " + age);
   }

   public static void main(String args[]) {
      Test test = new Test();
      test.pupAge();
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Puppy age is: 7

Contoh

Contoh berikut menggunakan age tanpa melakukan inisialisasi, sehingga akan memberikan error pada saat kompilasi.

public class Test {
   public void pupAge() {
      int age;
      age = age + 7;
      System.out.println("Puppy age is : " + age);
   }

   public static void main(String args[]) {
      Test test = new Test();
      test.pupAge();
   }
}

Ini akan menghasilkan kesalahan berikut saat mengompilasinya -

Keluaran

Test.java:4:variable number might not have been initialized
age = age + 7;
         ^
1 error

Variabel Instance

  • Variabel instance dideklarasikan di kelas, tetapi di luar metode, konstruktor, atau blok apa pun.

  • Saat spasi dialokasikan untuk objek di heap, slot untuk setiap nilai variabel instance dibuat.

  • Variabel instance dibuat ketika sebuah objek dibuat dengan menggunakan kata kunci 'baru' dan dihancurkan ketika objek tersebut dihancurkan.

  • Variabel contoh menyimpan nilai yang harus direferensikan oleh lebih dari satu metode, konstruktor atau blok, atau bagian penting dari keadaan objek yang harus ada di seluruh kelas.

  • Variabel instance dapat dideklarasikan di tingkat kelas sebelum atau setelah digunakan.

  • Pengubah akses dapat diberikan untuk variabel contoh.

  • Variabel instance terlihat untuk semua metode, konstruktor, dan blok di kelas. Biasanya, disarankan untuk menjadikan variabel ini pribadi (tingkat akses). Namun, visibilitas subclass dapat diberikan untuk variabel ini dengan menggunakan pengubah akses.

  • Variabel instance memiliki nilai default. Untuk angka, nilai defaultnya adalah 0, untuk Boolean adalah salah, dan untuk referensi objek nilainya adalah nol. Nilai dapat ditetapkan selama deklarasi atau dalam konstruktor.

  • Variabel instance dapat diakses secara langsung dengan memanggil nama variabel di dalam kelas. Namun, dalam metode statis (ketika variabel instance diberikan aksesibilitas), mereka harus dipanggil menggunakan nama yang sepenuhnya memenuhi syarat. ObjectReference.VariableName .

Contoh

import java.io.*;
public class Employee {

   // this instance variable is visible for any child class.
   public String name;

   // salary  variable is visible in Employee class only.
   private double salary;

   // The name variable is assigned in the constructor.
   public Employee (String empName) {
      name = empName;
   }

   // The salary variable is assigned a value.
   public void setSalary(double empSal) {
      salary = empSal;
   }

   // This method prints the employee details.
   public void printEmp() {
      System.out.println("name  : " + name );
      System.out.println("salary :" + salary);
   }

   public static void main(String args[]) {
      Employee empOne = new Employee("Ransika");
      empOne.setSalary(1000);
      empOne.printEmp();
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

name  : Ransika
salary :1000.0

Variabel Kelas / Statis

  • Variabel kelas yang juga dikenal sebagai variabel statis dideklarasikan dengan kata kunci statis di kelas, tetapi di luar metode, konstruktor, atau blok.

  • Hanya akan ada satu salinan dari setiap variabel kelas per kelas, terlepas dari berapa banyak objek yang dibuat darinya.

  • Variabel statis jarang digunakan selain dideklarasikan sebagai konstanta. Konstanta adalah variabel yang dideklarasikan sebagai publik / privat, final, dan statis. Variabel konstanta tidak pernah berubah dari nilai awalnya.

  • Variabel statis disimpan dalam memori statis. Sangat jarang menggunakan variabel statis selain yang dinyatakan final dan digunakan sebagai konstanta publik atau privat.

  • Variabel statis dibuat saat program dimulai dan dimusnahkan saat program berhenti.

  • Visibilitas mirip dengan variabel instan. Namun, sebagian besar variabel statis dideklarasikan sebagai publik karena harus tersedia untuk pengguna kelas.

  • Nilai default sama dengan variabel instan. Untuk angka, nilai defaultnya adalah 0; bagi Boolean, itu salah; dan untuk referensi objek, nilainya null. Nilai dapat ditetapkan selama deklarasi atau dalam konstruktor. Selain itu, nilai dapat ditetapkan dalam blok penginisialisasi statis khusus.

  • Variabel statis dapat diakses dengan memanggil dengan nama kelas ClassName.VariableName .

  • Saat mendeklarasikan variabel kelas sebagai public static final, maka nama variabel (konstanta) semuanya dalam huruf besar. Jika variabel statis tidak publik dan final, sintaks penamaan sama dengan variabel instan dan lokal.

Contoh

import java.io.*;
public class Employee {

   // salary  variable is a private static variable
   private static double salary;

   // DEPARTMENT is a constant
   public static final String DEPARTMENT = "Development ";

   public static void main(String args[]) {
      salary = 1000;
      System.out.println(DEPARTMENT + "average salary:" + salary);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Development average salary:1000

Note - Jika variabel diakses dari kelas luar, konstanta harus diakses sebagai Karyawan.DEPARTEMEN

Apa selanjutnya?

Anda sudah menggunakan pengubah akses (publik & pribadi) dalam bab ini. Bab selanjutnya akan menjelaskan Pengubah Akses dan Pengubah Non-Akses secara rinci.

Pengubah adalah kata kunci yang Anda tambahkan ke definisi tersebut untuk mengubah artinya. Bahasa Java memiliki berbagai macam pengubah, termasuk yang berikut -

  • Pengubah Akses Java

  • Pengubah Non Akses

Untuk menggunakan pengubah, Anda memasukkan kata kuncinya dalam definisi kelas, metode, atau variabel. Pengubah mendahului pernyataan lainnya, seperti pada contoh berikut.

Contoh

public class className {
   // ...
}

private boolean myFlag;
static final double weeks = 9.5;
protected static final int BOXWIDTH = 42;

public static void main(String[] arguments) {
   // body of method
}

Pengubah Kontrol Akses

Java menyediakan sejumlah pengubah akses untuk menyetel tingkat akses untuk kelas, variabel, metode, dan konstruktor. Empat tingkat akses adalah -

  • Terlihat oleh paket, defaultnya. Tidak ada pengubah yang dibutuhkan.
  • Hanya dapat dilihat oleh kelas (pribadi).
  • Dapat dilihat oleh dunia (publik).
  • Dapat dilihat oleh paket dan semua subclass (dilindungi).

Pengubah Non-Akses

Java menyediakan sejumlah pengubah non-akses untuk mencapai banyak fungsi lainnya.

  • The statis pengubah untuk menciptakan metode kelas dan variabel.

  • The akhir pengubah untuk menyelesaikan implementasi dari kelas, metode, dan variabel.

  • The abstrak pengubah untuk membuat kelas abstrak dan metode.

  • The disinkronisasi dan mudah menguap pengubah, yang digunakan untuk benang.

Apa selanjutnya?

Pada bagian selanjutnya, kita akan membahas tentang Operator Dasar yang digunakan dalam Bahasa Java. Bab ini akan memberi Anda gambaran umum tentang bagaimana operator ini dapat digunakan selama pengembangan aplikasi.

Java menyediakan sekumpulan operator yang kaya untuk memanipulasi variabel. Kami dapat membagi semua operator Java ke dalam grup berikut -

  • Operator Aritmatika
  • Operator Relasional
  • Operator Bitwise
  • Operator Logis
  • Operator Penugasan
  • Operator Misc

Operator Aritmatika

Operator aritmatika digunakan dalam ekspresi matematika dengan cara yang sama seperti yang digunakan dalam aljabar. Tabel berikut mencantumkan operator aritmatika -

Asumsikan variabel integer A menampung 10 dan variabel B menampung 20, lalu -

Tunjukkan Contoh

Operator Deskripsi Contoh
+ (Penambahan) Menambahkan nilai di kedua sisi operator. A + B akan menghasilkan 30
- (Pengurangan) Mengurangi operan kanan dari operan kiri. A - B akan memberi -10
* (Perkalian) Mengalikan nilai di kedua sisi operator. A * B akan memberi 200
/ (Divisi) Membagi operan kiri dengan operan kanan. B / A akan memberi 2
% (Modulus) Membagi operan kiri dengan operan kanan dan mengembalikan sisanya. B% A akan memberi 0
++ (Increment) Meningkatkan nilai operan sebanyak 1. B ++ menghasilkan 21
- (Penurunan) Menurunkan nilai operan sebesar 1. B-- memberi 19

Operator Relasional

Ada operator relasional berikut yang didukung oleh bahasa Java.

Asumsikan variabel A memiliki 10 dan variabel B memiliki 20, maka -

Tunjukkan Contoh

Operator Deskripsi Contoh
== (sama dengan) Memeriksa apakah nilai dari dua operan sama atau tidak, jika ya maka kondisinya menjadi benar. (A == B) tidak benar.
! = (tidak sama dengan) Memeriksa apakah nilai dari dua operan sama atau tidak, jika nilai tidak sama maka kondisi menjadi benar. (A! = B) benar.
> (lebih dari) Memeriksa apakah nilai operan kiri lebih besar dari nilai operan kanan, jika ya maka kondisi menjadi benar. (A> B) tidak benar.
<(kurang dari) Memeriksa apakah nilai operan kiri kurang dari nilai operan kanan, jika ya maka kondisinya menjadi benar. (A <B) benar.
> = (lebih besar dari atau sama dengan) Memeriksa apakah nilai operan kiri lebih besar dari atau sama dengan nilai operan kanan, jika ya maka kondisi menjadi benar. (A> = B) tidak benar.
<= (kurang dari atau sama dengan) Memeriksa apakah nilai operan kiri kurang dari atau sama dengan nilai operan kanan, jika ya maka kondisi menjadi benar. (A <= B) benar.

Operator Bitwise

Java mendefinisikan beberapa operator bitwise, yang dapat diterapkan pada tipe integer, long, int, short, char, dan byte.

Operator bitwise bekerja pada bit dan melakukan operasi bit demi bit. Asumsikan jika a = 60 dan b = 13; sekarang dalam format biner mereka akan menjadi sebagai berikut -

a = 0011 1100

b = 0000 1101

-----------------

a & b = 0000 1100

a | b = 0011 1101

a ^ b = 0011 0001

~ a = 1100 0011

Tabel berikut mencantumkan operator bitwise -

Asumsikan variabel integer A memegang 60 dan variabel B memegang 13 lalu -

Tunjukkan Contoh

Operator Deskripsi Contoh
& (bitwise dan) Biner AND Operator menyalin sedikit ke hasil jika ada di kedua operan. (A & B) akan memberikan 12 yaitu 0000 1100
| (bitwise atau) Biner ATAU Operator menyalin sedikit jika ada di salah satu operan. (A | B) akan menghasilkan 61 yaitu 0011 1101
^ (XOR bitwise) Operator Biner XOR menyalin bit jika diatur dalam satu operan tetapi tidak keduanya. (A ^ B) akan menghasilkan 49 yaitu 0011 0001
~ (pujian bitwise) Operator Pelengkap Binary Ones adalah unary dan memiliki efek bit 'membalik'. (~ A) akan memberikan -61 yaitu 1100 0011 dalam bentuk komplemen 2 karena bilangan biner bertanda.
<< (shift kiri) Operator Binary Left Shift. Nilai operan kiri dipindahkan ke kiri dengan jumlah bit yang ditentukan oleh operan kanan. A << 2 akan menghasilkan 240 yaitu 1111 0000
>> (shift kanan) Operator Pergeseran Kanan Biner. Nilai operan kiri dipindahkan ke kanan dengan jumlah bit yang ditentukan oleh operan kanan. A >> 2 akan menghasilkan 15 yaitu 1111
>>> (nol mengisi shift kanan) Geser operator pengisian nol ke kanan. Nilai operan kiri dipindahkan ke kanan dengan jumlah bit yang ditentukan oleh operan kanan dan nilai yang digeser diisi dengan nol. A >>> 2 akan menghasilkan 15 yaitu 0000 1111

Operator Logis

Tabel berikut mencantumkan operator logika -

Asumsikan variabel Boolean A bernilai true dan variabel B bernilai false, lalu -

Tunjukkan Contoh

Operator Deskripsi Contoh
&& (logis dan) Disebut Logical AND operator. Jika kedua operan bukan nol, maka kondisinya menjadi benar. (A && B) salah
|| (logis atau) Disebut Logical OR Operator. Jika salah satu dari dua operan bukan nol, maka kondisinya menjadi benar. (A || B) itu benar
! (tidak logis) Disebut Logical NOT Operator. Gunakan untuk membalikkan keadaan logis operannya. Jika kondisi benar maka operator NOT akan membuat salah. ! (A && B) benar

Operator Penugasan

Berikut adalah operator tugas yang didukung oleh bahasa Java -

Tunjukkan Contoh

Operator Deskripsi Contoh
= Operator tugas sederhana. Menetapkan nilai dari operan sisi kanan ke operan sisi kiri. C = A + B akan memberikan nilai A + B ke dalam C
+ = Tambahkan DAN operator penugasan. Ini menambahkan operan kanan ke operan kiri dan menetapkan hasilnya ke operan kiri. C + = A ekivalen dengan C = C + A
- = Kurangi DAN operator penugasan. Ini mengurangi operan kanan dari operan kiri dan menetapkan hasilnya ke operan kiri. C - = A ekivalen dengan C = C - A
* = Kalikan DAN operator penugasan. Ini mengalikan operan kanan dengan operan kiri dan menetapkan hasilnya ke operan kiri. C * = A ekivalen dengan C = C * A
/ = Bagi DAN operator penugasan. Ini membagi operan kiri dengan operan kanan dan menetapkan hasilnya ke operan kiri. C / = A ekivalen dengan C = C / A
% = Modulus DAN operator penugasan. Dibutuhkan modulus menggunakan dua operan dan menetapkan hasilnya ke operan kiri. C% = A setara dengan C = C% A
<< = Pergeseran kiri DAN operator penugasan. C << = 2 sama dengan C = C << 2
>> = Shift kanan DAN operator penugasan. C >> = 2 sama dengan C = C >> 2
& = Bitwise AND operator penugasan. C & = 2 sama dengan C = C & 2
^ = bitwise eksklusif OR dan operator penugasan. C ^ = 2 sama dengan C = C ^ 2
| = bitwise inklusif OR dan operator penugasan. C | = 2 sama dengan C = C | 2

Operator Miscellaneous

Ada beberapa operator lain yang didukung oleh Bahasa Java.

Operator Bersyarat (? :)

Operator bersyarat juga dikenal sebagai ternary operator. Operator ini terdiri dari tiga operan dan digunakan untuk mengevaluasi ekspresi Boolean. Tujuan operator adalah memutuskan, nilai mana yang harus diberikan ke variabel. Operator ditulis sebagai -

variable x = (expression) ? value if true : value if false

Berikut adalah contohnya -

Example

public class Test {

   public static void main(String args[]) {
      int a, b;
      a = 10;
      b = (a == 1) ? 20: 30;
      System.out.println( "Value of b is : " +  b );

      b = (a == 10) ? 20: 30;
      System.out.println( "Value of b is : " + b );
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Value of b is : 30
Value of b is : 20

instansi Operator

Operator ini hanya digunakan untuk variabel referensi objek. Operator memeriksa apakah objek dari tipe tertentu (tipe kelas atau tipe antarmuka). instanceof operator ditulis sebagai -

( Object reference variable ) instanceof  (class/interface type)

Jika objek yang dirujuk oleh variabel di sisi kiri operator melewati pemeriksaan IS-A untuk tipe kelas / antarmuka di sisi kanan, maka hasilnya akan benar. Berikut adalah contohnya -

Example

public class Test {

   public static void main(String args[]) {

      String name = "James";

      // following will return true since name is type of String
      boolean result = name instanceof String;
      System.out.println( result );
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

true

Operator ini akan tetap mengembalikan nilai true, jika objek yang dibandingkan adalah tugas yang kompatibel dengan tipe di sebelah kanan. Berikut adalah satu contoh lagi -

Example

class Vehicle {}

public class Car extends Vehicle {

   public static void main(String args[]) {

      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result );
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

true

Diutamakan Operator Java

Prioritas operator menentukan pengelompokan istilah dalam ekspresi. Ini memengaruhi bagaimana ekspresi dievaluasi. Operator tertentu memiliki prioritas lebih tinggi daripada yang lain; misalnya, operator perkalian memiliki prioritas yang lebih tinggi daripada operator penjumlahan -

Misalnya, x = 7 + 3 * 2; di sini x ditetapkan 13, bukan 20 karena operator * memiliki prioritas lebih tinggi dari +, jadi pertama-tama dikalikan dengan 3 * 2 dan kemudian dijumlahkan menjadi 7.

Di sini, operator dengan prioritas tertinggi muncul di bagian atas tabel, operator dengan prioritas terendah muncul di bagian bawah. Dalam ekspresi, operator dengan prioritas lebih tinggi akan dievaluasi terlebih dahulu.

Kategori Operator Asosiatif
Postfix ekspresi ++ ekspresi-- Kiri ke kanan
Unary ++ ekspresi –- ekspresi + ekspresi –ekspresi ~! Kanan ke kiri
Perkalian * /% Kiri ke kanan
Aditif + - Kiri ke kanan
Bergeser << >> >>> Kiri ke kanan
Relasional <> <=> = turunan Kiri ke kanan
Persamaan ==! = Kiri ke kanan
Bitwise DAN & Kiri ke kanan
Bitwise XOR ^ Kiri ke kanan
Bitwise ATAU | Kiri ke kanan
DAN logis && Kiri ke kanan
Logis ATAU || Kiri ke kanan
Bersyarat ?: Kanan ke kiri
Tugas = + = - = * = / =% = ^ = | = << = >> = >>> = Kanan ke kiri

Apa selanjutnya?

Bab selanjutnya akan menjelaskan tentang kontrol loop dalam pemrograman Java. Bab ini akan menjelaskan berbagai jenis loop dan bagaimana loop ini dapat digunakan dalam pengembangan program Java dan untuk tujuan penggunaan apa loop tersebut.

Mungkin ada situasi ketika Anda perlu mengeksekusi blok kode beberapa kali. Secara umum, pernyataan dieksekusi secara berurutan: Pernyataan pertama dalam suatu fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya.

Bahasa pemrograman menyediakan berbagai struktur kontrol yang memungkinkan jalur eksekusi yang lebih rumit.

SEBUAH loop Pernyataan memungkinkan kita untuk mengeksekusi pernyataan atau sekelompok pernyataan beberapa kali dan berikut adalah bentuk umum dari pernyataan loop di sebagian besar bahasa pemrograman -

Bahasa pemrograman Java menyediakan jenis loop berikut untuk menangani persyaratan perulangan. Klik tautan berikut untuk memeriksa detailnya.

Sr.No. Loop & Deskripsi
1 while loop

Mengulangi pernyataan atau sekelompok pernyataan saat kondisi tertentu benar. Ini menguji kondisi sebelum menjalankan badan perulangan.

2 untuk loop

Jalankan urutan pernyataan beberapa kali dan singkatkan kode yang mengelola variabel loop.

3 lakukan ... while loop

Seperti pernyataan while, kecuali pernyataan itu menguji kondisi di akhir badan perulangan.

Pernyataan Kontrol Loop

Pernyataan kontrol loop mengubah eksekusi dari urutan normalnya. Saat eksekusi meninggalkan ruang lingkup, semua objek otomatis yang dibuat dalam lingkup itu dimusnahkan.

Java mendukung pernyataan kontrol berikut. Klik tautan berikut untuk memeriksa detailnya.

Sr.No. Pernyataan & Deskripsi Kontrol
1 pernyataan istirahat

Menghentikan loop atau switch pernyataan dan transfer eksekusi ke pernyataan segera setelah loop atau switch.

2 lanjutkan pernyataan

Menyebabkan loop melewatkan sisa tubuhnya dan segera menguji ulang kondisinya sebelum mengulangi.

Peningkatan for loop di Java

Pada Java 5, loop for yang ditingkatkan diperkenalkan. Ini terutama digunakan untuk melintasi kumpulan elemen termasuk array.

Sintaksis

Berikut ini adalah sintaks loop for yang ditingkatkan -

for(declaration : expression) {
   // Statements
}
  • Declaration- Variabel blok yang baru dideklarasikan, adalah tipe yang kompatibel dengan elemen array yang Anda akses. Variabel akan tersedia di dalam blok for dan nilainya akan sama dengan elemen array saat ini.

  • Expression- Ini mengevaluasi larik yang perlu Anda putar. Ekspresi dapat berupa variabel larik atau pemanggilan metode yang mengembalikan larik.

Contoh

public class Test {

   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers ) {
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names = {"James", "Larry", "Tom", "Lacy"};

      for( String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

10, 20, 30, 40, 50,
James, Larry, Tom, Lacy,

Apa selanjutnya?

Pada bab berikut, kita akan belajar tentang pernyataan pengambilan keputusan dalam pemrograman Java.

Struktur pengambilan keputusan memiliki satu atau lebih kondisi untuk dievaluasi atau diuji oleh program, bersama dengan pernyataan atau pernyataan yang akan dieksekusi jika kondisi ditentukan benar, dan secara opsional, pernyataan lain untuk dieksekusi jika kondisi ditentukan menjadi salah.

Berikut ini adalah bentuk umum dari struktur pengambilan keputusan khas yang ditemukan di sebagian besar bahasa pemrograman -

Bahasa pemrograman Java menyediakan jenis pernyataan pengambilan keputusan berikut. Klik tautan berikut untuk memeriksa detailnya.

Sr.No. Pernyataan & Deskripsi
1 jika pernyataan

Sebuah if statement terdiri dari ekspresi boolean yang diikuti oleh satu atau beberapa pernyataan.

2 jika ... pernyataan lain

Sebuah if statement bisa diikuti dengan opsional else statement, yang dijalankan jika ekspresi boolean salah.

3 pernyataan if bersarang

Anda bisa menggunakannya if atau else if pernyataan di dalam yang lain if atau else if pernyataan.

4 pernyataan switch

SEBUAH switch pernyataan memungkinkan variabel untuk diuji kesetaraan terhadap daftar nilai.

Itu? : Operator

Kami telah meliputnya conditional operator ? : di bab sebelumnya yang bisa digunakan untuk menggantikan if...elsepernyataan. Ini memiliki bentuk umum berikut -

Exp1 ? Exp2 : Exp3;

Dimana Exp1, Exp2, dan Exp3 adalah ekspresi. Perhatikan penggunaan dan penempatan titik dua.

Untuk menentukan nilai seluruh ekspresi, awalnya exp1 dievaluasi.

  • Jika nilai exp1 benar, maka nilai Exp2 akan menjadi nilai keseluruhan ekspresi.

  • Jika nilai exp1 salah, maka Exp3 dievaluasi dan nilainya menjadi nilai seluruh ekspresi.

Apa selanjutnya?

Pada bab selanjutnya, kita akan membahas tentang kelas Number (dalam paket java.lang) dan subkelasnya dalam Bahasa Java.

Kami akan melihat beberapa situasi di mana Anda akan menggunakan instansiasi kelas ini daripada tipe data primitif, serta kelas seperti pemformatan, fungsi matematika yang perlu Anda ketahui saat bekerja dengan Bilangan.

Biasanya, ketika kita bekerja dengan Numbers, kita menggunakan tipe data primitif seperti byte, int, long, double, dll.

Contoh

int i = 5000;
float gpa = 13.65f;
double mask = 125;

Namun, dalam pengembangan, kami menemukan situasi di mana kami perlu menggunakan objek, bukan tipe data primitif. Untuk mencapai ini, Java menyediakanwrapper classes.

Semua kelas pembungkus (Integer, Long, Byte, Double, Float, Short) adalah subclass dari nomor kelas abstrak.

Objek kelas pembungkus berisi atau membungkus tipe data primitifnya masing-masing. Mengonversi tipe data primitif menjadi objek disebutboxing, dan ini ditangani oleh kompiler. Oleh karena itu, saat menggunakan kelas pembungkus, Anda hanya perlu meneruskan nilai tipe data primitif ke konstruktor kelas Pembungkus.

Dan objek Wrapper akan diubah kembali menjadi tipe data primitif, dan proses ini disebut unboxing. ItuNumber class adalah bagian dari paket java.lang.

Berikut adalah contoh tinju dan unboxing -

Contoh

public class Test {

   public static void main(String args[]) {
      Integer x = 5; // boxes int to an Integer object
      x =  x + 10;   // unboxes the Integer to a int
      System.out.println(x); 
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

15

Ketika x diberi nilai integer, kompilator mengotak-kotakkan integer karena x adalah objek integer. Nanti, x tidak dikotakkan sehingga bisa ditambahkan sebagai integer.

Metode Angka

Berikut adalah daftar metode instan yang diimplementasikan oleh semua subclass dari kelas Number:

Sr.No. Metode & Deskripsi
1 xxxValue ()

Mengonversi nilai objek Number ini ke tipe data xxx dan mengembalikannya.

2 dibandingkan dengan()

Membandingkan objek Angka ini dengan argumen.

3 sama dengan ()

Menentukan apakah ini objek nomor sama dengan argumen.

4 Nilai dari()

Mengembalikan objek Integer yang memiliki nilai primitif yang ditentukan.

5 toString ()

Mengembalikan objek String yang mewakili nilai dari int atau Integer yang ditentukan.

6 parseInt ()

Metode ini digunakan untuk mendapatkan tipe data primitif dari String tertentu.

7 abs ()

Mengembalikan nilai absolut dari argumen.

8 ceil ()

Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan argumen. Dikembalikan sebagai ganda.

9 lantai()

Mengembalikan bilangan bulat terbesar yang kurang dari atau sama dengan argumen. Dikembalikan sebagai ganda.

10 rint ()

Mengembalikan bilangan bulat yang paling dekat nilainya dengan argumen. Dikembalikan sebagai ganda.

11 bulat()

Mengembalikan panjang atau int terdekat, seperti yang ditunjukkan oleh tipe kembalian metode ke argumen.

12 min ()

Mengembalikan nilai yang lebih kecil dari dua argumen.

13 maks ()

Mengembalikan argumen yang lebih besar dari dua argumen.

14 exp ()

Mengembalikan basis dari logaritma natural, e, ke pangkat argumen.

15 catatan()

Mengembalikan logaritma natural dari argumen.

16 pow ()

Mengembalikan nilai dari argumen pertama yang dipangkatkan dengan argumen kedua.

17 sqrt ()

Mengembalikan akar kuadrat dari argumen.

18 dosa()

Mengembalikan sinus dari nilai ganda yang ditentukan.

19 cos ()

Mengembalikan kosinus dari nilai ganda yang ditentukan.

20 tan ()

Mengembalikan tangen dari nilai ganda yang ditentukan.

21 seperti dalam()

Mengembalikan busur dari nilai ganda yang ditentukan.

22 acos ()

Mengembalikan arccosine dari nilai ganda yang ditentukan.

23 atan ()

Mengembalikan arctangen dari nilai ganda yang ditentukan.

24 atan2 ()

Mengonversi koordinat persegi panjang (x, y) menjadi koordinat kutub (r, theta) dan mengembalikan theta.

25 toDegrees ()

Mengubah argumen menjadi derajat.

26 toRadians ()

Mengubah argumen menjadi radian.

27 acak()

Mengembalikan nomor acak.

Apa selanjutnya?

Di bagian selanjutnya, kita akan membahas kelas Karakter di Java. Anda akan belajar bagaimana menggunakan Karakter objek dan tipe data primitif char di Java.

Biasanya, ketika kita bekerja dengan karakter, kita menggunakan tipe data primitif char.

Contoh

char ch = 'a';

// Unicode for uppercase Greek omega character
char uniChar = '\u039A'; 

// an array of chars
char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };

Namun dalam pengembangan, kami menemukan situasi di mana kami perlu menggunakan objek, bukan tipe data primitif. Untuk mencapai ini, Java menyediakan kelas pembungkusCharacter untuk tipe data primitif char.

Kelas Karakter menawarkan sejumlah metode kelas yang berguna (yaitu, statis) untuk memanipulasi karakter. Anda dapat membuat objek Karakter dengan konstruktor Karakter -

Character ch = new Character('a');

Kompilator Java juga akan membuat objek Karakter untuk Anda dalam beberapa keadaan. Misalnya, jika Anda meneruskan karakter primitif ke dalam metode yang mengharapkan objek, kompilator secara otomatis mengubah karakter tersebut menjadi Karakter untuk Anda. Fitur ini disebut autoboxing atau unboxing, jika konversi berjalan ke arah lain.

Contoh

// Here following primitive char 'a'
// is boxed into the Character object ch
Character ch = 'a';

// Here primitive 'x' is boxed for method test,
// return is unboxed to char 'c'
char c = test('x');

Escape Sequences

Karakter yang diawali dengan garis miring terbalik (\) adalah urutan escape dan memiliki arti khusus bagi kompiler.

Karakter baris baru (\ n) telah sering digunakan dalam tutorial ini dalam pernyataan System.out.println () untuk melanjutkan ke baris berikutnya setelah string dicetak.

Tabel berikut menunjukkan urutan escape Java -

Urutan pelarian Deskripsi
\ t Menyisipkan tab dalam teks pada saat ini.
\ b Menyisipkan spasi mundur dalam teks pada saat ini.
\ n Menyisipkan baris baru dalam teks pada saat ini.
\ r Menyisipkan carriage return dalam teks pada saat ini.
\ f Menyisipkan umpan formulir dalam teks pada saat ini.
\ ' Menyisipkan karakter kutipan tunggal dalam teks pada saat ini.
\ " Menyisipkan karakter kutip ganda dalam teks pada saat ini.
\\ Menyisipkan karakter garis miring terbalik di teks pada saat ini.

Ketika sebuah escape sequence ditemukan dalam pernyataan print, kompilator akan menafsirkannya sesuai dengan itu.

Contoh

Jika Anda ingin menempatkan tanda kutip di dalam tanda kutip, Anda harus menggunakan urutan escape, \ ", pada tanda petik interior -

public class Test {

   public static void main(String args[]) {
      System.out.println("She said \"Hello!\" to me.");
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

She said "Hello!" to me.

Metode Karakter

Berikut ini adalah daftar dari metode contoh penting yang diimplementasikan oleh semua subclass dari kelas Character -

Sr.No. Metode & Deskripsi
1 isLetter ()

Menentukan apakah nilai char yang ditentukan adalah sebuah huruf.

2 isDigit ()

Menentukan apakah nilai karakter yang ditentukan adalah digit.

3 isWhitespace ()

Menentukan apakah nilai karakter yang ditentukan spasi kosong.

4 isUpperCase ()

Menentukan apakah nilai karakter yang ditentukan adalah huruf besar.

5 isLowerCase ()

Menentukan apakah nilai karakter yang ditentukan adalah huruf kecil.

6 toUpperCase ()

Mengembalikan bentuk huruf besar dari nilai karakter yang ditentukan.

7 toLowerCase ()

Mengembalikan bentuk huruf kecil dari nilai karakter yang ditentukan.

8 toString ()

Mengembalikan objek String yang mewakili nilai karakter yang ditentukan, yaitu string satu karakter.

Untuk daftar lengkap metode, lihat spesifikasi java.lang.Character API.

Apa selanjutnya?

Di bagian selanjutnya, kita akan membahas kelas String di Java. Anda akan belajar cara mendeklarasikan dan menggunakan Strings secara efisien serta beberapa metode penting di kelas String.

String, yang banyak digunakan dalam pemrograman Java, adalah urutan karakter. Dalam bahasa pemrograman Java, string diperlakukan sebagai objek.

Platform Java menyediakan kelas String untuk membuat dan memanipulasi string.

Membuat String

Cara paling langsung untuk membuat string adalah dengan menulis -

String greeting = "Hello world!";

Setiap kali menemukan string literal dalam kode Anda, kompilator membuat objek String dengan nilainya dalam hal ini, "Halo dunia! '.

Seperti objek lainnya, Anda dapat membuat objek String dengan menggunakan kata kunci baru dan konstruktor. Kelas String memiliki 11 konstruktor yang memungkinkan Anda memberikan nilai awal string menggunakan sumber berbeda, seperti larik karakter.

Contoh

public class StringDemo {

   public static void main(String args[]) {
      char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
      String helloString = new String(helloArray);  
      System.out.println( helloString );
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

hello.

Note- Kelas String tidak dapat diubah, sehingga setelah dibuat, objek String tidak dapat diubah. Jika ada kebutuhan untuk melakukan banyak modifikasi pada karakter String, maka Anda harus menggunakan String Buffer & String Builder Classes.

Panjang String

Metode yang digunakan untuk memperoleh informasi tentang suatu objek dikenal sebagai accessor methods. Salah satu metode pengakses yang dapat Anda gunakan dengan string adalah metode length (), yang mengembalikan jumlah karakter yang terdapat dalam objek string.

Program berikut adalah contoh dari length(), metode kelas String.

Contoh

public class StringDemo {

   public static void main(String args[]) {
      String palindrome = "Dot saw I was Tod";
      int len = palindrome.length();
      System.out.println( "String Length is : " + len );
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

String Length is : 17

String Penggabungan

Kelas String menyertakan metode untuk menggabungkan dua string -

string1.concat(string2);

Ini mengembalikan string baru yaitu string1 dengan string2 ditambahkan ke dalamnya di akhir. Anda juga bisa menggunakan metode concat () dengan string literal, seperti pada -

"My name is ".concat("Zara");

String lebih sering digabungkan dengan operator +, seperti pada -

"Hello," + " world" + "!"

yang menghasilkan -

"Hello, world!"

Mari kita lihat contoh berikut -

Contoh

public class StringDemo {

   public static void main(String args[]) {
      String string1 = "saw I was ";
      System.out.println("Dot " + string1 + "Tod");
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Dot saw I was Tod

Membuat Format Strings

Anda memiliki metode printf () dan format () untuk mencetak keluaran dengan angka yang diformat. Kelas String memiliki metode kelas yang setara, format (), yang mengembalikan objek String daripada objek PrintStream.

Menggunakan metode format statis () String memungkinkan Anda membuat string berformat yang dapat digunakan kembali, sebagai lawan dari pernyataan cetak satu kali. Misalnya, alih-alih -

Contoh

System.out.printf("The value of the float variable is " +
                  "%f, while the value of the integer " +
                  "variable is %d, and the string " +
                  "is %s", floatVar, intVar, stringVar);

Anda bisa menulis -

String fs;
fs = String.format("The value of the float variable is " +
                   "%f, while the value of the integer " +
                   "variable is %d, and the string " +
                   "is %s", floatVar, intVar, stringVar);
System.out.println(fs);

Metode String

Berikut adalah daftar metode yang didukung oleh kelas String -

Sr.No. Metode & Deskripsi
1 char charAt (indeks int)

Mengembalikan karakter pada indeks yang ditentukan.

2 int bandingkanTo (Objek o)

Membandingkan String ini dengan Objek lain.

3 int bandingkanTo (String anotherString)

Membandingkan dua string secara leksikografis.

4 int bandingkanToIgnoreCase (String str)

Membandingkan dua string secara leksikografis, mengabaikan perbedaan huruf.

5 String concat (String str)

Menggabungkan string yang ditentukan ke akhir string ini.

6 boolean contentEquals (StringBuffer sb)

Mengembalikan nilai true jika dan hanya jika String ini mewakili urutan karakter yang sama seperti StringBuffer yang ditentukan.

7 statis String copyValueOf (char [] data)

Mengembalikan String yang mewakili urutan karakter dalam array yang ditentukan.

8 statis String copyValueOf (char [] data, int offset, int count)

Mengembalikan String yang mewakili urutan karakter dalam array yang ditentukan.

9 boolean diakhiri dengan (string suffix)

Menguji apakah string ini diakhiri dengan sufiks yang ditentukan.

10 boolean sama dengan (Object anObject)

Bandingkan string ini dengan objek yang ditentukan.

11 boolean sama denganIgnoreCase (String anotherString)

Bandingkan String ini dengan String lain, dengan mengabaikan pertimbangan kasus.

12 byte getBytes ()

Menyandikan String ini ke dalam urutan byte menggunakan rangkaian karakter default platform, menyimpan hasilnya ke dalam array byte baru.

13 byte [] getBytes (String charsetName)

Mengkodekan String ini menjadi urutan byte menggunakan charset bernama, menyimpan hasilnya ke dalam array byte baru.

14 batal getChars (int srcBegin, int srcEnd, char [] dst, int dstBegin)

Menyalin karakter dari string ini ke dalam larik karakter tujuan.

15 int hashCode ()

Mengembalikan kode hash untuk string ini.

16 int indexOf (int ch)

Mengembalikan indeks dalam string ini dari kemunculan pertama dari karakter yang ditentukan.

17 int indexOf (int ch, int fromIndex)

Mengembalikan indeks dalam string ini dari kemunculan pertama dari karakter yang ditentukan, memulai pencarian pada indeks yang ditentukan.

18 int indexOf (String str)

Mengembalikan indeks dalam string ini dari kemunculan pertama dari substring yang ditentukan.

19 int indexOf (String str, int fromIndex)

Mengembalikan indeks dalam string ini dari kemunculan pertama dari substring yang ditentukan, dimulai dari indeks yang ditentukan.

20 String magang ()

Mengembalikan representasi kanonik untuk objek string.

21 int lastIndexOf (int ch)

Mengembalikan indeks dalam string ini dari kemunculan terakhir dari karakter yang ditentukan.

22 int lastIndexOf (int ch, int fromIndex)

Mengembalikan indeks dalam string ini dari kemunculan terakhir dari karakter yang ditentukan, mencari mundur mulai dari indeks yang ditentukan.

23 int lastIndexOf (String str)

Mengembalikan indeks dalam string ini dari kejadian paling kanan dari substring yang ditentukan.

24 int lastIndexOf (String str, int fromIndex)

Mengembalikan indeks dalam string ini dari kemunculan terakhir dari substring yang ditentukan, mencari mundur mulai dari indeks yang ditentukan.

25 int panjang ()

Mengembalikan panjang string ini.

26 pertandingan boolean (String regex)

Memberi tahu apakah string ini cocok dengan ekspresi reguler yang diberikan.

27 boolean regionMatches (boolean ignoreCase, int toffset, String other, int ooffset, int len)

Menguji apakah dua daerah string sama.

28 boolean regionMatches (int toffset, String other, int ooffset, int len)

Menguji apakah dua daerah string sama.

29 Ganti string (char oldChar, char newChar)

Mengembalikan string baru yang dihasilkan dari mengganti semua kemunculan oldChar dalam string ini dengan newChar.

30 String replaceAll (String regex, String replacement

Mengganti setiap substring dari string ini yang cocok dengan ekspresi reguler yang diberikan dengan penggantian yang diberikan.

31 String replaceFirst (String regex, Penggantian string)

Mengganti substring pertama dari string ini yang cocok dengan ekspresi reguler yang diberikan dengan penggantian yang diberikan.

32 String [] pisahkan (String regex)

Membagi string ini di sekitar kecocokan ekspresi reguler yang diberikan.

33 String [] pisahkan (String regex, batas int)

Membagi string ini di sekitar kecocokan ekspresi reguler yang diberikan.

34 boolean beginWith (Awalan string)

Menguji apakah string ini dimulai dengan prefiks yang ditentukan.

35 boolean beginWith (Awalan string, toffset int)

Menguji apakah string ini dimulai dengan awalan yang ditentukan memulai indeks yang ditentukan.

36 CharSequence subSequence (int beginIndex, int endIndex)

Mengembalikan urutan karakter baru yang merupakan urutan dari urutan ini.

37 Substring string (int beginIndex)

Mengembalikan string baru yang merupakan substring dari string ini.

38 Substring string (int beginIndex, int endIndex)

Mengembalikan string baru yang merupakan substring dari string ini.

39 char [] toCharArray ()

Mengonversi string ini menjadi larik karakter baru.

40 String toLowerCase ()

Mengonversi semua karakter dalam String ini ke huruf kecil menggunakan aturan lokal default.

41 String toLowerCase (Lokal lokal)

Mengonversi semua karakter dalam String ini ke huruf kecil menggunakan aturan Lokal yang diberikan.

42 String toString ()

Objek ini (yang sudah berupa string!) Dengan sendirinya dikembalikan.

43 String toUpperCase ()

Mengonversi semua karakter dalam String ini menjadi huruf besar menggunakan aturan lokal default.

44 String toUpperCase (Lokal lokal)

Mengonversi semua karakter dalam String ini menjadi huruf besar menggunakan aturan Lokal yang diberikan.

45 Potong tali ()

Mengembalikan salinan string, dengan spasi kosong di depan dan di belakangnya dihilangkan.

46 nilai String statis (tipe data primitif x)

Mengembalikan representasi string dari argumen tipe data yang diteruskan.

Java menyediakan struktur data, file array, yang menyimpan kumpulan elemen berurutan ukuran tetap dari tipe yang sama. Sebuah array digunakan untuk menyimpan kumpulan data, tetapi seringkali lebih berguna untuk menganggap array sebagai kumpulan variabel dengan tipe yang sama.

Alih-alih mendeklarasikan variabel individual, seperti number0, number1, ..., dan number99, Anda mendeklarasikan satu variabel array seperti bilangan dan menggunakan bilangan [0], bilangan [1], dan ..., bilangan [99] untuk mewakili variabel individu.

Tutorial ini memperkenalkan cara mendeklarasikan variabel array, membuat array, dan memproses array menggunakan variabel yang diindeks.

Mendeklarasikan Variabel Array

Untuk menggunakan array dalam program, Anda harus mendeklarasikan variabel untuk mereferensikan array, dan Anda harus menentukan jenis array yang dapat direferensikan oleh variabel. Berikut adalah sintaks untuk mendeklarasikan variabel array -

Sintaksis

dataType[] arrayRefVar;   // preferred way.
or
dataType arrayRefVar[];  // works but not preferred way.

Note - Gayanya dataType[] arrayRefVarlebih disukai. GayadataType arrayRefVar[] berasal dari bahasa C / C ++ dan diadopsi di Java untuk mengakomodasi pemrogram C / C ++.

Contoh

Potongan kode berikut adalah contoh sintaks ini -

double[] myList;   // preferred way.
or
double myList[];   // works but not preferred way.

Membuat Array

Anda dapat membuat array dengan menggunakan operator baru dengan sintaks berikut -

Sintaksis

arrayRefVar = new dataType[arraySize];

Pernyataan di atas melakukan dua hal -

  • Ini membuat sebuah array menggunakan dataType [arraySize] baru.

  • Ini memberikan referensi dari array yang baru dibuat ke variabel arrayRefVar.

Mendeklarasikan variabel array, membuat array, dan menetapkan referensi array ke variabel dapat digabungkan dalam satu pernyataan, seperti yang ditunjukkan di bawah ini -

dataType[] arrayRefVar = new dataType[arraySize];

Alternatifnya Anda dapat membuat array sebagai berikut -

dataType[] arrayRefVar = {value0, value1, ..., valuek};

Elemen array diakses melalui index. Indeks array berbasis 0; artinya, mereka mulai dari 0 hinggaarrayRefVar.length-1.

Contoh

Pernyataan berikut mendeklarasikan variabel array, myList, membuat array 10 elemen tipe ganda dan memberikan referensinya ke myList -

double[] myList = new double[10];

Gambar berikut mewakili array myList. Di sini, myList memiliki sepuluh nilai ganda dan indeksnya dari 0 hingga 9.

Memproses Array

Saat memproses elemen array, kami sering menggunakan salah satunya for loop atau foreach loop karena semua elemen dalam array memiliki tipe yang sama dan ukuran array diketahui.

Contoh

Berikut adalah contoh lengkap yang menunjukkan cara membuat, menginisialisasi, dan memproses array -

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // Print all the array elements
      for (int i = 0; i < myList.length; i++) {
         System.out.println(myList[i] + " ");
      }
     
      // Summing all elements
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
         total += myList[i];
      }
      System.out.println("Total is " + total);
      
      // Finding the largest element
      double max = myList[0];
      for (int i = 1; i < myList.length; i++) {
         if (myList[i] > max) max = myList[i];
      }
      System.out.println("Max is " + max);  
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

Loop depan

JDK 1.5 memperkenalkan loop for baru yang dikenal sebagai loop foreach atau loop for yang disempurnakan, yang memungkinkan Anda melintasi larik lengkap secara berurutan tanpa menggunakan variabel indeks.

Contoh

Kode berikut menampilkan semua elemen dalam array myList -

public class TestArray {

   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};

      // Print all the array elements
      for (double element: myList) {
         System.out.println(element);
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

1.9
2.9
3.4
3.5

Meneruskan Array ke Metode

Sama seperti Anda bisa meneruskan nilai tipe primitif ke metode, Anda juga bisa meneruskan array ke metode. Misalnya, metode berikut menampilkan elemen dalam fileint larik -

Contoh

public static void printArray(int[] array) {
   for (int i = 0; i < array.length; i++) {
      System.out.print(array[i] + " ");
   }
}

Anda bisa memanggilnya dengan melewatkan sebuah array. Misalnya, pernyataan berikut memanggil metode printArray untuk menampilkan 3, 1, 2, 6, 4, dan 2 -

Contoh

printArray(new int[]{3, 1, 2, 6, 4, 2});

Mengembalikan Array dari Metode

Suatu metode juga dapat mengembalikan array. Misalnya, metode berikut mengembalikan array yang merupakan pembalikan dari array lain -

Contoh

public static int[] reverse(int[] list) {
   int[] result = new int[list.length];

   for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
      result[j] = list[i];
   }
   return result;
}

Kelas Array

Kelas java.util.Arrays berisi berbagai metode statis untuk mengurutkan dan mencari array, membandingkan array, dan mengisi elemen array. Metode ini kelebihan beban untuk semua tipe primitif.

Sr.No. Metode & Deskripsi
1

public static int binarySearch(Object[] a, Object key)

Mencari array tertentu dari Object (Byte, Int, double, dll.) Untuk nilai yang ditentukan menggunakan algoritma pencarian biner. Larik harus diurutkan sebelum melakukan panggilan ini. Ini mengembalikan indeks dari kunci pencarian, jika itu terdapat dalam daftar; jika tidak, ia mengembalikan (- (titik penyisipan + 1)).

2

public static boolean equals(long[] a, long[] a2)

Mengembalikan nilai benar jika dua larik panjang yang ditentukan sama satu sama lain. Dua larik dianggap sama jika kedua larik berisi jumlah elemen yang sama, dan semua pasangan elemen yang sesuai dalam dua larik adalah sama. Ini mengembalikan nilai true jika dua larik sama. Metode yang sama dapat digunakan oleh semua tipe data primitif lainnya (Byte, short, Int, dll.)

3

public static void fill(int[] a, int val)

Menetapkan nilai int yang ditentukan ke setiap elemen dari larik int yang ditentukan. Metode yang sama dapat digunakan oleh semua tipe data primitif lainnya (Byte, short, Int, dll.)

4

public static void sort(Object[] a)

Mengurutkan larik objek yang ditentukan ke dalam urutan menaik, sesuai dengan urutan alami elemennya. Metode yang sama dapat digunakan oleh semua tipe data primitif lainnya (Byte, short, Int, dll.)

Java menyediakan Date kelas tersedia di java.util paket, kelas ini merangkum tanggal dan waktu saat ini.

Kelas Tanggal mendukung dua konstruktor seperti yang ditunjukkan pada tabel berikut.

Sr.No. Pembuat & Deskripsi
1

Date( )

Konstruktor ini menginisialisasi objek dengan tanggal dan waktu saat ini.

2

Date(long millisec)

Konstruktor ini menerima argumen yang sama dengan jumlah milidetik yang telah berlalu sejak tengah malam, 1 Januari 1970.

Berikut adalah metode kelas tanggal.

Sr.No. Metode & Deskripsi
1

boolean after(Date date)

Mengembalikan nilai benar jika pemanggilan objek Tanggal berisi tanggal yang lebih lama dari yang ditentukan oleh tanggal, jika tidak, mengembalikan salah.

2

boolean before(Date date)

Mengembalikan nilai benar jika pemanggilan objek Tanggal berisi tanggal yang lebih awal dari yang ditentukan oleh tanggal, jika tidak, mengembalikan salah.

3

Object clone( )

Menduplikasi objek Tanggal pemanggilan.

4

int compareTo(Date date)

Membandingkan nilai objek pemanggilan dengan tanggal. Mengembalikan 0 jika nilainya sama. Mengembalikan nilai negatif jika objek pemanggilan lebih awal dari tanggal. Mengembalikan nilai positif jika objek pemanggilan lebih lama dari tanggal.

5

int compareTo(Object obj)

Beroperasi secara identik untuk membandingkanTo (Tanggal) jika obj adalah Tanggal kelas. Jika tidak, ClassCastException akan dilontarkan.

6

boolean equals(Object date)

Mengembalikan nilai benar jika pemanggilan objek Tanggal berisi waktu dan tanggal yang sama seperti yang ditentukan oleh tanggal, jika tidak, itu mengembalikan salah.

7

long getTime( )

Mengembalikan jumlah milidetik yang telah berlalu sejak 1 Januari 1970.

8

int hashCode( )

Mengembalikan kode hash untuk objek pemanggilan.

9

void setTime(long time)

Menyetel waktu dan tanggal seperti yang ditentukan oleh waktu, yang mewakili waktu yang telah berlalu dalam milidetik dari tengah malam, 1 Januari 1970.

10

String toString( )

Converts the invoking Date object into a string and returns the result.

Mendapatkan Tanggal dan Waktu Saat Ini

Ini adalah metode yang sangat mudah untuk mendapatkan tanggal dan waktu saat ini di Jawa. Anda dapat menggunakan objek Date sederhana dengan metode toString () untuk mencetak tanggal dan waktu sebagai berikut -

Contoh

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date using toString()
      System.out.println(date.toString());
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

on May 04 09:51:52 CDT 2009

Perbandingan Tanggal

Berikut adalah tiga cara untuk membandingkan dua tanggal -

  • Anda bisa menggunakan getTime () untuk mendapatkan jumlah milidetik yang telah berlalu sejak tengah malam, 1 Januari 1970, untuk kedua objek lalu membandingkan kedua nilai ini.

  • Anda bisa menggunakan metode sebelum (), setelah (), dan sama dengan (). Karena tanggal 12 datang sebelum tanggal 18, misalnya, Tanggal baru (99, 2, 12). Sebelum (Tanggal baru (99, 2, 18)) mengembalikan nilai benar.

  • Anda bisa menggunakan metode bandingkanTo (), yang ditentukan oleh antarmuka Comparable dan diimplementasikan oleh Tanggal.

Pemformatan Tanggal Menggunakan SimpleDateFormat

SimpleDateFormat adalah kelas konkret untuk pemformatan dan penguraian tanggal dengan cara yang peka terhadap lokal. SimpleDateFormat memungkinkan Anda memulai dengan memilih pola yang ditentukan pengguna untuk pemformatan tanggal-waktu.

Contoh

import java.util.*;
import java.text.*;

public class DateDemo {

   public static void main(String args[]) {
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

      System.out.println("Current Date: " + ft.format(dNow));
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

Kode Format DateFormat Sederhana

Untuk menentukan format waktu, gunakan string pola waktu. Dalam pola ini, semua huruf ASCII dicadangkan sebagai huruf pola, yang didefinisikan sebagai berikut -

Karakter Deskripsi Contoh
G Penunjuk era IKLAN
y Tahun dalam empat digit 2001
M Bulan dalam tahun Juli atau 07
d Hari demi bulan 10
h Jam di AM / PM (1 ~ 12) 12
H. Jam dalam sehari (0 ~ 23) 22
m Menit dalam jam 30
s Detik demi menit 55
S Mili detik 234
E Hari dalam minggu Selasa
D Hari demi hari 360
F Hari dalam seminggu 2 (Rabu kedua di bulan Juli)
w Minggu dalam tahun 40
W Minggu demi bulan 1
Sebuah Penanda AM / PM SORE
k Jam dalam sehari (1 ~ 24) 24
K Jam di AM / PM (0 ~ 11) 10
z Zona waktu Waktu Standar Timur
' Escape untuk teks Pembatas
" Kutipan tunggal `

Format Tanggal Menggunakan printf

Pemformatan tanggal dan waktu dapat dilakukan dengan sangat mudah menggunakan printfmetode. Anda menggunakan format dua huruf, dimulai dengant dan diakhiri dengan salah satu huruf dari tabel seperti yang ditunjukkan pada kode berikut.

Contoh

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();

      // display time and date
      String str = String.format("Current Date/Time : %tc", date );

      System.out.printf(str);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

Akan sedikit konyol jika Anda harus memberikan tanggal beberapa kali untuk memformat setiap bagian. Oleh karena itu, string format dapat menunjukkan indeks argumen yang akan diformat.

Indeks harus segera mengikuti% dan harus diakhiri dengan $.

Contoh

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display time and date
      System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Due date: February 09, 2004

Alternatifnya, Anda bisa menggunakan <flag. Ini menunjukkan bahwa argumen yang sama seperti dalam spesifikasi format sebelumnya harus digunakan lagi.

Contoh

import java.util.Date;
public class DateDemo {

   public static void main(String args[]) {
      // Instantiate a Date object
      Date date = new Date();
  
      // display formatted date
      System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Due date: February 09, 2004

Karakter Konversi Tanggal dan Waktu

Karakter Deskripsi Contoh
c Tanggal dan waktu lengkap Senin 04 Mei 09:51:52 CDT 2009
F Tanggal ISO 8601 2004-02-09
D Tanggal format AS (bulan / hari / tahun) 02/09/2004
T Waktu 24 jam 18:05:19
r Waktu 12 jam 06:05:19 sore
R Waktu 24 jam, tidak ada detik 18:05
Y Tahun empat digit (dengan nol) 2004
y Dua digit terakhir tahun ini (dengan nol) 04
C Dua digit pertama tahun ini (dengan nol) 20
B Nama bulan penuh Februari
b Nama bulan yang disingkat Feb
m Bulan dua digit (dengan nol) 02
d Hari dua digit (dengan nol) 03
e Hari dua digit (tanpa nol di depan) 9
SEBUAH Nama hari kerja lengkap Senin
Sebuah Nama hari kerja yang disingkat Sen
j Hari tiga digit dalam setahun (dengan nol) 069
H. Jam dua digit (dengan nol), antara 00 dan 23 18
k Jam dua digit (tanpa nol di depan), antara 0 dan 23 18
saya Jam dua digit (dengan nol), antara 01 dan 12 06
l Jam dua digit (tanpa nol di depan), antara 1 dan 12 6
M Menit dua digit (dengan nol) 05
S Detik dua digit (dengan nol) 19
L Milidetik tiga digit (dengan nol) 047
N Nanodetik sembilan digit (dengan nol di depannya) 047000000
P. Spidol huruf besar pagi atau sore SORE
p Spidol pagi atau sore huruf kecil sore
z Pengimbangan numerik RFC 822 dari GMT -0800
Z Zona waktu PST
s Detik sejak 1970-01-01 00:00:00 GMT 1078884319
Q Milidetik sejak 1970-01-01 00:00:00 GMT 1078884319047

Ada kelas berguna lainnya yang terkait dengan Tanggal dan waktu. Untuk lebih jelasnya, Anda dapat merujuk ke dokumentasi Java Standard.

Mengurai String menjadi Tanggal

Kelas SimpleDateFormat memiliki beberapa metode tambahan, terutama parse (), yang mencoba mengurai string sesuai dengan format yang disimpan dalam objek SimpleDateFormat yang diberikan.

Contoh

import java.util.*;
import java.text.*;
  
public class DateDemo {

   public static void main(String args[]) {
      SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); 
      String input = args.length == 0 ? "1818-11-11" : args[0]; 

      System.out.print(input + " Parses as "); 
      Date t;
      try {
         t = ft.parse(input); 
         System.out.println(t); 
      } catch (ParseException e) { 
         System.out.println("Unparseable using " + ft); 
      }
   }
}

Contoh yang dijalankan dari program di atas akan menghasilkan hasil sebagai berikut -

Keluaran

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

Tidur sebentar

Anda dapat tidur untuk periode waktu apa pun dari satu milidetik hingga masa pakai komputer Anda. Misalnya, program berikut akan tidur selama 3 detik -

Contoh

import java.util.*;
public class SleepDemo {

   public static void main(String args[]) {
      try { 
         System.out.println(new Date( ) + "\n"); 
         Thread.sleep(5*60*10); 
         System.out.println(new Date( ) + "\n"); 
      } catch (Exception e) {
         System.out.println("Got an exception!"); 
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

Mengukur Waktu yang Berlalu

Terkadang, Anda mungkin perlu mengukur titik waktu dalam milidetik. Jadi mari kita tulis ulang contoh di atas sekali lagi -

Contoh

import java.util.*;
public class DiffDemo {

   public static void main(String args[]) {
      try {
         long start = System.currentTimeMillis( );
         System.out.println(new Date( ) + "\n");
         
         Thread.sleep(5*60*10);
         System.out.println(new Date( ) + "\n");
         
         long end = System.currentTimeMillis( );
         long diff = end - start;
         System.out.println("Difference is : " + diff);
      } catch (Exception e) {
         System.out.println("Got an exception!");
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

Kelas Kalender Gregorian

GregorianCalendar adalah implementasi konkret dari kelas Kalender yang mengimplementasikan kalender Gregorian normal yang Anda kenal. Kami tidak membahas kelas Kalender dalam tutorial ini, Anda dapat mencari dokumentasi Java standar untuk ini.

Itu getInstance( )metode Kalender mengembalikan GregorianCalendar yang diinisialisasi dengan tanggal dan waktu saat ini di lokal dan zona waktu default. GregorianCalendar mendefinisikan dua bidang: AD dan BC. Ini mewakili dua era yang ditentukan oleh kalender Gregorian.

Ada juga beberapa konstruktor untuk objek GregorianCalendar -

Sr.No. Pembuat & Deskripsi
1

GregorianCalendar()

Membuat GregorianCalendar default menggunakan waktu saat ini di zona waktu default dengan lokal default.

2

GregorianCalendar(int year, int month, int date)

Membuat GregorianCalendar dengan tanggal yang ditetapkan di zona waktu default dengan lokal default.

3

GregorianCalendar(int year, int month, int date, int hour, int minute)

Membuat GregorianCalendar dengan tanggal dan waktu yang ditetapkan untuk zona waktu default dengan lokal default.

4

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

Membuat GregorianCalendar dengan tanggal dan waktu yang ditetapkan untuk zona waktu default dengan lokal default.

5

GregorianCalendar(Locale aLocale)

Membuat GregorianCalendar berdasarkan waktu saat ini di zona waktu default dengan lokal yang diberikan.

6

GregorianCalendar(TimeZone zone)

Menyusun GregorianCalendar berdasarkan waktu saat ini di zona waktu tertentu dengan lokal default.

7

GregorianCalendar(TimeZone zone, Locale aLocale)

Membuat Kalender Gregorian berdasarkan waktu saat ini di zona waktu tertentu dengan lokal yang diberikan.

Berikut adalah daftar beberapa metode dukungan berguna yang disediakan oleh kelas GregorianCalendar -

Sr.No. Metode & Deskripsi
1

void add(int field, int amount)

Menambahkan jumlah waktu yang ditentukan (ditandatangani) ke bidang waktu tertentu, berdasarkan aturan kalender.

2

protected void computeFields()

Mengonversi UTC sebagai milidetik ke nilai bidang waktu.

3

protected void computeTime()

Mengganti Kalender Mengonversi nilai bidang waktu ke UTC sebagai milidetik.

4

boolean equals(Object obj)

Membandingkan GregorianCalendar ini dengan referensi objek.

5

int get(int field)

Mendapat nilai untuk bidang waktu tertentu.

6

int getActualMaximum(int field)

Mengembalikan nilai maksimum yang bisa dimiliki bidang ini, berdasarkan tanggal saat ini.

7

int getActualMinimum(int field)

Mengembalikan nilai minimum yang bisa dimiliki bidang ini, berdasarkan tanggal saat ini.

8

int getGreatestMinimum(int field)

Mengembalikan nilai minimum tertinggi untuk bidang tertentu jika bervariasi.

9

Date getGregorianChange()

Mendapat tanggal perubahan Kalender Gregorian.

10

int getLeastMaximum(int field)

Mengembalikan nilai maksimum terendah untuk bidang tertentu jika bervariasi.

11

int getMaximum(int field)

Mengembalikan nilai maksimum untuk bidang tertentu.

12

Date getTime()

Mendapatkan waktu saat ini dari Kalender.

13

long getTimeInMillis()

Mendapatkan waktu saat ini dalam waktu yang lama.

14

TimeZone getTimeZone()

Mendapat zona waktu.

15

int getMinimum(int field)

Mengembalikan nilai minimum untuk bidang tertentu.

16

int hashCode()

Mengganti kode hash.

17

boolean isLeapYear(int year)

Menentukan apakah tahun tertentu adalah tahun kabisat.

18

void roll(int field, boolean up)

Menambah atau mengurangi (naik / turun) satu unit waktu pada bidang waktu tertentu tanpa mengubah bidang yang lebih besar.

19

void set(int field, int value)

Setel bidang waktu dengan nilai yang diberikan.

20

void set(int year, int month, int date)

Menetapkan nilai untuk bidang tahun, bulan, dan tanggal.

21

void set(int year, int month, int date, int hour, int minute)

Menetapkan nilai untuk bidang tahun, bulan, tanggal, jam, dan menit.

22

void set(int year, int month, int date, int hour, int minute, int second)

Menetapkan nilai untuk bidang tahun, bulan, tanggal, jam, menit, dan detik.

23

void setGregorianChange(Date date)

Setel tanggal perubahan GregorianCalendar.

24

void setTime(Date date)

Setel waktu saat ini Kalender dengan Tanggal yang diberikan.

25

void setTimeInMillis(long millis)

Setel waktu saat ini Kalender dari nilai panjang yang diberikan.

26

void setTimeZone(TimeZone value)

Menetapkan zona waktu dengan nilai zona waktu tertentu.

27

String toString()

Mengembalikan representasi string dari kalender ini.

Contoh

import java.util.*;
public class GregorianCalendarDemo {

   public static void main(String args[]) {
      String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
         "Oct", "Nov", "Dec"};
      
      int year;
      // Create a Gregorian calendar initialized
      // with the current date and time in the
      // default locale and timezone.
      
      GregorianCalendar gcalendar = new GregorianCalendar();
      
      // Display current time and date information.
      System.out.print("Date: ");
      System.out.print(months[gcalendar.get(Calendar.MONTH)]);
      System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
      System.out.println(year = gcalendar.get(Calendar.YEAR));
      System.out.print("Time: ");
      System.out.print(gcalendar.get(Calendar.HOUR) + ":");
      System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
      System.out.println(gcalendar.get(Calendar.SECOND));

      // Test if the current year is a leap year
      if(gcalendar.isLeapYear(year)) {
         System.out.println("The current year is a leap year");
      }else {
         System.out.println("The current year is not a leap year");
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year

Untuk daftar lengkap konstanta yang tersedia di kelas Kalender, Anda dapat merujuk ke dokumentasi Java standar.

Java menyediakan paket java.util.regex untuk pencocokan pola dengan ekspresi reguler. Ekspresi reguler Java sangat mirip dengan bahasa pemrograman Perl dan sangat mudah dipelajari.

Ekspresi reguler adalah urutan karakter khusus yang membantu Anda mencocokkan atau menemukan string atau kumpulan string lain, menggunakan sintaks khusus yang disimpan dalam pola. Mereka dapat digunakan untuk mencari, mengedit, atau memanipulasi teks dan data.

Paket java.util.regex utamanya terdiri dari tiga kelas berikut -

  • Pattern Class- Objek Pola adalah representasi terkompilasi dari ekspresi reguler. Kelas Pattern tidak menyediakan konstruktor publik. Untuk membuat pola, Anda harus memanggil salah satu statis publiknya terlebih dahulucompile()metode, yang kemudian akan mengembalikan objek Pola. Metode ini menerima ekspresi reguler sebagai argumen pertama.

  • Matcher Class- Objek Matcher adalah mesin yang menafsirkan pola dan melakukan operasi pencocokan terhadap string masukan. Seperti kelas Pola, Matcher tidak mendefinisikan konstruktor publik. Anda mendapatkan objek Matcher dengan memanggilmatcher() metode pada objek Pola.

  • PatternSyntaxException - Objek PatternSyntaxException adalah pengecualian yang tidak dicentang yang menunjukkan kesalahan sintaks dalam pola ekspresi reguler.

Menangkap Grup

Menangkap grup adalah cara untuk memperlakukan beberapa karakter sebagai satu kesatuan. Mereka dibuat dengan menempatkan karakter yang akan dikelompokkan di dalam satu set tanda kurung. Misalnya, ekspresi reguler (anjing) membuat satu grup yang berisi huruf "d", "o", dan "g".

Grup penangkap diberi nomor dengan menghitung tanda kurung buka dari kiri ke kanan. Dalam ekspresi ((A) (B (C))), misalnya, ada empat kelompok seperti itu -

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

Untuk mengetahui berapa banyak grup yang ada dalam ekspresi, panggil metode groupCount pada objek matcher. Metode groupCount mengembalikan fileint menunjukkan jumlah kelompok penangkap yang ada dalam pola pencocok.

Ada juga grup khusus, grup 0, yang selalu mewakili seluruh ekspresi. Grup ini tidak termasuk dalam total yang dilaporkan oleh groupCount.

Example

Contoh berikut menggambarkan cara menemukan string digit dari string alfanumerik yang diberikan -

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   public static void main( String args[] ) {
      // String to be scanned to find the pattern.
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(.*)(\\d+)(.*)";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
      }else {
         System.out.println("NO MATCH");
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT300
Found value: 0

Sintaks Ekspresi Reguler

Berikut adalah tabel yang mencantumkan semua ekspresi reguler metakarakter sintaks yang tersedia di Java -

Subekspresi Cocok
^ Cocok dengan awal baris.
$ Cocok dengan akhir baris.
. Cocok dengan satu karakter apa pun kecuali baris baru. Menggunakanm opsi memungkinkannya untuk mencocokkan baris baru juga.
[...] Mencocokkan salah satu karakter dalam tanda kurung.
[^ ...] Cocok dengan satu karakter apa pun yang tidak ada dalam tanda kurung.
\SEBUAH Awal dari seluruh string.
\ z Akhir dari seluruh string.
\ Z Akhir dari seluruh string kecuali terminator baris terakhir yang diijinkan.
kembali* Cocok dengan 0 atau lebih kemunculan ekspresi sebelumnya.
re + Cocok dengan 1 atau lebih dari hal sebelumnya.
kembali? Cocok dengan 0 atau 1 kemunculan ekspresi sebelumnya.
kembali {n} Cocok persis dengan n jumlah kemunculan ekspresi sebelumnya.
kembali {n,} Cocok dengan n atau lebih kemunculan ekspresi sebelumnya.
kembali {n, m} Cocok setidaknya n dan paling banyak m kemunculan ekspresi sebelumnya.
a | b Cocok dengan a atau b.
(kembali) Kelompokkan ekspresi reguler dan ingat teks yang cocok.
(?: re) Kelompokkan ekspresi reguler tanpa mengingat teks yang cocok.
(?> kembali) Mencocokkan pola independen tanpa mundur.
\ w Cocok dengan karakter kata.
\ W Cocok dengan karakter bukan kata.
\ s Cocok dengan spasi. Setara dengan [\ t \ n \ r \ f].
\ S Cocok dengan nonwhitespace.
\ d Cocok dengan angka. Setara dengan [0-9].
\ D Cocok dengan nondigits.
\SEBUAH Cocok dengan awal string.
\ Z Cocok dengan ujung string. Jika ada baris baru, itu cocok sebelum baris baru.
\ z Cocok dengan ujung string.
\ G Cocok dengan poin di mana pertandingan terakhir selesai.
\ n Referensi balik untuk menangkap nomor kelompok "n".
\ b Cocok dengan batas kata saat berada di luar tanda kurung. Cocok dengan spasi mundur (0x08) saat berada di dalam tanda kurung.
\ B Cocok dengan batasan bukan kata.
\ n, \ t, dll. Cocok dengan baris baru, carriage return, tab, dll.
\ Q Escape (kutipan) semua karakter hingga \ E.
\ E Mengakhiri kutipan dimulai dengan \ Q.

Metode Kelas Pencocokan

Berikut adalah daftar metode contoh yang berguna -

Metode Indeks

Metode indeks memberikan nilai indeks berguna yang menunjukkan dengan tepat di mana kecocokan ditemukan dalam string input -

Sr.No. Metode & Deskripsi
1

public int start()

Mengembalikan indeks awal dari pertandingan sebelumnya.

2

public int start(int group)

Mengembalikan indeks awal dari urutan yang diambil oleh grup tertentu selama operasi pertandingan sebelumnya.

3

public int end()

Mengembalikan offset setelah karakter terakhir cocok.

4

public int end(int group)

Mengembalikan offset setelah karakter terakhir dari urutan yang diambil oleh grup tertentu selama operasi pencocokan sebelumnya.

Metode Studi

Metode studi meninjau string input dan mengembalikan Boolean yang menunjukkan apakah pola tersebut ditemukan atau tidak -

Sr.No. Metode & Deskripsi
1

public boolean lookingAt()

Mencoba mencocokkan urutan masukan, mulai dari awal wilayah, dengan pola.

2

public boolean find()

Mencoba menemukan urutan berikutnya dari urutan masukan yang cocok dengan pola.

3

public boolean find(int start)

Menyetel ulang pencocok ini dan kemudian mencoba menemukan urutan berikutnya dari urutan masukan yang cocok dengan pola, dimulai dari indeks yang ditentukan.

4

public boolean matches()

Mencoba mencocokkan seluruh kawasan dengan pola.

Metode Penggantian

Metode penggantian adalah metode yang berguna untuk mengganti teks dalam string input -

Sr.No. Metode & Deskripsi
1

public Matcher appendReplacement(StringBuffer sb, String replacement)

Menerapkan langkah tambahkan-dan-ganti non-terminal.

2

public StringBuffer appendTail(StringBuffer sb)

Menerapkan langkah tambahkan-dan-ganti terminal.

3

public String replaceAll(String replacement)

Mengganti setiap urutan input yang cocok dengan pola dengan string pengganti yang diberikan.

4

public String replaceFirst(String replacement)

Mengganti urutan pertama dari urutan masukan yang cocok dengan pola dengan string pengganti yang diberikan.

5

public static String quoteReplacement(String s)

Mengembalikan String pengganti literal untuk String yang ditentukan. Metode ini menghasilkan String yang akan berfungsi sebagai pengganti literals dalam metode appendReplacement dari kelas Matcher.

Metode awal dan akhir

Berikut adalah contoh yang menghitung berapa kali kata "cat" muncul dalam string input -

Example

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static final String REGEX = "\\bcat\\b";
   private static final String INPUT = "cat cat cat cattie cat";

   public static void main( String args[] ) {
      Pattern p = Pattern.compile(REGEX);
      Matcher m = p.matcher(INPUT);   // get a matcher object
      int count = 0;

      while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22

Anda dapat melihat bahwa contoh ini menggunakan batas kata untuk memastikan bahwa huruf "c" "a" "t" bukan hanya substring dalam kata yang lebih panjang. Ini juga memberikan beberapa informasi berguna tentang di mana dalam string masukan kecocokan telah terjadi.

Metode start mengembalikan indeks awal dari urutan yang diambil oleh grup tertentu selama operasi pencocokan sebelumnya, dan metode akhir mengembalikan indeks dari karakter terakhir yang cocok, ditambah satu.

Metode pertandingan dan lookAt

Matching dan metode lookingAt berusaha untuk mencocokkan urutan masukan dengan pola. Perbedaannya, bagaimanapun, adalah bahwa kecocokan membutuhkan seluruh urutan masukan untuk dicocokkan, sementara lookAt tidak.

Kedua metode selalu dimulai di awal string masukan. Berikut adalah contoh yang menjelaskan fungsionalitas -

Example

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static final String REGEX = "foo";
   private static final String INPUT = "fooooooooooooooooo";
   private static Pattern pattern;
   private static Matcher matcher;

   public static void main( String args[] ) {
      pattern = Pattern.compile(REGEX);
      matcher = pattern.matcher(INPUT);

      System.out.println("Current REGEX is: "+REGEX);
      System.out.println("Current INPUT is: "+INPUT);

      System.out.println("lookingAt(): "+matcher.lookingAt());
      System.out.println("matches(): "+matcher.matches());
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false

Metode replaceFirst dan replaceAll

Metode replaceFirst dan replaceAll menggantikan teks yang cocok dengan ekspresi reguler yang diberikan. Seperti yang ditunjukkan oleh namanya, replaceFirst menggantikan kemunculan pertama, dan replaceAll menggantikan semua kemunculan.

Berikut adalah contoh yang menjelaskan fungsionalitas -

Example

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static String REGEX = "dog";
   private static String INPUT = "The dog says meow. " + "All dogs say meow.";
   private static String REPLACE = "cat";

   public static void main(String[] args) {
      Pattern p = Pattern.compile(REGEX);
      
      // get a matcher object
      Matcher m = p.matcher(INPUT); 
      INPUT = m.replaceAll(REPLACE);
      System.out.println(INPUT);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

The cat says meow. All cats say meow.

Metode appendReplacement dan appendTail

Kelas Matcher juga menyediakan metode appendReplacement dan appendTail untuk penggantian teks.

Berikut adalah contoh yang menjelaskan fungsionalitas -

Example

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static String REGEX = "a*b";
   private static String INPUT = "aabfooaabfooabfoob";
   private static String REPLACE = "-";
   public static void main(String[] args) {

      Pattern p = Pattern.compile(REGEX);
      
      // get a matcher object
      Matcher m = p.matcher(INPUT);
      StringBuffer sb = new StringBuffer();
      while(m.find()) {
         m.appendReplacement(sb, REPLACE);
      }
      m.appendTail(sb);
      System.out.println(sb.toString());
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

-foo-foo-foo-

Metode Kelas PatternSyntaxException

PatternSyntaxException adalah pengecualian yang tidak dicentang yang menunjukkan kesalahan sintaks dalam pola ekspresi reguler. Kelas PatternSyntaxException menyediakan metode berikut untuk membantu Anda menentukan apa yang salah -

Sr.No. Metode & Deskripsi
1

public String getDescription()

Mengambil deskripsi kesalahan.

2

public int getIndex()

Mengambil indeks kesalahan.

3

public String getPattern()

Mengambil pola ekspresi reguler yang salah.

4

public String getMessage()

Mengembalikan string multi-baris yang berisi deskripsi kesalahan sintaks dan indeksnya, pola ekspresi reguler yang salah, dan indikasi visual indeks kesalahan dalam pola.

Metode Java adalah kumpulan pernyataan yang dikelompokkan bersama untuk melakukan operasi. Saat Anda memanggil System.out.println() metode, misalnya, sistem benar-benar menjalankan beberapa pernyataan untuk menampilkan pesan di konsol.

Sekarang Anda akan belajar cara membuat metode Anda sendiri dengan atau tanpa nilai kembalian, memanggil metode dengan atau tanpa parameter, dan menerapkan abstraksi metode dalam desain program.

Membuat Metode

Mempertimbangkan contoh berikut untuk menjelaskan sintaks suatu metode -

Syntax

public static int methodName(int a, int b) {
   // body
}

Sini,

  • public static - pengubah

  • int - tipe pengembalian

  • methodName - nama metode

  • a, b - parameter formal

  • int a, int b - daftar parameter

Definisi metode terdiri dari header metode dan isi metode. Hal yang sama ditunjukkan pada sintaks berikut -

Syntax

modifier returnType nameOfMethod (Parameter List) {
   // method body
}

Sintaks yang ditunjukkan di atas meliputi -

  • modifier - Ini mendefinisikan jenis akses metode dan itu opsional untuk digunakan.

  • returnType - Metode dapat mengembalikan nilai.

  • nameOfMethod- Ini adalah nama metode. Tanda tangan metode terdiri dari nama metode dan daftar parameter.

  • Parameter List- Daftar parameter, yaitu jenis, urutan, dan jumlah parameter dari suatu metode. Ini opsional, metode mungkin berisi parameter nol.

  • method body - Tubuh metode mendefinisikan apa yang dilakukan metode dengan pernyataan.

Example

Berikut adalah kode sumber dari metode yang didefinisikan di atas yang disebut min(). Metode ini mengambil dua parameter num1 dan num2 dan mengembalikan maksimum antara keduanya -

/** the snippet returns the minimum between two numbers */

public static int minFunction(int n1, int n2) {
   int min;
   if (n1 > n2)
      min = n2;
   else
      min = n1;

   return min; 
}

Metode Memanggil

Untuk menggunakan metode, itu harus dipanggil. Ada dua cara di mana sebuah metode dipanggil yaitu, metode mengembalikan nilai atau tidak mengembalikan apa-apa (tidak ada nilai pengembalian).

Proses pemanggilan metode sederhana. Ketika sebuah program memanggil metode, kontrol program akan ditransfer ke metode yang dipanggil. Metode yang dipanggil ini kemudian mengembalikan kontrol ke pemanggil dalam dua kondisi, ketika -

  • pernyataan return dieksekusi.
  • itu mencapai metode yang mengakhiri kurung kurawal tutup.

Metode mengembalikan kekosongan dianggap sebagai panggilan ke pernyataan. Mari pertimbangkan contoh -

System.out.println("This is tutorialspoint.com!");

Nilai pengembalian metode dapat dipahami dengan contoh berikut -

int result = sum(6, 9);

Berikut adalah contoh untuk mendemonstrasikan bagaimana mendefinisikan sebuah metode dan bagaimana memanggilnya -

Example

public class ExampleMinNumber {
   
   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      int c = minFunction(a, b);
      System.out.println("Minimum Value = " + c);
   }

   /** returns the minimum of two numbers */
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Minimum value = 6

Kata Kunci void

Kata kunci void memungkinkan kita membuat metode yang tidak mengembalikan nilai. Di sini, dalam contoh berikut kami mempertimbangkan metode metode void methodRankPoints . Metode ini adalah metode kosong, yang tidak mengembalikan nilai apa pun. Panggilan ke metode void harus berupa pernyataan yaitu methodRankPoints (255.7); . Ini adalah pernyataan Java yang diakhiri dengan titik koma seperti yang ditunjukkan pada contoh berikut.

Example

public class ExampleVoid {

   public static void main(String[] args) {
      methodRankPoints(255.7);
   }

   public static void methodRankPoints(double points) {
      if (points >= 202.5) {
         System.out.println("Rank:A1");
      }else if (points >= 122.4) {
         System.out.println("Rank:A2");
      }else {
         System.out.println("Rank:A3");
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Rank:A1

Meneruskan Parameter berdasarkan Nilai

Saat bekerja di bawah proses panggilan, argumen harus diteruskan. Ini harus dalam urutan yang sama dengan parameternya masing-masing dalam spesifikasi metode. Parameter dapat diteruskan dengan nilai atau referensi.

Meneruskan Parameter dengan Nilai berarti memanggil metode dengan parameter. Melalui ini, nilai argumen diteruskan ke parameter.

Example

Program berikut menunjukkan contoh melewatkan parameter dengan nilai. Nilai argumen tetap sama bahkan setelah pemanggilan metode.

public class swappingExample {

   public static void main(String[] args) {
      int a = 30;
      int b = 45;
      System.out.println("Before swapping, a = " + a + " and b = " + b);

      // Invoke the swap method
      swapFunction(a, b);
      System.out.println("\n**Now, Before and After swapping values will be same here**:");
      System.out.println("After swapping, a = " + a + " and b is " + b);
   }

   public static void swapFunction(int a, int b) {
      System.out.println("Before swapping(Inside), a = " + a + " b = " + b);
      
      // Swap n1 with n2
      int c = a;
      a = b;
      b = c;
      System.out.println("After swapping(Inside), a = " + a + " b = " + b);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Before swapping, a = 30 and b = 45
Before swapping(Inside), a = 30 b = 45
After swapping(Inside), a = 45 b = 30

**Now, Before and After swapping values will be same here**:
After swapping, a = 30 and b is 45

Metode Overloading

Ketika sebuah kelas memiliki dua atau lebih metode dengan nama yang sama tetapi parameter yang berbeda, itu dikenal sebagai metode overloading. Ini berbeda dengan menimpa. Dalam menimpa, suatu metode memiliki nama metode, jenis, jumlah parameter yang sama, dll.

Mari pertimbangkan contoh yang dibahas sebelumnya untuk menemukan bilangan minimum tipe integer. Jika, katakanlah kita ingin mencari jumlah minimum tipe ganda. Kemudian konsep overloading akan diperkenalkan dengan membuat dua atau lebih metode dengan nama yang sama tetapi parameter yang berbeda.

Contoh berikut menjelaskan hal yang sama -

Example

public class ExampleOverloading {

   public static void main(String[] args) {
      int a = 11;
      int b = 6;
      double c = 7.3;
      double d = 9.4;
      int result1 = minFunction(a, b);
      
      // same function name with different parameters
      double result2 = minFunction(c, d);
      System.out.println("Minimum Value = " + result1);
      System.out.println("Minimum Value = " + result2);
   }

   // for integer
   public static int minFunction(int n1, int n2) {
      int min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
   
   // for double
   public static double minFunction(double n1, double n2) {
     double min;
      if (n1 > n2)
         min = n2;
      else
         min = n1;

      return min; 
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

Minimum Value = 6
Minimum Value = 7.3

Metode overloading membuat program dapat dibaca. Di sini, dua metode diberikan dengan nama yang sama tetapi dengan parameter yang berbeda. Hasilnya adalah angka minimum dari tipe integer dan double.

Menggunakan Argumen Baris Perintah

Terkadang Anda ingin meneruskan beberapa informasi ke dalam program saat Anda menjalankannya. Ini dilakukan dengan meneruskan argumen baris perintah ke main ().

Argumen baris perintah adalah informasi yang langsung mengikuti nama program pada baris perintah ketika dijalankan. Untuk mengakses argumen baris perintah di dalam program Java cukup mudah. Mereka disimpan sebagai string dalam array String yang diteruskan ke main ().

Example

Program berikut menampilkan semua argumen baris perintah yang dipanggil dengan -

public class CommandLine {

   public static void main(String args[]) { 
      for(int i = 0; i<args.length; i++) {
         System.out.println("args[" + i + "]: " +  args[i]);
      }
   }
}

Coba jalankan program ini seperti yang ditunjukkan di sini -

$java CommandLine this is a command line 200 -100

Ini akan menghasilkan hasil sebagai berikut -

Output

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

Kata kunci ini

thisadalah kata kunci di Java yang digunakan sebagai referensi ke objek kelas saat ini, dengan metode instance atau konstruktor. Dengan menggunakan ini, Anda dapat merujuk anggota kelas seperti konstruktor, variabel, dan metode.

Note- Kata kunci ini hanya digunakan dalam metode atau konstruktor contoh

Secara umum, kata kunci this digunakan untuk -

  • Bedakan variabel instan dari variabel lokal jika memiliki nama yang sama, dalam konstruktor atau metode.

class Student {
   int age;   
   Student(int age) {
      this.age = age;	
   }
}
  • Panggil satu jenis konstruktor (Konstruktor berparameterisasi atau default) dari yang lain dalam sebuah kelas. Ini dikenal sebagai pemanggilan konstruktor eksplisit.

class Student {
   int age
   Student() {
      this(20);
   }
   
   Student(int age) {
      this.age = age;	
   }
}

Example

Berikut adalah contoh yang menggunakan kata kunci ini untuk mengakses anggota kelas. Salin dan tempel program berikut dalam file dengan nama,This_Example.java.

public class This_Example {
   // Instance variable num
   int num = 10;
	
   This_Example() {
      System.out.println("This is an example program on keyword this");	
   }

   This_Example(int num) {
      // Invoking the default constructor
      this();
      
      // Assigning the local variable num to the instance variable num
      this.num = num;	   
   }
   
   public void greet() {
      System.out.println("Hi Welcome to Tutorialspoint");
   }
      
   public void print() {
      // Local variable num
      int num = 20;
      
      // Printing the local variable
      System.out.println("value of local variable num is : "+num);
      
      // Printing the instance variable
      System.out.println("value of instance variable num is : "+this.num);
      
      // Invoking the greet method of a class
      this.greet();     
   }
   
   public static void main(String[] args) {
      // Instantiating the class
      This_Example obj1 = new This_Example();
      
      // Invoking the print method
      obj1.print();
	  
      // Passing a new value to the num variable through Parameterized constructor
      This_Example obj2 = new This_Example(30);
      
      // Invoking the print method again
      obj2.print(); 
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 10
Hi Welcome to Tutorialspoint
This is an example program on keyword this 
value of local variable num is : 20
value of instance variable num is : 30
Hi Welcome to Tutorialspoint

Argumen Variabel (var-args)

JDK 1.5 memungkinkan Anda meneruskan sejumlah variabel argumen dengan tipe yang sama ke metode. Parameter dalam metode ini dideklarasikan sebagai berikut -

typeName... parameterName

Dalam deklarasi metode, Anda menentukan tipe yang diikuti dengan elipsis (...). Hanya satu parameter panjang variabel yang dapat ditentukan dalam sebuah metode, dan parameter ini harus menjadi parameter terakhir. Parameter reguler apa pun harus mendahuluinya.

Example

public class VarargsDemo {

   public static void main(String args[]) {
      // Call method with variable args  
	   printMax(34, 3, 3, 2, 56.5);
      printMax(new double[]{1, 2, 3});
   }

   public static void printMax( double... numbers) {
      if (numbers.length == 0) {
         System.out.println("No argument passed");
         return;
      }

      double result = numbers[0];

      for (int i = 1; i <  numbers.length; i++)
      if (numbers[i] >  result)
      result = numbers[i];
      System.out.println("The max value is " + result);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

The max value is 56.5
The max value is 3.0

Metode finalize ()

Dimungkinkan untuk menentukan metode yang akan dipanggil tepat sebelum pemusnahan akhir objek oleh pengumpul sampah. Metode ini disebutfinalize( ), dan dapat digunakan untuk memastikan bahwa suatu objek berakhir dengan bersih.

Misalnya, Anda mungkin menggunakan finalize () untuk memastikan bahwa file terbuka yang dimiliki oleh objek tersebut ditutup.

Untuk menambahkan finalizer ke kelas, Anda cukup mendefinisikan metode finalize (). Waktu proses Java memanggil metode itu setiap kali akan mendaur ulang objek kelas itu.

Di dalam metode finalize (), Anda akan menentukan tindakan yang harus dilakukan sebelum objek dimusnahkan.

Metode finalize () memiliki bentuk umum ini -

protected void finalize( ) {
   // finalization code here
}

Di sini, kata kunci yang dilindungi adalah penentu yang mencegah akses ke finalize () dengan kode yang ditentukan di luar kelasnya.

Ini berarti Anda tidak dapat mengetahui kapan atau bahkan jika finalize () akan dijalankan. Misalnya, jika program Anda berakhir sebelum pengumpulan sampah terjadi, finalize () tidak akan dijalankan.

Paket java.io berisi hampir setiap kelas yang mungkin Anda perlukan untuk melakukan input dan output (I / O) di Java. Semua aliran ini mewakili sumber masukan dan tujuan keluaran. Aliran dalam paket java.io mendukung banyak data seperti primitif, objek, karakter lokal, dll.

Aliran

Aliran dapat didefinisikan sebagai urutan data. Ada dua jenis Arus -

  • InPutStream - InputStream digunakan untuk membaca data dari sumber.

  • OutPutStream - OutputStream digunakan untuk menulis data ke tujuan.

Java menyediakan dukungan yang kuat namun fleksibel untuk I / O yang terkait dengan file dan jaringan, tetapi tutorial ini mencakup fungsionalitas yang sangat mendasar yang terkait dengan aliran dan I / O. Kita akan melihat contoh yang paling umum digunakan satu per satu -

Aliran Byte

Aliran byte Java digunakan untuk melakukan input dan output byte 8-bit. Meskipun ada banyak kelas yang terkait dengan aliran byte tetapi kelas yang paling sering digunakan adalah,FileInputStream dan FileOutputStream. Berikut adalah contoh yang menggunakan kedua kelas ini untuk menyalin file input ke file output -

Example

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {  
      FileInputStream in = null;
      FileOutputStream out = null;

      try {
         in = new FileInputStream("input.txt");
         out = new FileOutputStream("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Sekarang mari kita punya file input.txt dengan konten berikut -

This is test for copy file.

Sebagai langkah selanjutnya, kompilasi program di atas dan jalankan, yang akan menghasilkan file output.txt dengan konten yang sama seperti yang kita miliki di input.txt. Jadi mari kita letakkan kode di atas dalam file CopyFile.java dan lakukan hal berikut -

$javac CopyFile.java $java CopyFile

Aliran Karakter

Jawa Byte stream digunakan untuk melakukan input dan output sebesar 8-bit byte, sedangkan Java Characterstream digunakan untuk melakukan input dan output untuk unicode 16-bit. Meskipun ada banyak kelas yang terkait dengan aliran karakter tetapi kelas yang paling sering digunakan adalah,FileReader dan FileWriter. Meskipun secara internal FileReader menggunakan FileInputStream dan FileWriter menggunakan FileOutputStream tetapi di sini perbedaan utamanya adalah FileReader membaca dua byte sekaligus dan FileWriter menulis dua byte sekaligus.

Kita dapat menulis ulang contoh di atas, yang menggunakan kedua kelas ini untuk menyalin file input (memiliki karakter unicode) ke dalam file output -

Example

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {
      FileReader in = null;
      FileWriter out = null;

      try {
         in = new FileReader("input.txt");
         out = new FileWriter("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Sekarang mari kita punya file input.txt dengan konten berikut -

This is test for copy file.

Sebagai langkah selanjutnya, kompilasi program di atas dan jalankan, yang akan menghasilkan file output.txt dengan konten yang sama seperti yang kita miliki di input.txt. Jadi mari kita letakkan kode di atas dalam file CopyFile.java dan lakukan hal berikut -

$javac CopyFile.java $java CopyFile

Streaming Standar

Semua bahasa pemrograman menyediakan dukungan untuk I / O standar di mana program pengguna dapat mengambil input dari keyboard dan kemudian menghasilkan output di layar komputer. Jika Anda mengetahui bahasa pemrograman C atau C ++, maka Anda harus mengetahui tiga perangkat standar STDIN, STDOUT dan STDERR. Demikian pula, Java menyediakan tiga aliran standar berikut -

  • Standard Input - Ini digunakan untuk memasukkan data ke program pengguna dan biasanya keyboard digunakan sebagai aliran input standar dan direpresentasikan sebagai System.in.

  • Standard Output - Ini digunakan untuk mengeluarkan data yang dihasilkan oleh program pengguna dan biasanya layar komputer digunakan untuk aliran keluaran standar dan direpresentasikan sebagai System.out.

  • Standard Error - Ini digunakan untuk mengeluarkan data kesalahan yang dihasilkan oleh program pengguna dan biasanya layar komputer digunakan untuk aliran kesalahan standar dan direpresentasikan sebagai System.err.

Berikut ini adalah program sederhana, yang membuat InputStreamReader untuk membaca aliran masukan standar sampai pengguna mengetik "q" -

Example

import java.io.*;
public class ReadConsole {

   public static void main(String args[]) throws IOException {
      InputStreamReader cin = null;

      try {
         cin = new InputStreamReader(System.in);
         System.out.println("Enter characters, 'q' to quit.");
         char c;
         do {
            c = (char) cin.read();
            System.out.print(c);
         } while(c != 'q');
      }finally {
         if (cin != null) {
            cin.close();
         }
      }
   }
}

Mari kita simpan kode di atas dalam file ReadConsole.java dan coba kompilasi dan jalankan seperti yang ditunjukkan pada program berikut. Program ini terus membaca dan mengeluarkan karakter yang sama sampai kita menekan 'q' -

$javac ReadConsole.java $java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

Membaca dan Menulis File

Seperti yang dijelaskan sebelumnya, aliran dapat didefinisikan sebagai urutan data. ItuInputStream digunakan untuk membaca data dari sumber dan OutputStream digunakan untuk menulis data ke suatu tujuan.

Berikut adalah hierarki kelas untuk menangani aliran Input dan Output.

Dua aliran penting tersebut adalah FileInputStream dan FileOutputStream, yang akan dibahas dalam tutorial ini.

FileInputStream

Aliran ini digunakan untuk membaca data dari file. Objek dapat dibuat dengan menggunakan kata kuncinew dan ada beberapa jenis konstruktor yang tersedia.

Mengikuti konstruktor mengambil nama file sebagai string untuk membuat objek aliran input untuk membaca file -

InputStream f = new FileInputStream("C:/java/hello");

Konstruktor berikut mengambil objek file untuk membuat objek aliran input untuk membaca file. Pertama kita membuat objek file menggunakan metode File () sebagai berikut -

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

Setelah Anda memiliki objek InputStream , maka ada daftar metode pembantu yang dapat digunakan untuk membaca streaming atau melakukan operasi lain di aliran.

Sr.No. Metode & Deskripsi
1

public void close() throws IOException{}

Metode ini menutup aliran keluaran file. Merilis sumber daya sistem apa pun yang terkait dengan file tersebut. Melempar IOException.

2

protected void finalize()throws IOException {}

Metode ini membersihkan koneksi ke file. Memastikan bahwa metode tutup aliran keluaran file ini dipanggil saat tidak ada lagi referensi ke aliran ini. Melempar IOException.

3

public int read(int r)throws IOException{}

Metode ini membaca byte data tertentu dari InputStream. Mengembalikan int. Mengembalikan byte data berikutnya dan -1 akan dikembalikan jika itu akhir file.

4

public int read(byte[] r) throws IOException{}

Metode ini membaca r.length byte dari aliran input ke dalam array. Mengembalikan jumlah total byte yang dibaca. Jika ini adalah akhir file, -1 akan dikembalikan.

5

public int available() throws IOException{}

Memberikan jumlah byte yang dapat dibaca dari aliran input file ini. Mengembalikan int.

Ada aliran input penting lainnya yang tersedia, untuk detail lebih lanjut Anda dapat merujuk ke tautan berikut -

  • ByteArrayInputStream

  • DataInputStream

FileOutputStream

FileOutputStream digunakan untuk membuat file dan menulis data ke dalamnya. Aliran akan membuat file, jika belum ada, sebelum membukanya untuk keluaran.

Berikut adalah dua konstruktor yang dapat digunakan untuk membuat objek FileOutputStream.

Konstruktor berikut mengambil nama file sebagai string untuk membuat objek aliran input untuk menulis file -

OutputStream f = new FileOutputStream("C:/java/hello")

Konstruktor berikut mengambil objek file untuk membuat objek aliran output untuk menulis file. Pertama, kita membuat objek file menggunakan metode File () sebagai berikut -

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

Setelah Anda memiliki objek OutputStream , maka ada daftar metode pembantu, yang dapat digunakan untuk menulis ke streaming atau melakukan operasi lain di aliran.

Sr.No. Metode & Deskripsi
1

public void close() throws IOException{}

Metode ini menutup aliran keluaran file. Merilis sumber daya sistem apa pun yang terkait dengan file tersebut. Melempar IOException.

2

protected void finalize()throws IOException {}

Metode ini membersihkan koneksi ke file. Memastikan bahwa metode tutup aliran keluaran file ini dipanggil saat tidak ada lagi referensi ke aliran ini. Melempar IOException.

3

public void write(int w)throws IOException{}

Metode ini menulis byte yang ditentukan ke aliran keluaran.

4

public void write(byte[] w)

Menulis w.length byte dari array byte yang disebutkan ke OutputStream.

Ada aliran keluaran penting lainnya yang tersedia, untuk lebih jelasnya Anda dapat merujuk ke tautan berikut -

  • ByteArrayOutputStream

  • DataOutputStream

Example

Berikut adalah contoh untuk mendemonstrasikan InputStream dan OutputStream -

import java.io.*;
public class fileStreamTest {

   public static void main(String args[]) {
   
      try {
         byte bWrite [] = {11,21,3,40,5};
         OutputStream os = new FileOutputStream("test.txt");
         for(int x = 0; x < bWrite.length ; x++) {
            os.write( bWrite[x] );   // writes the bytes
         }
         os.close();
     
         InputStream is = new FileInputStream("test.txt");
         int size = is.available();

         for(int i = 0; i < size; i++) {
            System.out.print((char)is.read() + "  ");
         }
         is.close();
      } catch (IOException e) {
         System.out.print("Exception");
      }	
   }
}

Kode di atas akan membuat file test.txt dan akan menulis angka yang diberikan dalam format biner. Sama dengan output pada layar stdout.

Navigasi File dan I / O

Ada beberapa kelas lain yang akan kita lalui untuk mengetahui dasar-dasar Navigasi File dan I / O.

  • Kelas File

  • Kelas FileReader

  • Kelas FileWriter

Direktori di Java

Direktori adalah File yang dapat berisi daftar file dan direktori lain. Kau gunakanFileobjek untuk membuat direktori, untuk membuat daftar file yang tersedia dalam direktori. Untuk detail lengkapnya, periksa daftar semua metode yang dapat Anda panggil pada objek File dan apa yang terkait dengan direktori.

Membuat Direktori

Ada dua hal yang berguna File metode utilitas, yang dapat digunakan untuk membuat direktori -

  • Itu mkdir( )metode membuat direktori, mengembalikan nilai true pada kesuksesan dan false pada kegagalan. Kegagalan menunjukkan bahwa jalur yang ditentukan dalam objek File sudah ada, atau direktori tidak dapat dibuat karena seluruh jalur belum ada.

  • Itu mkdirs() metode membuat direktori dan semua induk direktori.

Contoh berikut membuat direktori "/ tmp / user / java / bin" -

Example

import java.io.File;
public class CreateDir {

   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      
      // Create directory now.
      d.mkdirs();
   }
}

Kompilasi dan jalankan kode di atas untuk membuat "/ tmp / user / java / bin".

Note- Java secara otomatis menangani pemisah jalur pada UNIX dan Windows sesuai konvensi. Jika Anda menggunakan garis miring (/) pada Java versi Windows, jalur akan tetap terselesaikan dengan benar.

Direktori Pencatatan

Kamu dapat memakai list( ) metode yang disediakan oleh File objek untuk mencantumkan semua file dan direktori yang tersedia dalam direktori sebagai berikut -

Example

import java.io.File;
public class ReadDir {

   public static void main(String[] args) {
      File file = null;
      String[] paths;
  
      try {      
         // create new file object
         file = new File("/tmp");

         // array of files and directory
         paths = file.list();

         // for each name in the path array
         for(String path:paths) {
            // prints filename and directory name
            System.out.println(path);
         }
      } catch (Exception e) {
         // if any error occurs
         e.printStackTrace();
      }
   }
}

Ini akan menghasilkan hasil berikut berdasarkan direktori dan file yang tersedia di file /tmp direktori -

Output

test1.txt
test2.txt
ReadDir.java
ReadDir.class

Pengecualian (atau kejadian luar biasa) adalah masalah yang muncul selama pelaksanaan program. Ketika sebuahException terjadi aliran normal program terganggu dan program / Aplikasi berhenti secara tidak normal, yang tidak disarankan, oleh karena itu, pengecualian ini harus ditangani.

Pengecualian dapat terjadi karena berbagai alasan. Berikut adalah beberapa skenario di mana pengecualian terjadi.

  • Seorang pengguna memasukkan data yang tidak valid.

  • File yang perlu dibuka tidak dapat ditemukan.

  • Koneksi jaringan hilang di tengah komunikasi atau JVM kehabisan memori.

Beberapa dari pengecualian ini disebabkan oleh kesalahan pengguna, yang lain oleh kesalahan programmer, dan lainnya oleh sumber daya fisik yang gagal dalam beberapa cara.

Berdasarkan ini, kami memiliki tiga kategori Pengecualian. Anda perlu memahaminya untuk mengetahui cara kerja penanganan pengecualian di Java.

  • Checked exceptions- Pengecualian yang dicentang adalah pengecualian yang diperiksa (diberitahukan) oleh kompilator pada waktu kompilasi, ini juga disebut sebagai pengecualian waktu kompilasi. Pengecualian ini tidak bisa begitu saja diabaikan, programmer harus menangani (menangani) pengecualian ini.

Misalnya, jika Anda menggunakan FileReaderkelas dalam program Anda untuk membaca data dari file, jika file yang ditentukan dalam konstruktornya tidak ada, maka FileNotFoundException akan terjadi, dan kompilator meminta programmer untuk menangani pengecualian.

Contoh

import java.io.File;
import java.io.FileReader;

public class FilenotFound_Demo {

   public static void main(String args[]) {		
      File file = new File("E://file.txt");
      FileReader fr = new FileReader(file); 
   }
}

Jika Anda mencoba mengompilasi program di atas, Anda akan mendapatkan pengecualian berikut.

Keluaran

C:\>javac FilenotFound_Demo.java
FilenotFound_Demo.java:8: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
      FileReader fr = new FileReader(file);
                      ^
1 error

Note - Sejak metodenya read() dan close() kelas FileReader menampilkan IOException, Anda dapat mengamati bahwa compiler memberi tahu untuk menangani IOException, bersama dengan FileNotFoundException.

  • Unchecked exceptions- Pengecualian yang tidak dicentang adalah pengecualian yang terjadi pada saat eksekusi. Ini juga disebut sebagaiRuntime Exceptions. Ini termasuk bug pemrograman, seperti kesalahan logika atau penggunaan API yang tidak tepat. Pengecualian waktu proses diabaikan pada saat kompilasi.

Misalnya, jika Anda telah mendeklarasikan larik berukuran 5 dalam program Anda, dan mencoba memanggil elemen keenam dari larik tersebut, maka ArrayIndexOutOfBoundsExceptionexception akan terjadi.

Contoh

public class Unchecked_Demo {
   
   public static void main(String args[]) {
      int num[] = {1, 2, 3, 4};
      System.out.println(num[5]);
   }
}

Jika Anda mengkompilasi dan menjalankan program di atas, Anda akan mendapatkan pengecualian berikut.

Keluaran

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
	at Exceptions.Unchecked_Demo.main(Unchecked_Demo.java:8)
  • Errors- Ini sama sekali bukan pengecualian, tetapi masalah yang muncul di luar kendali pengguna atau pemrogram. Kesalahan biasanya diabaikan dalam kode Anda karena Anda jarang dapat berbuat apa-apa. Misalnya, jika terjadi stack overflow, kesalahan akan muncul. Mereka juga diabaikan pada saat kompilasi.

Hirarki Pengecualian

Semua kelas pengecualian adalah subtipe dari kelas java.lang.Exception. Kelas pengecualian adalah subkelas dari kelas Throwable. Selain kelas eksepsi, ada subclass lain yang disebut Error yang diturunkan dari kelas Throwable.

Kesalahan adalah kondisi abnormal yang terjadi jika terjadi kegagalan parah, ini tidak ditangani oleh program Java. Kesalahan dibuat untuk menunjukkan kesalahan yang dihasilkan oleh lingkungan runtime. Contoh: JVM kehabisan memori. Biasanya, program tidak dapat memulihkan kesalahan.

Kelas Exception memiliki dua subclass utama: kelas IOException dan Kelas RuntimeException.

Berikut ini adalah daftar Pengecualian Built-in Java yang paling umum dicentang dan tidak dicentang .

Metode Pengecualian

Berikut adalah daftar metode penting yang tersedia di kelas Throwable.

Sr.No. Metode & Deskripsi
1

public String getMessage()

Mengembalikan pesan rinci tentang pengecualian yang telah terjadi. Pesan ini diinisialisasi di konstruktor Throwable.

2

public Throwable getCause()

Mengembalikan penyebab pengecualian seperti yang diwakili oleh objek yang dapat dilempar.

3

public String toString()

Mengembalikan nama kelas yang digabungkan dengan hasil getMessage ().

4

public void printStackTrace()

Mencetak hasil toString () bersama dengan pelacakan tumpukan ke System.err, aliran keluaran kesalahan.

5

public StackTraceElement [] getStackTrace()

Mengembalikan larik yang berisi setiap elemen di jejak tumpukan. Elemen di indeks 0 mewakili bagian atas tumpukan panggilan, dan elemen terakhir dalam larik mewakili metode di bagian bawah tumpukan panggilan.

6

public Throwable fillInStackTrace()

Mengisi pelacakan tumpukan dari objek Throwable ini dengan pelacakan tumpukan saat ini, menambahkan informasi sebelumnya dalam pelacakan tumpukan.

Pengecualian Penangkapan

Sebuah metode menangkap pengecualian menggunakan kombinasi dari try dan catchkata kunci. Sebuah blok coba / tangkap ditempatkan di sekitar kode yang mungkin menghasilkan pengecualian. Kode dalam blok coba / tangkap disebut sebagai kode yang dilindungi, dan sintaks untuk menggunakan coba / tangkap terlihat seperti berikut -

Sintaksis

try {
   // Protected code
} catch (ExceptionName e1) {
   // Catch block
}

Kode yang rentan terhadap pengecualian ditempatkan di blok percobaan. Ketika pengecualian terjadi, pengecualian itu ditangani oleh blok catch yang terkait dengannya. Setiap blok percobaan harus segera diikuti oleh blok penangkap atau blok terakhir.

Pernyataan catch melibatkan mendeklarasikan tipe pengecualian yang coba Anda tangkap. Jika pengecualian terjadi dalam kode yang dilindungi, blok penangkapan (atau blok) yang mengikuti percobaan diperiksa. Jika jenis pengecualian yang terjadi terdaftar di blok catch, pengecualian diteruskan ke blok catch seperti argumen yang dilewatkan ke parameter metode.

Contoh

Berikut ini adalah array yang dideklarasikan dengan 2 elemen. Kemudian kode mencoba untuk mengakses 3 rd elemen dari array yang melempar pengecualian.

// File Name : ExcepTest.java
import java.io.*;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block

Beberapa Catch Block

Sebuah blok percobaan dapat diikuti oleh beberapa blok tangkapan. Sintaks untuk beberapa blok tangkapan terlihat seperti berikut -

Sintaksis

try {
   // Protected code
} catch (ExceptionType1 e1) {
   // Catch block
} catch (ExceptionType2 e2) {
   // Catch block
} catch (ExceptionType3 e3) {
   // Catch block
}

Pernyataan sebelumnya mendemonstrasikan tiga blok tangkap, tetapi Anda dapat memiliki sejumlah dari mereka setelah sekali mencoba. Jika pengecualian terjadi dalam kode yang dilindungi, pengecualian tersebut dilemparkan ke blok tangkapan pertama dalam daftar. Jika tipe data dari pengecualian yang dilempar cocok dengan ExceptionType1, itu akan tertangkap di sana. Jika tidak, pengecualian diteruskan ke pernyataan catch kedua. Ini berlanjut hingga pengecualian tertangkap atau jatuh melalui semua tangkapan, dalam hal ini metode saat ini menghentikan eksekusi dan pengecualian dilemparkan ke metode sebelumnya pada tumpukan panggilan.

Contoh

Berikut adalah segmen kode yang menunjukkan bagaimana menggunakan beberapa pernyataan coba / tangkap.

try {
   file = new FileInputStream(fileName);
   x = (byte) file.read();
} catch (IOException i) {
   i.printStackTrace();
   return -1;
} catch (FileNotFoundException f) // Not valid! {
   f.printStackTrace();
   return -1;
}

Menangkap Beberapa Jenis Pengecualian

Sejak Java 7, Anda dapat menangani lebih dari satu pengecualian menggunakan satu blok tangkapan, fitur ini menyederhanakan kode. Inilah cara Anda melakukannya -

catch (IOException|FileNotFoundException ex) {
   logger.log(ex);
   throw ex;

Kata Kunci Lempar / Lempar

Jika sebuah metode tidak menangani pengecualian yang dicentang, metode tersebut harus mendeklarasikannya menggunakan throwskata kunci. Kata kunci throws muncul di akhir tanda tangan metode.

Anda bisa membuat pengecualian, baik yang baru dibuatkan atau pengecualian yang baru saja Anda tangkap, dengan menggunakan ekstensi throw kata kunci.

Cobalah untuk memahami perbedaan antara kata kunci lemparan dan lemparan, lemparan digunakan untuk menunda penanganan pengecualian yang dicentang dan lemparan digunakan untuk memanggil pengecualian secara eksplisit.

Metode berikut mendeklarasikan bahwa ia melontarkan RemoteException -

Contoh

import java.io.*;
public class className {

   public void deposit(double amount) throws RemoteException {
      // Method implementation
      throw new RemoteException();
   }
   // Remainder of class definition
}

Sebuah metode dapat mendeklarasikan bahwa ia melontarkan lebih dari satu pengecualian, dalam hal ini pengecualian dideklarasikan dalam daftar yang dipisahkan dengan koma. Misalnya, metode berikut mendeklarasikan bahwa ia melontarkan RemoteException dan InsufficientFundsException -

Contoh

import java.io.*;
public class className {

   public void withdraw(double amount) throws RemoteException, 
      InsufficientFundsException {
      // Method implementation
   }
   // Remainder of class definition
}

Blok Terakhir

Blok terakhir mengikuti blok percobaan atau blok tangkap. Blok kode terakhir selalu dijalankan, terlepas dari terjadinya Exception.

Menggunakan last block memungkinkan Anda menjalankan pernyataan tipe pembersihan apa pun yang ingin Anda jalankan, apa pun yang terjadi dalam kode yang dilindungi.

Sebuah blok terakhir muncul di akhir blok catch dan memiliki sintaks berikut -

Sintaksis

try {
   // Protected code
} catch (ExceptionType1 e1) {
   // Catch block
} catch (ExceptionType2 e2) {
   // Catch block
} catch (ExceptionType3 e3) {
   // Catch block
}finally {
   // The finally block always executes.
}

Contoh

public class ExcepTest {

   public static void main(String args[]) {
      int a[] = new int[2];
      try {
         System.out.println("Access element three :" + a[3]);
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("Exception thrown  :" + e);
      }finally {
         a[0] = 6;
         System.out.println("First element value: " + a[0]);
         System.out.println("The finally statement is executed");
      }
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

Perhatikan hal-hal berikut -

  • Klausa catch tidak bisa ada tanpa pernyataan try.

  • Tidak wajib memiliki klausa akhirnya setiap kali ada blok coba / tangkap.

  • Blok percobaan tidak dapat hadir tanpa klausa catch atau klausa akhir.

  • Kode apa pun tidak dapat hadir di antara blok coba, tangkap, akhirnya.

Mencoba-dengan-sumber daya

Secara umum, ketika kita menggunakan sumber daya seperti aliran, koneksi, dll. Kita harus menutupnya secara eksplisit menggunakan blok terakhir. Dalam program berikut, kami membaca data dari file menggunakanFileReader and we are closing it using finally block.

Example

import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class ReadData_Demo {

   public static void main(String args[]) {
      FileReader fr = null;		
      try {
         File file = new File("file.txt");
         fr = new FileReader(file); char [] a = new char[50];
         fr.read(a);   // reads the content to the array
         for(char c : a)
         System.out.print(c);   // prints the characters one by one
      } catch (IOException e) {
         e.printStackTrace();
      }finally {
         try {
            fr.close();
         } catch (IOException ex) {		
            ex.printStackTrace();
         }
      }
   }
}

try-with-resources, also referred as automatic resource management, is a new exception handling mechanism that was introduced in Java 7, which automatically closes the resources used within the try catch block.

To use this statement, you simply need to declare the required resources within the parenthesis, and the created resource will be closed automatically at the end of the block. Following is the syntax of try-with-resources statement.

Syntax

try(FileReader fr = new FileReader("file path")) {
   // use the resource
   } catch () {
      // body of catch 
   }
}

Following is the program that reads the data in a file using try-with-resources statement.

Example

import java.io.FileReader;
import java.io.IOException;

public class Try_withDemo {

   public static void main(String args[]) {
      try(FileReader fr = new FileReader("E://file.txt")) {
         char [] a = new char[50];
         fr.read(a);   // reads the contentto the array
         for(char c : a)
         System.out.print(c);   // prints the characters one by one
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Following points are to be kept in mind while working with try-with-resources statement.

  • To use a class with try-with-resources statement it should implement AutoCloseable interface and the close() method of it gets invoked automatically at runtime.

  • You can declare more than one class in try-with-resources statement.

  • While you declare multiple classes in the try block of try-with-resources statement these classes are closed in reverse order.

  • Except the declaration of resources within the parenthesis everything is the same as normal try/catch block of a try block.

  • The resource declared in try gets instantiated just before the start of the try-block.

  • The resource declared at the try block is implicitly declared as final.

User-defined Exceptions

You can create your own exceptions in Java. Keep the following points in mind when writing your own exception classes −

  • All exceptions must be a child of Throwable.

  • If you want to write a checked exception that is automatically enforced by the Handle or Declare Rule, you need to extend the Exception class.

  • If you want to write a runtime exception, you need to extend the RuntimeException class.

We can define our own Exception class as below −

class MyException extends Exception {
}

You just need to extend the predefined Exception class to create your own Exception. These are considered to be checked exceptions. The following InsufficientFundsException class is a user-defined exception that extends the Exception class, making it a checked exception. An exception class is like any other class, containing useful fields and methods.

Example

// File Name InsufficientFundsException.java
import java.io.*;

public class InsufficientFundsException extends Exception {
   private double amount;
   
   public InsufficientFundsException(double amount) {
      this.amount = amount;
   }
   
   public double getAmount() {
      return amount;
   }
}

To demonstrate using our user-defined exception, the following CheckingAccount class contains a withdraw() method that throws an InsufficientFundsException.

// File Name CheckingAccount.java
import java.io.*;

public class CheckingAccount {
   private double balance;
   private int number;
   
   public CheckingAccount(int number) {
      this.number = number;
   }
   
   public void deposit(double amount) {
      balance += amount;
   }
   
   public void withdraw(double amount) throws InsufficientFundsException {
      if(amount <= balance) {
         balance -= amount;
      }else {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   
   public double getBalance() {
      return balance;
   }
   
   public int getNumber() {
      return number;
   }
}

The following BankDemo program demonstrates invoking the deposit() and withdraw() methods of CheckingAccount.

// File Name BankDemo.java
public class BankDemo {

   public static void main(String [] args) {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500..."); c.deposit(500.00); try { System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600..."); c.withdraw(600.00); } catch (InsufficientFundsException e) { System.out.println("Sorry, but you are short $" + e.getAmount());
         e.printStackTrace();
      }
   }
}

Compile all the above three files and run BankDemo. This will produce the following result −

Output

Depositing $500... Withdrawing $100...

Withdrawing $600... Sorry, but you are short $200.0
InsufficientFundsException
         at CheckingAccount.withdraw(CheckingAccount.java:25)
         at BankDemo.main(BankDemo.java:13)

Common Exceptions

In Java, it is possible to define two catergories of Exceptions and Errors.

  • JVM Exceptions − These are exceptions/errors that are exclusively or logically thrown by the JVM. Examples: NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException.

  • Programmatic Exceptions − These exceptions are thrown explicitly by the application or the API programmers. Examples: IllegalArgumentException, IllegalStateException.

In this chapter, we will discuss inner classes of Java.

Nested Classes

In Java, just like methods, variables of a class too can have another class as its member. Writing a class within another is allowed in Java. The class written within is called the nested class, and the class that holds the inner class is called the outer class.

Syntax

Following is the syntax to write a nested class. Here, the class Outer_Demo is the outer class and the class Inner_Demo is the nested class.

class Outer_Demo {
   class Inner_Demo {
   }
}

Nested classes are divided into two types −

  • Non-static nested classes − These are the non-static members of a class.

  • Static nested classes − These are the static members of a class.

Inner Classes (Non-static Nested Classes)

Inner classes are a security mechanism in Java. We know a class cannot be associated with the access modifier private, but if we have the class as a member of other class, then the inner class can be made private. And this is also used to access the private members of a class.

Inner classes are of three types depending on how and where you define them. They are −

  • Inner Class
  • Method-local Inner Class
  • Anonymous Inner Class

Inner Class

Creating an inner class is quite simple. You just need to write a class within a class. Unlike a class, an inner class can be private and once you declare an inner class private, it cannot be accessed from an object outside the class.

Following is the program to create an inner class and access it. In the given example, we make the inner class private and access the class through a method.

Example

class Outer_Demo {
   int num;
   
   // inner class
   private class Inner_Demo {
      public void print() {
         System.out.println("This is an inner class");
      }
   }
   
   // Accessing he inner class from the method within
   void display_Inner() {
      Inner_Demo inner = new Inner_Demo();
      inner.print();
   }
}
   
public class My_class {

   public static void main(String args[]) {
      // Instantiating the outer class 
      Outer_Demo outer = new Outer_Demo();
      
      // Accessing the display_Inner() method.
      outer.display_Inner();
   }
}

Here you can observe that Outer_Demo is the outer class, Inner_Demo is the inner class, display_Inner() is the method inside which we are instantiating the inner class, and this method is invoked from the main method.

If you compile and execute the above program, you will get the following result −

Output

This is an inner class.

Accessing the Private Members

As mentioned earlier, inner classes are also used to access the private members of a class. Suppose, a class is having private members to access them. Write an inner class in it, return the private members from a method within the inner class, say, getValue(), and finally from another class (from which you want to access the private members) call the getValue() method of the inner class.

To instantiate the inner class, initially you have to instantiate the outer class. Thereafter, using the object of the outer class, following is the way in which you can instantiate the inner class.

Outer_Demo outer = new Outer_Demo();
Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();

The following program shows how to access the private members of a class using inner class.

Example

class Outer_Demo {
   // private variable of the outer class
   private int num = 175;  
   
   // inner class
   public class Inner_Demo {
      public int getNum() {
         System.out.println("This is the getnum method of the inner class");
         return num;
      }
   }
}

public class My_class2 {

   public static void main(String args[]) {
      // Instantiating the outer class
      Outer_Demo outer = new Outer_Demo();
      
      // Instantiating the inner class
      Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();
      System.out.println(inner.getNum());
   }
}

If you compile and execute the above program, you will get the following result −

Output

This is the getnum method of the inner class: 175

Method-local Inner Class

In Java, we can write a class within a method and this will be a local type. Like local variables, the scope of the inner class is restricted within the method.

A method-local inner class can be instantiated only within the method where the inner class is defined. The following program shows how to use a method-local inner class.

Example

public class Outerclass {
   // instance method of the outer class 
   void my_Method() {
      int num = 23;

      // method-local inner class
      class MethodInner_Demo {
         public void print() {
            System.out.println("This is method inner class "+num);	   
         }   
      } // end of inner class
	   
      // Accessing the inner class
      MethodInner_Demo inner = new MethodInner_Demo();
      inner.print();
   }
   
   public static void main(String args[]) {
      Outerclass outer = new Outerclass();
      outer.my_Method();	   	   
   }
}

If you compile and execute the above program, you will get the following result −

Output

This is method inner class 23

Anonymous Inner Class

An inner class declared without a class name is known as an anonymous inner class. In case of anonymous inner classes, we declare and instantiate them at the same time. Generally, they are used whenever you need to override the method of a class or an interface. The syntax of an anonymous inner class is as follows −

Syntax

AnonymousInner an_inner = new AnonymousInner() {
   public void my_method() {
      ........
      ........
   }   
};

The following program shows how to override the method of a class using anonymous inner class.

Example

abstract class AnonymousInner {
   public abstract void mymethod();
}

public class Outer_class {

   public static void main(String args[]) {
      AnonymousInner inner = new AnonymousInner() {
         public void mymethod() {
            System.out.println("This is an example of anonymous inner class");
         }
      };
      inner.mymethod();	
   }
}

If you compile and execute the above program, you will get the following result −

Output

This is an example of anonymous inner class

In the same way, you can override the methods of the concrete class as well as the interface using an anonymous inner class.

Anonymous Inner Class as Argument

Generally, if a method accepts an object of an interface, an abstract class, or a concrete class, then we can implement the interface, extend the abstract class, and pass the object to the method. If it is a class, then we can directly pass it to the method.

But in all the three cases, you can pass an anonymous inner class to the method. Here is the syntax of passing an anonymous inner class as a method argument −

obj.my_Method(new My_Class() {
   public void Do() {
      .....
      .....
   }
});

The following program shows how to pass an anonymous inner class as a method argument.

Example

// interface
interface Message {
   String greet();
}

public class My_class {
   // method which accepts the object of interface Message
   public void displayMessage(Message m) {
      System.out.println(m.greet() +
         ", This is an example of anonymous inner class as an argument");  
   }

   public static void main(String args[]) {
      // Instantiating the class
      My_class obj = new My_class();

      // Passing an anonymous inner class as an argument
      obj.displayMessage(new Message() {
         public String greet() {
            return "Hello";
         }
      });
   }
}

If you compile and execute the above program, it gives you the following result −

Output

Hello, This is an example of anonymous inner class as an argument

Static Nested Class

A static inner class is a nested class which is a static member of the outer class. It can be accessed without instantiating the outer class, using other static members. Just like static members, a static nested class does not have access to the instance variables and methods of the outer class. The syntax of static nested class is as follows −

Syntax

class MyOuter {
   static class Nested_Demo {
   }
}

Instantiating a static nested class is a bit different from instantiating an inner class. The following program shows how to use a static nested class.

Example

public class Outer {
   static class Nested_Demo {
      public void my_method() {
         System.out.println("This is my nested class");
      }
   }
   
   public static void main(String args[]) {
      Outer.Nested_Demo nested = new Outer.Nested_Demo();	 
      nested.my_method();
   }
}

If you compile and execute the above program, you will get the following result −

Output

This is my nested class

Inheritance can be defined as the process where one class acquires the properties (methods and fields) of another. With the use of inheritance the information is made manageable in a hierarchical order.

The class which inherits the properties of other is known as subclass (derived class, child class) and the class whose properties are inherited is known as superclass (base class, parent class).

extends Keyword

extends is the keyword used to inherit the properties of a class. Following is the syntax of extends keyword.

Syntax

class Super {
   .....
   .....
}
class Sub extends Super {
   .....
   .....
}

Sample Code

Following is an example demonstrating Java inheritance. In this example, you can observe two classes namely Calculation and My_Calculation.

Using extends keyword, the My_Calculation inherits the methods addition() and Subtraction() of Calculation class.

Copy and paste the following program in a file with name My_Calculation.java

Example

class Calculation {
   int z;
	
   public void addition(int x, int y) {
      z = x + y;
      System.out.println("The sum of the given numbers:"+z);
   }
	
   public void Subtraction(int x, int y) {
      z = x - y;
      System.out.println("The difference between the given numbers:"+z);
   }
}

public class My_Calculation extends Calculation {
   public void multiplication(int x, int y) {
      z = x * y;
      System.out.println("The product of the given numbers:"+z);
   }
	
   public static void main(String args[]) {
      int a = 20, b = 10;
      My_Calculation demo = new My_Calculation();
      demo.addition(a, b);
      demo.Subtraction(a, b);
      demo.multiplication(a, b);
   }
}

Compile and execute the above code as shown below.

javac My_Calculation.java
java My_Calculation

After executing the program, it will produce the following result −

Output

The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200

In the given program, when an object to My_Calculation class is created, a copy of the contents of the superclass is made within it. That is why, using the object of the subclass you can access the members of a superclass.

The Superclass reference variable can hold the subclass object, but using that variable you can access only the members of the superclass, so to access the members of both classes it is recommended to always create reference variable to the subclass.

If you consider the above program, you can instantiate the class as given below. But using the superclass reference variable ( cal in this case) you cannot call the method multiplication(), which belongs to the subclass My_Calculation.

Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);

Note- Subclass mewarisi semua anggota (bidang, metode, dan kelas bersarang) dari superkelasnya. Konstruktor bukan anggota, jadi mereka tidak diwarisi oleh subkelas, tetapi konstruktor superkelas dapat dipanggil dari subkelas tersebut.

Kata kunci super

Itu super kata kunci mirip dengan thiskata kunci. Berikut adalah skenario di mana kata kunci super digunakan.

  • Itu sudah biasa differentiate the members superclass dari anggota subclass, jika mereka memiliki nama yang sama.

  • Itu sudah biasa invoke the superclass konstruktor dari subclass.

Membedakan Anggota

Jika kelas mewarisi properti dari kelas lain. Dan jika anggota superclass memiliki nama yang sama dengan sub class, untuk membedakan variabel ini kita menggunakan kata kunci super seperti yang ditunjukkan di bawah ini.

super.variable
super.method();

Kode sampel

Bagian ini memberi Anda program yang mendemonstrasikan penggunaan file super kata kunci.

Dalam program yang diberikan, Anda memiliki dua kelas yaitu Sub_class dan Super_class , keduanya memiliki metode bernama display () dengan implementasi berbeda, dan variabel bernama num dengan nilai berbeda. Kami menjalankan metode display () dari kedua kelas dan mencetak nilai dari variabel num dari kedua kelas. Di sini Anda dapat mengamati bahwa kami telah menggunakan kata kunci super untuk membedakan anggota superclass dari subclass.

Salin dan tempel program dalam file dengan nama Sub_class.java.

Example

class Super_class {
   int num = 20;

   // display method of superclass
   public void display() {
      System.out.println("This is the display method of superclass");
   }
}

public class Sub_class extends Super_class {
   int num = 10;

   // display method of sub class
   public void display() {
      System.out.println("This is the display method of subclass");
   }

   public void my_method() {
      // Instantiating subclass
      Sub_class sub = new Sub_class();

      // Invoking the display() method of sub class
      sub.display();

      // Invoking the display() method of superclass
      super.display();

      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);

      // printing the value of variable num of superclass
      System.out.println("value of the variable named num in super class:"+ super.num);
   }

   public static void main(String args[]) {
      Sub_class obj = new Sub_class();
      obj.my_method();
   }
}

Kompilasi dan jalankan kode di atas menggunakan sintaks berikut.

javac Super_Demo
java Super

Saat menjalankan program, Anda akan mendapatkan hasil sebagai berikut -

Output

This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20

Memanggil Superclass Constructor

Jika sebuah kelas mewarisi properti kelas lain, subkelas tersebut secara otomatis memperoleh konstruktor default dari kelas super tersebut. Tetapi jika Anda ingin memanggil konstruktor berparameter dari superclass, Anda perlu menggunakan kata kunci super seperti yang ditunjukkan di bawah ini.

super(values);

Kode sampel

Program yang diberikan di bagian ini mendemonstrasikan bagaimana menggunakan kata kunci super untuk memanggil konstruktor Parameterized dari superclass. Program ini berisi superclass dan subclass, di mana superclass tersebut berisi konstruktor berparameter yang menerima nilai integer, dan kami menggunakan kata kunci super untuk memanggil konstruktor berparameter dari superclass tersebut.

Salin dan tempel program berikut dalam file dengan nama Subclass.java

Example

class Superclass {
   int age;

   Superclass(int age) {
      this.age = age; 		 
   }

   public void getAge() {
      System.out.println("The value of the variable named age in super class is: " +age);
   }
}

public class Subclass extends Superclass {
   Subclass(int age) {
      super(age);
   }

   public static void main(String args[]) {
      Subclass s = new Subclass(24);
      s.getAge();
   }
}

Kompilasi dan jalankan kode di atas menggunakan sintaks berikut.

javac Subclass
java Subclass

Saat menjalankan program, Anda akan mendapatkan hasil sebagai berikut -

Output

The value of the variable named age in super class is: 24

Hubungan IS-A

IS-A adalah cara untuk mengatakan: Objek ini adalah tipe dari objek itu. Mari kita lihat bagaimanaextends kata kunci digunakan untuk mencapai warisan.

public class Animal {
}

public class Mammal extends Animal {
}

public class Reptile extends Animal {
}

public class Dog extends Mammal {
}

Sekarang, berdasarkan contoh di atas, dalam istilah Berorientasi Objek, berikut ini benar -

  • Hewan adalah kelas super dari kelas Mamalia.
  • Hewan adalah superclass dari kelas Reptil.
  • Mamalia dan Reptil adalah subclass dari kelas Hewan.
  • Anjing adalah subkelas dari kelas Mamalia dan Hewan.

Sekarang, jika kita mempertimbangkan hubungan IS-A, kita dapat mengatakan -

  • Mamalia IS-A Hewan
  • Reptil IS-A Hewan
  • Anjing IS-A Mamalia
  • Karenanya: Anjing IS-A Hewan juga

Dengan menggunakan kata kunci extends, subclass akan dapat mewarisi semua properti superclass kecuali properti privat superclass tersebut.

Kami dapat memastikan bahwa Mamalia sebenarnya adalah Hewan dengan menggunakan operator instans.

Example

class Animal {
}

class Mammal extends Animal {
}

class Reptile extends Animal {
}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

true
true
true

Karena kami memiliki pemahaman yang baik tentang file extends kata kunci, mari kita lihat bagaimana implements kata kunci digunakan untuk mendapatkan hubungan IS-A.

Umumnya, file implementskata kunci digunakan dengan kelas untuk mewarisi properti antarmuka. Antarmuka tidak pernah bisa diperluas oleh kelas.

Example

public interface Animal {
}

public class Mammal implements Animal {
}

public class Dog extends Mammal {
}

Contoh Kata Kunci

Mari kita gunakan instanceof operator untuk memeriksa apakah Mamalia benar-benar Hewan, dan anjing sebenarnya adalah Hewan.

Example

interface Animal{}
class Mammal implements Animal{}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

true
true
true

Hubungan HAS-A

Hubungan ini terutama didasarkan pada penggunaan. Ini menentukan apakah kelas tertentuHAS-Ahal tertentu. Hubungan ini membantu mengurangi duplikasi kode serta bug.

Mari kita lihat contoh -

Example

public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
}

Ini menunjukkan bahwa kelas Van HAS-A Speed. Dengan memiliki kelas terpisah untuk Kecepatan, kita tidak perlu memasukkan seluruh kode yang termasuk dalam kelas Kecepatan di dalam kelas Van, yang memungkinkan untuk menggunakan kembali kelas Kecepatan dalam banyak aplikasi.

Pada fitur Object Oriented, pengguna tidak perlu pusing memikirkan objek mana yang melakukan pekerjaan sebenarnya. Untuk mencapai ini, kelas Van menyembunyikan detail implementasi dari pengguna kelas Van. Jadi, pada dasarnya yang terjadi adalah pengguna akan meminta kelas Van untuk melakukan tindakan tertentu dan kelas Van akan melakukan pekerjaan itu sendiri atau meminta kelas lain untuk melakukan tindakan tersebut.

Jenis Warisan

Ada berbagai jenis warisan seperti yang ditunjukkan di bawah ini.

Fakta yang sangat penting untuk diingat adalah bahwa Java tidak mendukung multiple inheritance. Ini berarti bahwa satu kelas tidak dapat memperluas lebih dari satu kelas. Oleh karena itu, mengikuti adalah ilegal -

Example

public class extends Animal, Mammal{}

Namun, sebuah kelas dapat mengimplementasikan satu atau lebih antarmuka, yang telah membantu Java menyingkirkan kemustahilan beberapa pewarisan.

Pada bab sebelumnya, kita berbicara tentang superclass dan subclass. Jika sebuah kelas mewarisi metode dari superclassnya, maka ada peluang untuk mengganti metode asalkan tidak ditandai final.

Manfaat dari penggantian adalah: kemampuan untuk menentukan perilaku yang spesifik untuk jenis subkelas, yang berarti subkelas dapat mengimplementasikan metode kelas induk berdasarkan persyaratannya.

Dalam istilah berorientasi objek, menimpa berarti menimpa fungsionalitas metode yang ada.

Contoh

Mari kita lihat contohnya.

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Animals can move
Dogs can walk and run

Dalam contoh di atas, Anda dapat melihatnya meskipun badalah jenis Hewan yang menjalankan metode gerakan di kelas Anjing. Alasannya adalah: Dalam waktu kompilasi, pengecekan dilakukan pada tipe referensi. Namun, dalam runtime, JVM mengetahui jenis objek dan akan menjalankan metode yang dimiliki objek tertentu tersebut.

Oleh karena itu, pada contoh di atas, program akan dikompilasi dengan benar karena kelas Animal memiliki metode pemindahan. Kemudian, pada waktu proses, ia menjalankan metode khusus untuk objek itu.

Perhatikan contoh berikut -

Contoh

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
   public void bark() {
      System.out.println("Dogs can bark");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
      b.bark();
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

TestDog.java:26: error: cannot find symbol
      b.bark();
       ^
  symbol:   method bark()
  location: variable b of type Animal
1 error

Program ini akan memunculkan kesalahan waktu kompilasi karena tipe referensi b Animal tidak memiliki metode dengan nama bark.

Aturan untuk Penggantian Metode

  • Daftar argumen harus persis sama dengan metode yang diganti.

  • Tipe pengembalian harus sama atau subtipe dari tipe pengembalian yang dideklarasikan dalam metode asli yang diganti di superclass.

  • Tingkat akses tidak boleh lebih ketat daripada tingkat akses metode yang diganti. Sebagai contoh: Jika metode superclass dideklarasikan sebagai public maka metode overridding di sub class tidak bisa private atau protected.

  • Metode instance dapat diganti hanya jika diwarisi oleh subclass.

  • Metode yang dinyatakan final tidak dapat diganti.

  • Metode yang dideklarasikan statis tidak dapat diganti tetapi dapat dideklarasikan ulang.

  • Jika suatu metode tidak dapat diwariskan, maka metode itu tidak dapat diganti.

  • Subclass dalam paket yang sama dengan superclass instance dapat menimpa metode superclass apa pun yang tidak dideklarasikan sebagai private atau final.

  • Subclass dalam paket yang berbeda hanya dapat mengganti metode non-final yang dinyatakan sebagai publik atau dilindungi.

  • Metode penggantian dapat menampilkan pengecualian apa pun yang tidak dicentang, terlepas dari apakah metode yang ditimpa akan menampilkan pengecualian atau tidak. Namun, metode penggantian tidak boleh menampilkan pengecualian yang baru atau lebih luas dari yang dideklarasikan oleh metode penggantian. Metode penggantian dapat memunculkan pengecualian yang lebih sempit atau lebih sedikit daripada metode yang diganti.

  • Konstruktor tidak dapat diganti.

Menggunakan Kata Kunci super

Saat menjalankan versi superclass dari metode yang diganti, super kata kunci digunakan.

Contoh

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      super.move();   // invokes the super class method
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal b = new Dog();   // Animal reference but Dog object
      b.move();   // runs the method in Dog class
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Animals can move
Dogs can walk and run

Polimorfisme adalah kemampuan suatu objek untuk mengambil berbagai bentuk. Penggunaan polimorfisme yang paling umum di OOP terjadi ketika referensi kelas induk digunakan untuk merujuk ke objek kelas anak.

Objek Java apa pun yang bisa lulus lebih dari satu tes IS-A dianggap polimorfik. Di Java, semua objek Java bersifat polimorfik karena objek apa pun akan lulus tes IS-A untuk tipenya sendiri dan untuk objek kelas.

Penting untuk diketahui bahwa satu-satunya cara yang mungkin untuk mengakses suatu objek adalah melalui variabel referensi. Variabel referensi hanya dapat terdiri dari satu jenis. Setelah dideklarasikan, jenis variabel referensi tidak dapat diubah.

Variabel referensi dapat dipindahkan ke objek lain asalkan tidak dinyatakan final. Jenis variabel referensi akan menentukan metode yang dapat dipanggil pada objek.

Variabel referensi dapat merujuk ke objek apa pun dari tipe yang dideklarasikan atau subtipe apa pun dari tipe yang dideklarasikan. Variabel referensi dapat dideklarasikan sebagai kelas atau tipe antarmuka.

Contoh

Mari kita lihat contohnya.

public interface Vegetarian{}
public class Animal{}
public class Deer extends Animal implements Vegetarian{}

Sekarang, kelas Rusa dianggap polimorfik karena memiliki banyak pewarisan. Berikut ini adalah benar untuk contoh di atas -

  • Seekor Rusa ADALAH Hewan
  • Seekor Rusa IS-A Vegetarian
  • Seekor Rusa ADALAH Rusa
  • Seekor Rusa IS-A Object

Ketika kita menerapkan fakta variabel referensi ke referensi objek Rusa, pernyataan berikut adalah legal -

Contoh

Deer d = new Deer();
Animal a = d;
Vegetarian v = d;
Object o = d;

Semua variabel referensi d, a, v, o merujuk ke objek Rusa yang sama di heap.

Metode Virtual

Di bagian ini, saya akan menunjukkan kepada Anda bagaimana perilaku metode yang diganti di Java memungkinkan Anda memanfaatkan polimorfisme saat mendesain kelas Anda.

Kita sudah membahas penggantian metode, di mana kelas anak bisa mengganti metode di induknya. Metode yang diganti pada dasarnya tersembunyi di kelas induk, dan tidak dipanggil kecuali kelas anak menggunakan kata kunci super dalam metode penggantian.

Contoh

/* File name : Employee.java */
public class Employee {
   private String name;
   private String address;
   private int number;

   public Employee(String name, String address, int number) {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }

   public void mailCheck() {
      System.out.println("Mailing a check to " + this.name + " " + this.address);
   }

   public String toString() {
      return name + " " + address + " " + number;
   }

   public String getName() {
      return name;
   }

   public String getAddress() {
      return address;
   }

   public void setAddress(String newAddress) {
      address = newAddress;
   }

   public int getNumber() {
      return number;
   }
}

Sekarang misalkan kita memperluas kelas Karyawan sebagai berikut -

/* File name : Salary.java */
public class Salary extends Employee {
   private double salary; // Annual salary
   
   public Salary(String name, String address, int number, double salary) {
      super(name, address, number);
      setSalary(salary);
   }
   
   public void mailCheck() {
      System.out.println("Within mailCheck of Salary class ");
      System.out.println("Mailing check to " + getName()
      + " with salary " + salary);
   }
   
   public double getSalary() {
      return salary;
   }
   
   public void setSalary(double newSalary) {
      if(newSalary >= 0.0) {
         salary = newSalary;
      }
   }
   
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

Sekarang, Anda mempelajari program berikut dengan hati-hati dan mencoba menentukan hasilnya -

/* File name : VirtualDemo.java */
public class VirtualDemo {

   public static void main(String [] args) {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
      System.out.println("Call mailCheck using Salary reference --");   
      s.mailCheck();
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Constructing an Employee
Constructing an Employee

Call mailCheck using Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.0

Di sini, kami membuat contoh dua objek Gaji. Satu menggunakan referensi Gajis, dan yang lainnya menggunakan referensi Karyawan e.

Saat memanggil s.mailCheck () , kompilator melihat mailCheck () di kelas Gaji pada waktu kompilasi, dan JVM memanggil mailCheck () di kelas Gaji pada waktu proses.

mailCheck () aktif e sangat berbeda karena eadalah referensi Karyawan. Ketika kompilator melihat e.mailCheck () , kompilator melihat metode mailCheck () di kelas Karyawan.

Di sini, pada waktu kompilasi, kompilator menggunakan mailCheck () di Employee untuk memvalidasi pernyataan ini. Namun, pada waktu proses, JVM memanggil mailCheck () di kelas Gaji.

Perilaku ini disebut sebagai pemanggilan metode virtual, dan metode ini disebut sebagai metode virtual. Metode yang diganti dipanggil pada waktu proses, apa pun tipe data referensi yang digunakan dalam kode sumber pada waktu kompilasi.

Sesuai kamus, abstractionadalah kualitas berurusan dengan ide daripada peristiwa. Misalnya, jika Anda mempertimbangkan kasus email, detail kompleks seperti apa yang terjadi segera setelah Anda mengirim email, protokol yang digunakan server email Anda disembunyikan dari pengguna. Oleh karena itu, untuk mengirim e-mail Anda hanya perlu mengetikkan isinya, sebutkan alamat penerima, dan klik kirim.

Demikian pula dalam pemrograman berorientasi objek, abstraksi adalah proses menyembunyikan detail implementasi dari pengguna, hanya fungsionalitas yang akan diberikan kepada pengguna. Dengan kata lain, pengguna akan memiliki informasi tentang apa yang dilakukan objek alih-alih bagaimana melakukannya.

Di Java, abstraksi dicapai dengan menggunakan kelas dan antarmuka Abstrak.

Kelas Abstrak

Kelas yang berisi abstract Kata kunci dalam deklarasinya dikenal sebagai kelas abstrak.

  • Kelas abstrak mungkin atau mungkin tidak berisi metode abstrak , yaitu metode tanpa tubuh (public void get ();)

  • Tapi, jika sebuah kelas memiliki setidaknya satu metode abstrak, maka kelas tersebut must dinyatakan abstrak.

  • Jika kelas dideklarasikan abstrak, itu tidak bisa dibuat instance-nya.

  • Untuk menggunakan kelas abstrak, Anda harus mewarisinya dari kelas lain, menyediakan implementasi ke metode abstrak di dalamnya.

  • Jika Anda mewarisi kelas abstrak, Anda harus menyediakan implementasi ke semua metode abstrak di dalamnya.

Contoh

Bagian ini memberi Anda contoh kelas abstrak. Untuk membuat kelas abstrak, cukup gunakanabstract kata kunci sebelum kata kunci kelas, di deklarasi kelas.

/* File name : Employee.java */
public abstract class Employee {
   private String name;
   private String address;
   private int number;

   public Employee(String name, String address, int number) {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   
   public double computePay() {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   
   public void mailCheck() {
      System.out.println("Mailing a check to " + this.name + " " + this.address);
   }

   public String toString() {
      return name + " " + address + " " + number;
   }

   public String getName() {
      return name;
   }
 
   public String getAddress() {
      return address;
   }
   
   public void setAddress(String newAddress) {
      address = newAddress;
   }
 
   public int getNumber() {
      return number;
   }
}

Anda dapat mengamati bahwa kecuali metode abstrak kelas Karyawan sama dengan kelas normal di Java. Kelas sekarang abstrak, tetapi masih memiliki tiga bidang, tujuh metode, dan satu konstruktor.

Sekarang Anda dapat mencoba membuat instance kelas Karyawan dengan cara berikut -

/* File name : AbstractDemo.java */
public class AbstractDemo {

   public static void main(String [] args) {
      /* Following is not allowed and would raise error */
      Employee e = new Employee("George W.", "Houston, TX", 43);
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}

Ketika Anda mengkompilasi kelas di atas, itu memberi Anda kesalahan berikut -

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

Mewarisi Kelas Abstrak

Kita dapat mewarisi properti kelas Karyawan seperti kelas beton dengan cara berikut -

Contoh

/* File name : Salary.java */
public class Salary extends Employee {
   private double salary;   // Annual salary
   
   public Salary(String name, String address, int number, double salary) {
      super(name, address, number);
      setSalary(salary);
   }
   
   public void mailCheck() {
      System.out.println("Within mailCheck of Salary class ");
      System.out.println("Mailing check to " + getName() + " with salary " + salary);
   }
 
   public double getSalary() {
      return salary;
   }
   
   public void setSalary(double newSalary) {
      if(newSalary >= 0.0) {
         salary = newSalary;
      }
   }
   
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

Di sini, Anda tidak dapat membuat instance kelas Karyawan, tetapi Anda dapat membuat instance Kelas Gaji, dan menggunakan instance ini Anda dapat mengakses semua tiga bidang dan tujuh metode kelas Karyawan seperti yang ditunjukkan di bawah ini.

/* File name : AbstractDemo.java */
public class AbstractDemo {

   public static void main(String [] args) {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}

Ini menghasilkan hasil sebagai berikut -

Keluaran

Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class 
Mailing check to Mohd Mohtashim with salary 3600.0

 Call mailCheck using Employee reference--
Within mailCheck of Salary class 
Mailing check to John Adams with salary 2400.0

Metode Abstrak

Jika Anda ingin kelas berisi metode tertentu tetapi Anda ingin implementasi sebenarnya dari metode itu ditentukan oleh kelas anak, Anda bisa mendeklarasikan metode di kelas induk sebagai abstrak.

  • abstract kata kunci digunakan untuk mendeklarasikan metode sebagai abstrak.

  • Anda harus menempatkan abstract kata kunci sebelum nama metode dalam deklarasi metode.

  • Metode abstrak berisi tanda tangan metode, tetapi tidak ada isi metode.

  • Alih-alih tanda kurung kurawal, metode abstrak akan memiliki titik dua (;) di bagian akhir.

Berikut adalah contoh metode abstrak.

Contoh

public abstract class Employee {
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   // Remainder of class definition
}

Mendeklarasikan metode sebagai abstrak memiliki dua konsekuensi -

  • Kelas yang memuatnya harus dinyatakan sebagai abstrak.

  • Setiap kelas yang mewarisi kelas saat ini harus mengganti metode abstrak atau mendeklarasikan dirinya sebagai abstrak.

Note- Akhirnya, kelas turunan harus mengimplementasikan metode abstrak; jika tidak, Anda akan memiliki hierarki kelas abstrak yang tidak dapat dibuat instance-nya.

Misalkan kelas Gaji mewarisi kelas Karyawan, maka kelas tersebut harus menerapkan computePay() metode seperti yang ditunjukkan di bawah ini -

/* File name : Salary.java */
public class Salary extends Employee {
   private double salary;   // Annual salary
  
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
   // Remainder of class definition
}

Encapsulationadalah salah satu dari empat konsep OOP dasar. Tiga lainnya adalah pewarisan, polimorfisme, dan abstraksi.

Enkapsulasi di Java adalah mekanisme membungkus data (variabel) dan kode yang bekerja pada data (metode) bersama-sama sebagai satu kesatuan. Dalam enkapsulasi, variabel kelas akan disembunyikan dari kelas lain, dan hanya dapat diakses melalui metode kelas mereka saat ini. Oleh karena itu, ini juga dikenal sebagaidata hiding.

Untuk mencapai enkapsulasi di Java -

  • Deklarasikan variabel kelas sebagai privat.

  • Menyediakan metode penyetel dan pengambil publik untuk mengubah dan melihat nilai variabel.

Contoh

Berikut adalah contoh yang menunjukkan bagaimana mencapai Enkapsulasi di Java -

/* File name : EncapTest.java */
public class EncapTest {
   private String name;
   private String idNum;
   private int age;

   public int getAge() {
      return age;
   }

   public String getName() {
      return name;
   }

   public String getIdNum() {
      return idNum;
   }

   public void setAge( int newAge) {
      age = newAge;
   }

   public void setName(String newName) {
      name = newName;
   }

   public void setIdNum( String newId) {
      idNum = newId;
   }
}

Metode setXXX publik () dan getXXX () adalah titik akses dari variabel instan dari kelas EncapTest. Biasanya, metode ini disebut getter dan setter. Oleh karena itu, setiap kelas yang ingin mengakses variabel harus mengaksesnya melalui getter dan setter ini.

Variabel kelas EncapTest dapat diakses menggunakan program berikut -

/* File name : RunEncap.java */
public class RunEncap {

   public static void main(String args[]) {
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");

      System.out.print("Name : " + encap.getName() + " Age : " + encap.getAge());
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Name : James Age : 20

Manfaat Enkapsulasi

  • Bidang kelas dapat dibuat menjadi hanya-baca atau hanya-tulis.

  • Kelas dapat memiliki kontrol penuh atas apa yang disimpan di bidangnya.

Antarmuka adalah tipe referensi di Java. Ini mirip dengan kelas. Ini adalah kumpulan metode abstrak. Sebuah kelas mengimplementasikan sebuah antarmuka, sehingga mewarisi metode abstrak dari antarmuka.

Bersama dengan metode abstrak, antarmuka juga dapat berisi konstanta, metode default, metode statis, dan tipe bertingkat. Badan metode hanya ada untuk metode default dan metode statis.

Menulis antarmuka mirip dengan menulis kelas. Tetapi sebuah kelas mendeskripsikan atribut dan perilaku suatu objek. Dan antarmuka berisi perilaku yang diimplementasikan oleh kelas.

Kecuali kelas yang mengimplementasikan antarmuka abstrak, semua metode antarmuka perlu didefinisikan di kelas.

Antarmuka mirip dengan kelas dengan cara berikut -

  • Antarmuka dapat berisi sejumlah metode.

  • Antarmuka ditulis dalam file dengan .java ekstensi, dengan nama antarmuka yang cocok dengan nama file.

  • Kode byte dari sebuah antarmuka muncul di a .class mengajukan.

  • Antarmuka muncul dalam paket, dan file bytecode yang sesuai harus berada dalam struktur direktori yang sesuai dengan nama paket.

Namun, antarmuka berbeda dari kelas dalam beberapa hal, termasuk -

  • Anda tidak dapat membuat contoh antarmuka.

  • Antarmuka tidak berisi konstruktor apa pun.

  • Semua metode dalam sebuah antarmuka bersifat abstrak.

  • Antarmuka tidak boleh berisi bidang contoh. Satu-satunya bidang yang dapat muncul di antarmuka harus dinyatakan sebagai statis dan final.

  • Antarmuka tidak diperluas oleh kelas; itu diimplementasikan oleh kelas.

  • Antarmuka dapat memperluas banyak antarmuka.

Mendeklarasikan Antarmuka

Itu interfacekata kunci digunakan untuk mendeklarasikan sebuah antarmuka. Berikut adalah contoh sederhana untuk mendeklarasikan sebuah antarmuka -

Contoh

Berikut adalah contoh antarmuka -

/* File name : NameOfInterface.java */
import java.lang.*;
// Any number of import statements

public interface NameOfInterface {
   // Any number of final, static fields
   // Any number of abstract method declarations\
}

Antarmuka memiliki properti berikut -

  • Antarmuka abstrak secara implisit. Anda tidak perlu menggunakan fileabstract kata kunci sambil mendeklarasikan sebuah antarmuka.

  • Setiap metode dalam antarmuka juga abstrak secara implisit, sehingga kata kunci abstrak tidak diperlukan.

  • Metode dalam sebuah antarmuka secara implisit bersifat publik.

Contoh

/* File name : Animal.java */
interface Animal {
   public void eat();
   public void travel();
}

Menerapkan Antarmuka

Ketika sebuah kelas mengimplementasikan sebuah antarmuka, Anda dapat menganggap kelas tersebut sebagai penandatanganan kontrak, setuju untuk melakukan perilaku spesifik dari antarmuka tersebut. Jika sebuah kelas tidak melakukan semua perilaku antarmuka, kelas tersebut harus mendeklarasikan dirinya sebagai abstrak.

Kelas A menggunakan implementskata kunci untuk menerapkan antarmuka. Kata kunci implement muncul di deklarasi kelas setelah bagian deklarasi diperluas.

Contoh

/* File name : MammalInt.java */
public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Mammal eats
Mammal travels

Saat mengganti metode yang ditentukan dalam antarmuka, ada beberapa aturan yang harus diikuti -

  • Pengecualian yang dicentang tidak boleh dideklarasikan pada metode implementasi selain yang dideklarasikan oleh metode antarmuka atau subkelas yang dideklarasikan oleh metode antarmuka.

  • Tanda tangan metode antarmuka dan tipe pengembalian atau subtipe yang sama harus dipertahankan saat mengganti metode.

  • Kelas implementasi itu sendiri bisa abstrak dan jika demikian, metode antarmuka tidak perlu diimplementasikan.

Saat mengimplementasikan antarmuka, ada beberapa aturan -

  • Sebuah kelas dapat mengimplementasikan lebih dari satu antarmuka dalam satu waktu.

  • Sebuah kelas hanya dapat memperluas satu kelas, tetapi mengimplementasikan banyak antarmuka.

  • Antarmuka dapat memperluas antarmuka lain, dengan cara yang sama seperti kelas dapat memperluas kelas lain.

Memperluas Antarmuka

Antarmuka dapat memperluas antarmuka lain dengan cara yang sama seperti kelas dapat memperluas kelas lain. Ituextends kata kunci digunakan untuk memperluas antarmuka, dan antarmuka anak mewarisi metode antarmuka induk.

Antarmuka Olahraga berikut diperluas oleh antarmuka Hoki dan Sepak Bola.

Contoh

// Filename: Sports.java
public interface Sports {
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

// Filename: Football.java
public interface Football extends Sports {
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

// Filename: Hockey.java
public interface Hockey extends Sports {
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Antarmuka Hoki memiliki empat metode, tetapi mewarisi dua dari Olahraga; dengan demikian, kelas yang menerapkan Hoki perlu menerapkan keenam metode tersebut. Demikian pula, kelas yang mengimplementasikan Sepakbola perlu mendefinisikan tiga metode dari Sepakbola dan dua metode dari Olahraga.

Memperluas Beberapa Antarmuka

Kelas Java hanya dapat memperluas satu kelas induk. Warisan ganda tidak diperbolehkan. Namun, antarmuka bukanlah kelas, dan antarmuka dapat memperluas lebih dari satu antarmuka induk.

Kata kunci extends digunakan sekali, dan antarmuka induknya dideklarasikan dalam daftar yang dipisahkan koma.

Misalnya, jika antarmuka Hoki memperluas Olahraga dan Acara, itu akan dideklarasikan sebagai -

Contoh

public interface Hockey extends Sports, Event

Antarmuka Pemberian Tag

Penggunaan paling umum dari antarmuka perluasan terjadi ketika antarmuka induk tidak berisi metode apa pun. Misalnya, antarmuka MouseListener dalam paket java.awt.event diperpanjang java.util.EventListener, yang didefinisikan sebagai -

Contoh

package java.util;
public interface EventListener
{}

Antarmuka tanpa metode di dalamnya disebut sebagai a taggingantarmuka. Ada dua tujuan desain dasar untuk menandai antarmuka -

Creates a common parent- Seperti antarmuka EventListener, yang diperluas oleh lusinan antarmuka lain di Java API, Anda dapat menggunakan antarmuka pemberian tag untuk membuat induk umum di antara sekelompok antarmuka. Misalnya, ketika sebuah antarmuka memperluas EventListener, JVM mengetahui bahwa antarmuka khusus ini akan digunakan dalam skenario delegasi acara.

Adds a data type to a class- Situasi ini adalah asal dari istilah penandaan. Kelas yang mengimplementasikan antarmuka penandaan tidak perlu mendefinisikan metode apa pun (karena antarmuka tidak memilikinya), tetapi kelas tersebut menjadi tipe antarmuka melalui polimorfisme.

Paket digunakan di Java untuk mencegah konflik penamaan, untuk mengontrol akses, untuk mempermudah pencarian / penempatan dan penggunaan kelas, antarmuka, enumerasi dan anotasi, dll.

SEBUAH Package dapat didefinisikan sebagai pengelompokan jenis terkait (kelas, antarmuka, enumerasi, dan anotasi) yang menyediakan perlindungan akses dan manajemen namespace.

Beberapa paket yang ada di Java adalah -

  • java.lang - menggabungkan kelas-kelas dasar

  • java.io - kelas untuk input, fungsi output digabungkan dalam paket ini

Pemrogram dapat menentukan paket mereka sendiri untuk memaketkan grup kelas / antarmuka, dll. Merupakan praktik yang baik untuk mengelompokkan kelas terkait yang diimplementasikan oleh Anda sehingga programmer dapat dengan mudah menentukan bahwa kelas, antarmuka, enumerasi, dan anotasi terkait.

Karena paket membuat namespace baru, tidak akan ada nama yang bentrok dengan nama di paket lain. Dengan menggunakan paket, lebih mudah untuk menyediakan kontrol akses dan juga lebih mudah untuk menemukan kelas terkait.

Membuat Paket

Saat membuat paket, Anda harus memilih nama untuk paket tersebut dan menyertakan file package pernyataan bersama dengan nama itu di bagian atas setiap file sumber yang berisi kelas, antarmuka, enumerasi, dan jenis anotasi yang ingin Anda sertakan dalam paket.

Pernyataan paket harus menjadi baris pertama dalam file sumber. Hanya ada satu pernyataan paket di setiap file sumber, dan ini berlaku untuk semua jenis di file.

Jika pernyataan paket tidak digunakan maka kelas, antarmuka, enumerasi, dan jenis anotasi akan ditempatkan di paket default saat ini.

Untuk mengkompilasi program Java dengan pernyataan paket, Anda harus menggunakan opsi -d seperti yang ditunjukkan di bawah ini.

javac -d Destination_folder file_name.java

Kemudian folder dengan nama paket yang diberikan dibuat di tujuan yang ditentukan, dan file kelas yang dikompilasi akan ditempatkan di folder itu.

Contoh

Mari kita lihat contoh yang membuat sebuah paket bernama animals. Merupakan praktik yang baik untuk menggunakan nama paket dengan huruf kecil untuk menghindari konflik dengan nama kelas dan antarmuka.

Contoh paket berikut berisi antarmuka bernama hewan -

/* File name : Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}

Sekarang, mari kita menerapkan antarmuka di atas pada hewan paket yang sama -

package animals;
/* File name : MammalInt.java */

public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Sekarang kompilasi file java seperti yang ditunjukkan di bawah ini -

$ javac -d . Animal.java $ javac -d . MammalInt.java

Sekarang paket / folder dengan nama animals akan dibuat di direktori saat ini dan file kelas ini akan ditempatkan di dalamnya seperti yang ditunjukkan di bawah ini.

Anda dapat menjalankan file kelas di dalam paket dan mendapatkan hasil seperti yang ditunjukkan di bawah ini.

Mammal eats
Mammal travels

Impor Kata Kunci

Jika sebuah kelas ingin menggunakan kelas lain dalam paket yang sama, nama paket tidak perlu digunakan. Kelas dalam paket yang sama menemukan satu sama lain tanpa sintaks khusus.

Contoh

Di sini, kelas bernama Boss ditambahkan ke paket penggajian yang sudah berisi Karyawan. Bos kemudian dapat merujuk ke kelas Karyawan tanpa menggunakan awalan penggajian, seperti yang ditunjukkan oleh kelas Bos berikut.

package payroll;
public class Boss {
   public void payEmployee(Employee e) {
      e.mailCheck();
   }
}

Apa yang terjadi jika kelas Karyawan tidak ada dalam paket penggajian? Kelas Boss kemudian harus menggunakan salah satu dari teknik berikut untuk merujuk ke kelas dalam paket yang berbeda.

  • Nama kelas yang sepenuhnya memenuhi syarat dapat digunakan. Misalnya -
payroll.Employee
  • Paket dapat diimpor menggunakan kata kunci import dan wild card (*). Misalnya -

import payroll.*;
  • Kelas itu sendiri dapat diimpor menggunakan kata kunci impor. Misalnya -
import payroll.Employee;

Note- File kelas dapat berisi sejumlah pernyataan impor. Pernyataan import harus muncul setelah pernyataan paket dan sebelum deklarasi kelas.

Struktur Direktori Paket

Dua hasil utama terjadi ketika kelas ditempatkan dalam sebuah paket -

  • Nama paket menjadi bagian dari nama kelas, seperti yang baru saja kita bahas di bagian sebelumnya.

  • Nama paket harus sesuai dengan struktur direktori tempat bytecode yang sesuai berada.

Berikut adalah cara sederhana untuk mengelola file Anda di Java -

Letakkan kode sumber untuk kelas, antarmuka, enumerasi, atau jenis anotasi dalam file teks yang namanya adalah nama sederhana dari jenis tersebut dan yang ekstensinya adalah .java.

Misalnya -

// File Name :  Car.java
package vehicle;

public class Car {
   // Class implementation.   
}

Sekarang, letakkan file sumber di direktori yang namanya mencerminkan nama paket tempat kelas itu berada -

....\vehicle\Car.java

Sekarang, nama kelas dan nama jalur yang memenuhi syarat adalah sebagai berikut -

  • Nama kelas → kendaraan. Mobil
  • Nama jalur → kendaraan \ Car.java (di windows)

Secara umum, perusahaan menggunakan nama domain Internet terbalik untuk nama paketnya.

Example- Nama domain Internet perusahaan adalah apple.com, lalu semua nama paketnya akan dimulai dengan com.apple. Setiap komponen nama paket sesuai dengan subdirektori.

Example - Perusahaan memiliki paket com.apple.computers yang berisi file sumber Dell.java, itu akan dimuat dalam serangkaian subdirektori seperti ini -

....\com\apple\computers\Dell.java

Pada saat kompilasi, kompilator membuat file keluaran yang berbeda untuk setiap kelas, antarmuka dan enumerasi yang ditentukan di dalamnya. Nama dasar file keluaran adalah nama tipe, dan ekstensinya adalah.class.

Misalnya -

// File Name: Dell.java
package com.apple.computers;

public class Dell {
}

class Ups {
}

Sekarang, kompilasi file ini sebagai berikut menggunakan opsi -d -

$javac -d . Dell.java

File-file tersebut akan dikompilasi sebagai berikut -

.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class

Anda dapat mengimpor semua kelas atau antarmuka yang ditentukan di \ com \ apple \ komputer \ sebagai berikut -

import com.apple.computers.*;

Seperti file sumber .java, file .class yang telah dikompilasi harus berada dalam rangkaian direktori yang mencerminkan nama paket. Namun, jalur ke file .class tidak harus sama dengan jalur ke file sumber .java. Anda dapat mengatur direktori sumber dan kelas Anda secara terpisah, seperti -

<path-one>\sources\com\apple\computers\Dell.java

<path-two>\classes\com\apple\computers\Dell.class

Dengan melakukan ini, dimungkinkan untuk memberikan akses ke direktori kelas kepada pemrogram lain tanpa mengungkapkan sumber Anda. Anda juga perlu mengelola file sumber dan kelas dengan cara ini sehingga compiler dan Java Virtual Machine (JVM) dapat menemukan semua tipe yang digunakan program Anda.

Jalur lengkap ke direktori kelas, <path-two> \ kelas, disebut jalur kelas, dan disetel dengan variabel sistem CLASSPATH. Baik compiler dan JVM membangun jalur ke file .class Anda dengan menambahkan nama paket ke jalur kelas.

Katakanlah <path-two> \ class adalah jalur kelas, dan nama paketnya adalah com.apple.computers, maka compiler dan JVM akan mencari file .class di <path-two> \ class \ com \ apple \ komputer.

Jalur kelas dapat mencakup beberapa jalur. Beberapa jalur harus dipisahkan dengan titik koma (Windows) atau titik dua (Unix). Secara default, kompilator dan JVM mencari direktori saat ini dan file JAR yang berisi kelas platform Java sehingga direktori ini secara otomatis berada di jalur kelas.

Setel Variabel Sistem CLASSPATH

Untuk menampilkan variabel CLASSPATH saat ini, gunakan perintah berikut di Windows dan UNIX (Bourne shell) -

  • Di Windows → C: \> setel CLASSPATH
  • Di UNIX →% echo $ CLASSPATH

Untuk menghapus konten saat ini dari variabel CLASSPATH, gunakan -

  • Di Windows → C: \> setel CLASSPATH =
  • Di UNIX →% unset CLASSPATH; ekspor CLASSPATH

Untuk mengatur variabel CLASSPATH -

  • Di Windows → setel CLASSPATH = C: \ users \ jack \ java \ class
  • Di UNIX →% CLASSPATH = / home / jack / java / class; ekspor CLASSPATH

Struktur data yang disediakan oleh paket utilitas Java sangat kuat dan menjalankan berbagai fungsi. Struktur data ini terdiri dari antarmuka dan kelas berikut -

  • Enumeration
  • BitSet
  • Vector
  • Stack
  • Dictionary
  • Hashtable
  • Properties

Semua kelas ini sekarang sudah lama dan Java-2 telah memperkenalkan kerangka kerja baru yang disebut Kerangka Kerja Koleksi, yang akan dibahas di bab berikutnya. -

Pencacahan

Antarmuka Pencacahan itu sendiri bukanlah struktur data, tetapi sangat penting dalam konteks struktur data lainnya. Antarmuka Pencacahan mendefinisikan cara untuk mengambil elemen berturut-turut dari struktur data.

Misalnya, Enumerasi mendefinisikan metode yang disebut nextElement yang digunakan untuk mendapatkan elemen berikutnya dalam struktur data yang berisi banyak elemen.

Untuk mengetahui detail lebih lanjut tentang antarmuka ini, periksa The Enumeration .

BitSet

Kelas BitSet mengimplementasikan sekelompok bit atau flag yang dapat diatur dan dihapus secara individual.

Kelas ini sangat berguna dalam kasus di mana Anda perlu mengikuti sekumpulan nilai Boolean; Anda cukup menetapkan sedikit untuk setiap nilai dan mengatur atau menghapusnya sebagaimana mestinya.

Untuk detail lebih lanjut tentang kelas ini, periksa BitSet .

Vektor

Kelas Vector mirip dengan larik Java tradisional, kecuali bahwa kelas itu dapat berkembang seperlunya untuk mengakomodasi elemen baru.

Seperti sebuah array, elemen dari sebuah objek Vektor dapat diakses melalui indeks ke dalam vektor.

Hal yang menyenangkan tentang menggunakan kelas Vector adalah Anda tidak perlu khawatir tentang menyetelnya ke ukuran tertentu saat pembuatan; itu menyusut dan tumbuh secara otomatis bila perlu.

Untuk detail lebih lanjut tentang kelas ini, periksa The Vector .

Tumpukan

Kelas Stack mengimplementasikan tumpukan elemen last-in-first-out (LIFO).

Anda dapat menganggap tumpukan secara harfiah sebagai tumpukan objek vertikal; ketika Anda menambahkan elemen baru, itu akan ditumpuk di atas yang lain.

Saat Anda menarik elemen dari tumpukan, elemen itu akan terlepas dari atas. Dengan kata lain, elemen terakhir yang Anda tambahkan ke tumpukan adalah yang pertama keluar.

Untuk detail lebih lanjut tentang kelas ini, periksa The Stack .

Kamus

Kelas Dictionary adalah kelas abstrak yang mendefinisikan struktur data untuk memetakan kunci ke nilai.

Ini berguna jika Anda ingin dapat mengakses data melalui kunci tertentu daripada indeks integer.

Karena kelas Dictionary bersifat abstrak, ia hanya menyediakan kerangka kerja untuk struktur data yang dipetakan kunci daripada implementasi tertentu.

Untuk detail lebih lanjut tentang kelas ini, periksa The Dictionary .

The Hashtable

Kelas Hashtable menyediakan sarana untuk mengatur data berdasarkan beberapa struktur kunci yang ditentukan pengguna.

Misalnya, dalam tabel hash daftar alamat Anda bisa menyimpan dan mengurutkan data berdasarkan kunci seperti kode pos daripada nama orang.

Arti khusus dari kunci yang berkaitan dengan tabel hash sepenuhnya bergantung pada penggunaan tabel hash dan data yang dikandungnya.

Untuk detail lebih lanjut tentang kelas ini, periksa The Hashtable .

Properti

Properti adalah subclass dari Hashtable. Ini digunakan untuk memelihara daftar nilai di mana kuncinya adalah String dan nilainya juga String.

Kelas Properties digunakan oleh banyak kelas Java lainnya. Misalnya, ini adalah tipe objek yang dikembalikan oleh System.getProperties () saat mendapatkan nilai lingkungan.

Untuk detail lebih lanjut tentang kelas ini, periksa Properti .

Sebelum Java 2, Java menyediakan kelas ad hoc seperti Dictionary, Vector, Stack, dan Propertiesuntuk menyimpan dan memanipulasi kelompok objek. Meskipun kelas-kelas ini cukup berguna, mereka tidak memiliki tema sentral dan pemersatu. Jadi, cara Anda menggunakan Vektor berbeda dengan cara Anda menggunakan Properti.

Kerangka koleksi dirancang untuk memenuhi beberapa tujuan, seperti -

  • Kerangka harus berkinerja tinggi. Implementasi untuk koleksi fundamental (array dinamis, daftar tertaut, pohon, dan hashtable) harus sangat efisien.

  • Kerangka tersebut harus memungkinkan berbagai jenis koleksi untuk bekerja dengan cara yang sama dan dengan tingkat interoperabilitas yang tinggi.

  • Kerangka kerja harus memperluas dan / atau menyesuaikan koleksi dengan mudah.

Untuk tujuan ini, seluruh kerangka koleksi dirancang dengan seperangkat antarmuka standar. Beberapa implementasi standar sepertiLinkedList, HashSet, dan TreeSet, dari antarmuka ini disediakan yang dapat Anda gunakan sebagaimana adanya dan Anda juga dapat menerapkan koleksi Anda sendiri, jika Anda mau.

Kerangka koleksi adalah arsitektur terpadu untuk merepresentasikan dan memanipulasi koleksi. Semua kerangka koleksi berisi yang berikut -

  • Interfaces- Ini adalah tipe data abstrak yang mewakili koleksi. Antarmuka memungkinkan koleksi untuk dimanipulasi secara independen dari detail representasi mereka. Dalam bahasa berorientasi objek, antarmuka umumnya membentuk hierarki.

  • Implementations, i.e., Classes- Ini adalah implementasi konkret dari antarmuka koleksi. Intinya, mereka adalah struktur data yang dapat digunakan kembali.

  • Algorithms- Ini adalah metode yang melakukan komputasi berguna, seperti mencari dan mengurutkan, pada objek yang mengimplementasikan antarmuka koleksi. Algoritme dikatakan polimorfik: yaitu, metode yang sama dapat digunakan pada banyak implementasi berbeda dari antarmuka kumpulan yang sesuai.

Selain koleksi, kerangka kerja mendefinisikan beberapa antarmuka dan kelas peta. Pasangan kunci / nilai penyimpanan peta. Meskipun peta bukanlah koleksi dalam penggunaan yang tepat dari istilah tersebut, tetapi mereka sepenuhnya terintegrasi dengan koleksi.

Antarmuka Koleksi

Kerangka koleksi mendefinisikan beberapa antarmuka. Bagian ini memberikan gambaran umum dari setiap antarmuka -

Sr.No. Antarmuka & Deskripsi
1 Antarmuka Koleksi

Ini memungkinkan Anda untuk bekerja dengan kelompok objek; itu ada di bagian atas hierarki koleksi.

2 Antarmuka Daftar

Ini meluas Collection dan sebuah instance dari List menyimpan koleksi elemen yang dipesan.

3 Set

Koleksi ini memperluas untuk menangani set, yang harus berisi elemen unik.

4 The SortedSet

Ini memperluas Set untuk menangani set yang diurutkan.

5 Peta

Ini memetakan kunci unik ke nilai.

6 The Map.Entry

Ini mendeskripsikan elemen (pasangan kunci / nilai) di peta. Ini adalah kelas dalam dari Peta.

7 The SortedMap

Ini memperluas Peta sehingga kunci dipertahankan dalam urutan menaik.

8 Pencacahan

Ini adalah antarmuka warisan yang mendefinisikan metode yang dengannya Anda dapat menghitung (memperoleh satu per satu) elemen dalam kumpulan objek. Antarmuka lawas ini telah digantikan oleh Iterator.

Kelas Koleksi

Java menyediakan sekumpulan kelas koleksi standar yang mengimplementasikan antarmuka Collection. Beberapa kelas menyediakan implementasi lengkap yang dapat digunakan sebagaimana adanya dan yang lainnya adalah kelas abstrak, menyediakan implementasi kerangka yang digunakan sebagai titik awal untuk membuat koleksi konkret.

Kelas koleksi standar dirangkum dalam tabel berikut -

Sr.No. Kelas & Deskripsi
1

AbstractCollection

Menerapkan sebagian besar antarmuka Koleksi.

2

AbstractList

Memperluas AbstractCollection dan mengimplementasikan sebagian besar antarmuka Daftar.

3

AbstractSequentialList

Memperluas AbstractList untuk digunakan oleh koleksi yang menggunakan berurutan daripada akses acak elemennya.

4 LinkedList

Menerapkan daftar tertaut dengan memperluas AbstractSequentialList.

5 ArrayList

Menerapkan larik dinamis dengan memperluas AbstractList.

6

AbstractSet

Memperluas AbstractCollection dan mengimplementasikan sebagian besar antarmuka Set.

7 HashSet

Memperluas AbstractSet untuk digunakan dengan tabel hash.

8 LinkedHashSet

Memperluas HashSet untuk memungkinkan iterasi urutan penyisipan.

9 TreeSet

Menerapkan satu set yang disimpan di pohon. Memperluas AbstractSet.

10

AbstractMap

Menerapkan sebagian besar antarmuka Peta.

11 HashMap

Memperluas AbstractMap untuk menggunakan tabel hash.

12 TreeMap

Memperluas AbstractMap untuk menggunakan pohon.

13 WeakHashMap

Memperluas AbstractMap untuk menggunakan tabel hash dengan kunci lemah.

14 LinkedHashMap

Memperluas HashMap untuk memungkinkan iterasi urutan penyisipan.

15 IdentityHashMap

Memperluas AbstractMap dan menggunakan persamaan referensi saat membandingkan dokumen.

Kelas AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList dan AbstractMap menyediakan implementasi kerangka antarmuka koleksi inti, untuk meminimalkan upaya yang diperlukan untuk mengimplementasikannya.

Kelas warisan berikut yang didefinisikan oleh java.util telah dibahas di bab sebelumnya -

Sr.No. Kelas & Deskripsi
1 Vektor

Ini mengimplementasikan array dinamis. Ini mirip dengan ArrayList, tetapi dengan beberapa perbedaan.

2 Tumpukan

Stack adalah subclass dari Vector yang mengimplementasikan tumpukan standar terakhir masuk, keluar pertama.

3 Kamus

Kamus adalah kelas abstrak yang mewakili repositori penyimpanan kunci / nilai dan beroperasi seperti Map.

4 Hashtable

Hashtable adalah bagian dari java.util asli dan merupakan implementasi konkret dari Kamus.

5 Properti

Properti adalah subclass dari Hashtable. Ini digunakan untuk memelihara daftar nilai di mana kuncinya adalah String dan nilainya juga String.

6 BitSet

Kelas BitSet membuat tipe larik khusus yang menyimpan nilai bit. Larik ini dapat bertambah besar sesuai kebutuhan.

Algoritma Koleksi

Kerangka koleksi menentukan beberapa algoritme yang dapat diterapkan pada koleksi dan peta. Algoritme ini didefinisikan sebagai metode statis dalam kelas Koleksi.

Beberapa metode dapat melempar file ClassCastException, yang terjadi saat dilakukan upaya untuk membandingkan jenis yang tidak kompatibel, atau file UnsupportedOperationException, yang terjadi saat dilakukan upaya untuk mengubah koleksi yang tidak dapat dimodifikasi.

Koleksi menentukan tiga variabel statis: EMPTY_SET, EMPTY_LIST, dan EMPTY_MAP. Semuanya tidak berubah.

Sr.No. Algoritma & Deskripsi
1 Algoritma Koleksi

Berikut adalah daftar semua implementasi algoritma.

Bagaimana Cara Menggunakan Iterator?

Seringkali, Anda ingin menggilir elemen dalam koleksi. Misalnya, Anda mungkin ingin menampilkan setiap elemen.

Cara termudah untuk melakukannya adalah dengan menggunakan iterator, yang merupakan objek yang mengimplementasikan antarmuka Iterator atau ListIterator.

Iterator memungkinkan Anda untuk menggilir koleksi, mendapatkan atau menghapus elemen. ListIterator memperluas Iterator untuk memungkinkan traversal dua arah dari daftar dan modifikasi elemen.

Sr.No. Metode & Deskripsi Iterator
1 Menggunakan Java Iterator

Berikut adalah daftar semua metode dengan contoh yang disediakan oleh antarmuka Iterator dan ListIterator.

Bagaimana Cara Menggunakan Komparator?

Baik TreeSet dan TreeMap menyimpan elemen dalam urutan yang diurutkan. Namun, itu adalah pembanding yang mendefinisikan dengan tepat apa arti urutan yang diurutkan .

Antarmuka ini memungkinkan kita mengurutkan koleksi tertentu dengan berbagai cara. Antarmuka ini juga dapat digunakan untuk mengurutkan setiap instance dari kelas apa pun (bahkan kelas yang tidak dapat kami modifikasi).

Sr.No. Metode & Deskripsi Iterator
1 Menggunakan Java Comparator

Berikut adalah daftar semua metode dengan contoh-contoh yang disediakan oleh Comparator Interface.

Ringkasan

Kerangka koleksi Java memberikan akses programmer ke struktur data yang telah dikemas serta algoritma untuk memanipulasinya.

Koleksi adalah suatu objek yang dapat menampung referensi ke objek lain. Antarmuka koleksi mendeklarasikan operasi yang dapat dilakukan pada setiap jenis koleksi.

Kelas dan antarmuka kerangka koleksi ada dalam paket java.util.

Alangkah baiknya jika kita dapat menulis metode sortir tunggal yang dapat mengurutkan elemen dalam array Integer, array String, atau array jenis apa pun yang mendukung pengurutan.

Jawa Generic metode dan kelas generik memungkinkan pemrogram untuk menentukan, dengan deklarasi metode tunggal, satu set metode terkait, atau dengan deklarasi kelas tunggal, satu set tipe terkait, masing-masing.

Generik juga menyediakan keamanan jenis waktu kompilasi yang memungkinkan pemrogram menangkap jenis yang tidak valid pada waktu kompilasi.

Dengan menggunakan konsep Java Generic, kita dapat menulis metode generik untuk menyortir array objek, kemudian memanggil metode generik dengan array Integer, array Ganda, array String, dan seterusnya, untuk mengurutkan elemen array.

Metode Generik

Anda bisa menulis satu deklarasi metode umum yang bisa dipanggil dengan argumen dari tipe yang berbeda. Berdasarkan tipe argumen yang diteruskan ke metode generik, compiler menangani setiap panggilan metode dengan tepat. Berikut adalah aturan untuk mendefinisikan Metode Generik -

  • Semua deklarasi metode umum memiliki bagian parameter tipe yang dibatasi oleh tanda kurung siku (<dan>) ​​yang mendahului tipe kembalian metode (<E> dalam contoh berikutnya).

  • Setiap bagian parameter tipe berisi satu atau lebih parameter tipe yang dipisahkan dengan koma. Parameter tipe, juga dikenal sebagai variabel tipe, adalah pengenal yang menentukan nama tipe generik.

  • Parameter tipe dapat digunakan untuk mendeklarasikan tipe yang dikembalikan dan bertindak sebagai placeholder untuk tipe argumen yang diteruskan ke metode umum, yang dikenal sebagai argumen tipe aktual.

  • Tubuh metode generik dideklarasikan seperti metode lainnya. Perhatikan bahwa parameter tipe hanya dapat mewakili tipe referensi, bukan tipe primitif (seperti int, double, dan char).

Contoh

Contoh berikut mengilustrasikan bagaimana kita dapat mencetak array dari tipe yang berbeda menggunakan satu metode Generik -

public class GenericMethodTest {
   // generic method printArray
   public static < E > void printArray( E[] inputArray ) {
      // Display array elements
      for(E element : inputArray) {
         System.out.printf("%s ", element);
      }
      System.out.println();
   }

   public static void main(String args[]) {
      // Create arrays of Integer, Double and Character
      Integer[] intArray = { 1, 2, 3, 4, 5 };
      Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
      Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

      System.out.println("Array integerArray contains:");
      printArray(intArray);   // pass an Integer array

      System.out.println("\nArray doubleArray contains:");
      printArray(doubleArray);   // pass a Double array

      System.out.println("\nArray characterArray contains:");
      printArray(charArray);   // pass a Character array
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Array integerArray contains:
1 2 3 4 5 

Array doubleArray contains:
1.1 2.2 3.3 4.4 

Array characterArray contains:
H E L L O

Parameter Jenis Terikat

Ada kalanya Anda ingin membatasi jenis jenis yang diizinkan untuk diteruskan ke parameter jenis. Misalnya, metode yang beroperasi pada angka mungkin hanya ingin menerima instance Number atau subclassnya. Untuk inilah parameter tipe terikat.

Untuk mendeklarasikan parameter tipe terikat, daftar nama parameter tipe, diikuti dengan kata kunci extends, diikuti dengan batas atasnya.

Contoh

Contoh berikut mengilustrasikan bagaimana extends digunakan dalam pengertian umum yang berarti "meluas" (seperti dalam kelas) atau "mengimplementasikan" (seperti dalam antarmuka). Contoh ini adalah metode Generik untuk mengembalikan yang terbesar dari tiga objek Comparable -

public class MaximumTest {
   // determines the largest of three Comparable objects
   
   public static <T extends Comparable<T>> T maximum(T x, T y, T z) {
      T max = x;   // assume x is initially the largest
      
      if(y.compareTo(max) > 0) {
         max = y;   // y is the largest so far
      }
      
      if(z.compareTo(max) > 0) {
         max = z;   // z is the largest now                 
      }
      return max;   // returns the largest object   
   }
   
   public static void main(String args[]) {
      System.out.printf("Max of %d, %d and %d is %d\n\n", 
         3, 4, 5, maximum( 3, 4, 5 ));

      System.out.printf("Max of %.1f,%.1f and %.1f is %.1f\n\n",
         6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ));

      System.out.printf("Max of %s, %s and %s is %s\n","pear",
         "apple", "orange", maximum("pear", "apple", "orange"));
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Max of 3, 4 and 5 is 5

Max of 6.6,8.8 and 7.7 is 8.8

Max of pear, apple and orange is pear

Kelas Generik

Deklarasi kelas generik terlihat seperti deklarasi kelas non-generik, kecuali bahwa nama kelas diikuti oleh bagian parameter tipe.

Seperti metode generik, bagian parameter tipe dari kelas generik dapat memiliki satu atau lebih parameter tipe yang dipisahkan dengan koma. Kelas-kelas ini dikenal sebagai kelas berparameter atau tipe berparameter karena mereka menerima satu atau lebih parameter.

Contoh

Contoh berikut menggambarkan bagaimana kita dapat mendefinisikan kelas generik -

public class Box<T> {
   private T t;

   public void add(T t) {
      this.t = t;
   }

   public T get() {
      return t;
   }

   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<String> stringBox = new Box<String>();
    
      integerBox.add(new Integer(10));
      stringBox.add(new String("Hello World"));

      System.out.printf("Integer Value :%d\n\n", integerBox.get());
      System.out.printf("String Value :%s\n", stringBox.get());
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Integer Value :10
String Value :Hello World

Java menyediakan mekanisme yang disebut serialisasi objek di mana suatu objek dapat direpresentasikan sebagai urutan byte yang menyertakan data objek serta informasi tentang tipe objek dan tipe data yang disimpan dalam objek.

Setelah objek berseri telah ditulis ke dalam file, itu dapat dibaca dari file dan deserialisasi yaitu, informasi jenis dan byte yang mewakili objek dan datanya dapat digunakan untuk membuat ulang objek dalam memori.

Yang paling mengesankan adalah bahwa seluruh proses adalah JVM independen, yang berarti objek dapat diserialkan pada satu platform dan dideserialisasi pada platform yang sama sekali berbeda.

Kelas ObjectInputStream dan ObjectOutputStream adalah aliran tingkat tinggi yang berisi metode untuk membuat serial dan deserialisasi objek.

Kelas ObjectOutputStream berisi banyak metode tulis untuk menulis berbagai tipe data, tetapi satu metode yang menonjol -

public final void writeObject(Object x) throws IOException

Metode di atas membuat serial Objek dan mengirimkannya ke aliran keluaran. Demikian pula, kelas ObjectInputStream berisi metode berikut untuk deserialisasi objek -

public final Object readObject() throws IOException, ClassNotFoundException

Metode ini mengambil Objek berikutnya dari aliran dan deserialisasinya. Nilai yang dikembalikan adalah Object, jadi Anda perlu mentransmisikannya ke tipe data yang sesuai.

Untuk mendemonstrasikan cara kerja serialisasi di Java, saya akan menggunakan kelas Karyawan yang telah kita diskusikan di awal buku ini. Misalkan kita memiliki kelas Karyawan berikut, yang mengimplementasikan antarmuka Serializable -

Contoh

public class Employee implements java.io.Serializable {
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   
   public void mailCheck() {
      System.out.println("Mailing a check to " + name + " " + address);
   }
}

Perhatikan bahwa agar kelas berhasil diserialisasi, dua kondisi harus dipenuhi -

  • Kelas harus mengimplementasikan antarmuka java.io.Serializable.

  • Semua bidang di kelas harus dapat diserialkan. Jika sebuah field tidak dapat diserialkan, itu harus ditandaitransient.

Jika Anda penasaran untuk mengetahui apakah Java Standard Class dapat berseri atau tidak, periksa dokumentasi kelas tersebut. Tesnya sederhana: Jika kelas mengimplementasikan java.io.Serializable, maka kelas itu dapat disambung; jika tidak, tidak.

Membuat Serial Objek

Kelas ObjectOutputStream digunakan untuk membuat sebuah Objek. Program SerializeDemo berikut membuat instance objek Karyawan dan membuat serialisasi ke file.

Ketika program selesai dijalankan, sebuah file bernama employee.ser dibuat. Program tidak menghasilkan keluaran apa pun, tetapi mempelajari kodenya dan mencoba menentukan apa yang sedang dilakukan program.

Note - Saat membuat serialisasi objek ke file, konvensi standar di Java adalah memberikan file a .ser perpanjangan.

Contoh

import java.io.*;
public class SerializeDemo {

   public static void main(String [] args) {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      
      try {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      } catch (IOException i) {
         i.printStackTrace();
      }
   }
}

Deserialisasi Objek

Program DeserializeDemo berikut deserialisasi objek Karyawan yang dibuat dalam program SerializeDemo. Pelajari program dan coba tentukan hasilnya -

Contoh

import java.io.*;
public class DeserializeDemo {

   public static void main(String [] args) {
      Employee e = null;
      try {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      } catch (IOException i) {
         i.printStackTrace();
         return;
      } catch (ClassNotFoundException c) {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

Berikut adalah poin penting yang harus diperhatikan -

  • Blok coba / tangkap mencoba menangkap ClassNotFoundException, yang dideklarasikan oleh metode readObject (). Agar JVM dapat melakukan deserialisasi objek, JVM harus dapat menemukan bytecode untuk kelas tersebut. Jika JVM tidak dapat menemukan kelas selama deserialisasi objek, maka ClassNotFoundException akan dilontarkan.

  • Perhatikan bahwa nilai kembalian readObject () dimasukkan ke referensi Karyawan.

  • Nilai bidang SSN adalah 11122333 saat objek diserialisasi, tetapi karena bidang tersebut bersifat sementara, nilai ini tidak dikirim ke aliran keluaran. Bidang SSN dari objek Karyawan deserialisasi adalah 0.

Istilah pemrograman jaringan mengacu pada menulis program yang dijalankan di beberapa perangkat (komputer), di mana semua perangkat terhubung satu sama lain menggunakan jaringan.

Paket java.net dari J2SE API berisi kumpulan kelas dan antarmuka yang menyediakan detail komunikasi tingkat rendah, memungkinkan Anda untuk menulis program yang berfokus pada pemecahan masalah yang dihadapi.

Paket java.net menyediakan dukungan untuk dua protokol jaringan yang umum -

  • TCP- TCP adalah singkatan dari Transmission Control Protocol, yang memungkinkan komunikasi yang andal antara dua aplikasi. TCP biasanya digunakan melalui Protokol Internet, yang disebut sebagai TCP / IP.

  • UDP - UDP adalah singkatan dari User Datagram Protocol, protokol tanpa koneksi yang memungkinkan paket data untuk dikirim antar aplikasi.

Bab ini memberikan pemahaman yang baik tentang dua mata pelajaran berikut -

  • Socket Programming - Ini adalah konsep yang paling banyak digunakan dalam Jaringan dan telah dijelaskan dengan sangat rinci.

  • URL Processing- Ini akan dibahas secara terpisah. Klik di sini untuk mempelajari tentang Pemrosesan URL dalam bahasa Java.

Pemrograman Socket

Soket menyediakan mekanisme komunikasi antara dua komputer menggunakan TCP. Program klien membuat soket di ujung komunikasi dan mencoba menghubungkan soket itu ke server.

Ketika koneksi dibuat, server membuat objek soket di ujung komunikasi. Klien dan server sekarang dapat berkomunikasi dengan menulis ke dan membaca dari soket.

Kelas java.net.Socket mewakili soket, dan kelas java.net.ServerSocket menyediakan mekanisme untuk program server untuk mendengarkan klien dan membuat koneksi dengan mereka.

Langkah-langkah berikut ini terjadi saat membuat sambungan TCP antara dua komputer menggunakan soket -

  • Server membuat instance objek ServerSocket, yang menunjukkan komunikasi nomor port mana yang akan dilakukan.

  • Server memanggil metode accept () dari kelas ServerSocket. Metode ini menunggu hingga klien terhubung ke server pada port yang diberikan.

  • Setelah server menunggu, klien membuat instance objek Socket, menentukan nama server dan nomor port yang akan disambungkan.

  • Konstruktor kelas Socket mencoba untuk menghubungkan klien ke server yang ditentukan dan nomor port. Jika komunikasi dibuat, klien sekarang memiliki objek Socket yang mampu berkomunikasi dengan server.

  • Di sisi server, metode accept () mengembalikan referensi ke soket baru di server yang terhubung ke soket klien.

Setelah koneksi dibuat, komunikasi dapat terjadi menggunakan aliran I / O. Setiap soket memiliki OutputStream dan InputStream. OutputStream klien terhubung ke InputStream server, dan InputStream klien terhubung ke OutputStream server.

TCP adalah protokol komunikasi dua arah, sehingga data dapat dikirim melalui kedua aliran pada waktu yang sama. Berikut ini adalah kelas berguna yang menyediakan set lengkap metode untuk mengimplementasikan soket.

Metode Kelas ServerSocket

Itu java.net.ServerSocket kelas digunakan oleh aplikasi server untuk mendapatkan port dan mendengarkan permintaan klien.

Kelas ServerSocket memiliki empat konstruktor -

Sr.No. Metode & Deskripsi
1

public ServerSocket(int port) throws IOException

Upaya untuk membuat soket server yang terikat ke port tertentu. Pengecualian terjadi jika port sudah terikat oleh aplikasi lain.

2

public ServerSocket(int port, int backlog) throws IOException

Mirip dengan konstruktor sebelumnya, parameter backlog menentukan berapa banyak klien yang masuk untuk disimpan dalam antrian tunggu.

3

public ServerSocket(int port, int backlog, InetAddress address) throws IOException

Mirip dengan konstruktor sebelumnya, parameter InetAddress menentukan alamat IP lokal yang akan diikat. InetAddress digunakan untuk server yang mungkin memiliki beberapa alamat IP, memungkinkan server untuk menentukan alamat IP mana yang akan menerima permintaan klien.

4

public ServerSocket() throws IOException

Membuat soket server tidak terikat. Saat menggunakan konstruktor ini, gunakan metode bind () saat Anda siap untuk mengikat soket server.

Jika konstruktor ServerSocket tidak menampilkan pengecualian, itu berarti aplikasi Anda telah berhasil terikat ke port yang ditentukan dan siap untuk permintaan klien.

Berikut adalah beberapa metode umum kelas ServerSocket -

Sr.No. Metode & Deskripsi
1

public int getLocalPort()

Mengembalikan port tempat soket server mendengarkan. Metode ini berguna jika Anda memasukkan 0 sebagai nomor port dalam konstruktor dan membiarkan server menemukan port untuk Anda.

2

public Socket accept() throws IOException

Menunggu klien masuk. Metode ini memblokir hingga klien terhubung ke server pada port yang ditentukan atau waktu soket habis, dengan asumsi bahwa nilai batas waktu telah ditetapkan menggunakan metode setSoTimeout (). Jika tidak, metode ini memblokir tanpa batas.

3

public void setSoTimeout(int timeout)

Menetapkan nilai batas waktu untuk berapa lama soket server menunggu klien selama accept ().

4

public void bind(SocketAddress host, int backlog)

Mengikat soket ke server dan port tertentu di objek SocketAddress. Gunakan metode ini jika Anda telah membuat instance ServerSocket menggunakan konstruktor tanpa argumen.

Ketika ServerSocket memanggil accept (), metode tidak kembali sampai klien terhubung. Setelah klien tersambung, ServerSocket membuat Socket baru di port yang tidak ditentukan dan mengembalikan referensi ke Socket baru ini. Koneksi TCP sekarang ada antara klien dan server, dan komunikasi dapat dimulai.

Metode Kelas Soket

Itu java.net.Socketclass mewakili soket yang digunakan klien dan server untuk berkomunikasi satu sama lain. Klien memperoleh objek Socket dengan membuat instance, sedangkan server memperoleh objek Socket dari nilai kembalian metode accept ().

Kelas Socket memiliki lima konstruktor yang digunakan klien untuk menyambung ke server -

Sr.No. Metode & Deskripsi
1

public Socket(String host, int port) throws UnknownHostException, IOException.

Metode ini mencoba untuk terhubung ke server yang ditentukan di port yang ditentukan. Jika konstruktor ini tidak melempar pengecualian, koneksi berhasil dan klien terhubung ke server.

2

public Socket(InetAddress host, int port) throws IOException

Metode ini identik dengan konstruktor sebelumnya, kecuali tuan rumah dilambangkan dengan objek InetAddress.

3

public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.

Menghubungkan ke host dan port yang ditentukan, membuat soket pada host lokal di alamat dan port yang ditentukan.

4

public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException.

Metode ini identik dengan konstruktor sebelumnya, kecuali tuan rumah dilambangkan dengan objek InetAddress, bukan String.

5

public Socket()

Membuat soket yang tidak terhubung. Gunakan metode connect () untuk menghubungkan soket ini ke server.

Ketika konstruktor Socket kembali, itu tidak hanya memberi contoh objek Socket tetapi sebenarnya mencoba untuk terhubung ke server dan port yang ditentukan.

Beberapa metode yang menarik di kelas Socket tercantum di sini. Perhatikan bahwa klien dan server memiliki objek Socket, sehingga metode ini dapat dipanggil oleh klien dan server.

Sr.No. Metode & Deskripsi
1

public void connect(SocketAddress host, int timeout) throws IOException

Metode ini menghubungkan soket ke host yang ditentukan. Metode ini diperlukan hanya ketika Anda membuat instantiate Socket menggunakan konstruktor tanpa argumen.

2

public InetAddress getInetAddress()

Metode ini mengembalikan alamat komputer lain yang terhubung ke soket ini.

3

public int getPort()

Mengembalikan port tempat soket terikat pada mesin jarak jauh.

4

public int getLocalPort()

Mengembalikan port yang terikat pada soket pada mesin lokal.

5

public SocketAddress getRemoteSocketAddress()

Mengembalikan alamat soket jarak jauh.

6

public InputStream getInputStream() throws IOException

Mengembalikan aliran input dari soket. Aliran masukan terhubung ke aliran keluaran dari soket jarak jauh.

7

public OutputStream getOutputStream() throws IOException

Mengembalikan aliran keluaran dari soket. Aliran keluaran terhubung ke aliran masukan dari soket jarak jauh.

8

public void close() throws IOException

Menutup soket, yang membuat objek Socket ini tidak lagi dapat terhubung lagi ke server manapun.

Metode Kelas InetAddress

Kelas ini mewakili alamat Internet Protocol (IP). Berikut adalah metode berguna yang Anda perlukan saat melakukan pemrograman soket -

Sr.No. Metode & Deskripsi
1

static InetAddress getByAddress(byte[] addr)

Mengembalikan objek InetAddress yang diberi alamat IP mentah.

2

static InetAddress getByAddress(String host, byte[] addr)

Membuat InetAddress berdasarkan nama host dan alamat IP yang diberikan.

3

static InetAddress getByName(String host)

Menentukan alamat IP dari sebuah host, dengan nama host tersebut.

4

String getHostAddress()

Mengembalikan string alamat IP dalam presentasi tekstual.

5

String getHostName()

Mendapatkan nama host untuk alamat IP ini.

6

static InetAddress InetAddress getLocalHost()

Mengembalikan host lokal.

7

String toString()

Mengubah alamat IP ini menjadi String.

Contoh Socket Client

GreetingClient berikut adalah program klien yang terhubung ke server dengan menggunakan soket dan mengirimkan salam, dan kemudian menunggu tanggapan.

Contoh

// File Name GreetingClient.java
import java.net.*;
import java.io.*;

public class GreetingClient {

   public static void main(String [] args) {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try {
         System.out.println("Connecting to " + serverName + " on port " + port);
         Socket client = new Socket(serverName, port);
         
         System.out.println("Just connected to " + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         
         out.writeUTF("Hello from " + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in = new DataInputStream(inFromServer);
         
         System.out.println("Server says " + in.readUTF());
         client.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Contoh Socket Server

Program GreetingServer berikut adalah contoh aplikasi server yang menggunakan kelas Socket untuk mendengarkan klien pada nomor port yang ditentukan oleh argumen baris perintah -

Contoh

// File Name GreetingServer.java
import java.net.*;
import java.io.*;

public class GreetingServer extends Thread {
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run() {
      while(true) {
         try {
            System.out.println("Waiting for client on port " + 
               serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            
            System.out.println("Just connected to " + server.getRemoteSocketAddress());
            DataInputStream in = new DataInputStream(server.getInputStream());
            
            System.out.println(in.readUTF());
            DataOutputStream out = new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
               + "\nGoodbye!");
            server.close();
            
         } catch (SocketTimeoutException s) {
            System.out.println("Socket timed out!");
            break;
         } catch (IOException e) {
            e.printStackTrace();
            break;
         }
      }
   }
   
   public static void main(String [] args) {
      int port = Integer.parseInt(args[0]);
      try {
         Thread t = new GreetingServer(port);
         t.start();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Kompilasi klien dan server dan kemudian mulai server sebagai berikut -

$ java GreetingServer 6066
Waiting for client on port 6066...

Periksa program klien sebagai berikut -

Keluaran

$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!

Untuk mengirim email menggunakan Aplikasi Java Anda cukup sederhana tetapi untuk memulainya Anda harus punya JavaMail API dan Java Activation Framework (JAF) dipasang di mesin Anda.

  • Anda dapat mengunduh JavaMail versi terbaru (Versi 1.2) dari situs web standar Java.

  • Anda dapat mengunduh versi terbaru JAF (Versi 1.1.1) dari situs web standar Java.

Unduh dan unzip file ini, di direktori tingkat atas yang baru dibuat Anda akan menemukan sejumlah file jar untuk kedua aplikasi tersebut. Anda perlu menambahkanmail.jar dan activation.jar file di CLASSPATH Anda.

Kirim E-mail Sederhana

Berikut adalah contoh untuk mengirim email sederhana dari mesin Anda. Diasumsikan bahwa Andalocalhost terhubung ke Internet dan cukup mampu untuk mengirim email.

Contoh

// File Name SendEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail {

   public static void main(String [] args) {    
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Kompilasi dan jalankan program ini untuk mengirim email sederhana -

Keluaran

$ java SendEmail
Sent message successfully....

Jika Anda ingin mengirim email ke beberapa penerima maka metode berikut akan digunakan untuk menentukan beberapa ID email -

void addRecipients(Message.RecipientType type, Address[] addresses)
   throws MessagingException

Berikut adalah deskripsi parameter -

  • type- Ini akan disetel ke TO, CC atau BCC. Di sini CC mewakili Salinan Karbon dan BCC mewakili Salinan Karbon Hitam. Contoh: Message.RecipientType.TO

  • addresses- Ini adalah deretan ID email. Anda perlu menggunakan metode InternetAddress () saat menentukan ID email.

Kirim email HTML

Berikut adalah contoh untuk mengirim email HTML dari mesin Anda. Di sini diasumsikan bahwa Andalocalhost terhubung ke Internet dan cukup mampu untuk mengirim email.

Contoh ini sangat mirip dengan yang sebelumnya, kecuali di sini kita menggunakan metode setContent () untuk menyetel konten yang argumen keduanya adalah "teks / html" untuk menentukan bahwa konten HTML disertakan dalam pesan.

Dengan menggunakan contoh ini, Anda dapat mengirim konten HTML sebesar yang Anda suka.

Contoh

// File Name SendHTMLEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendHTMLEmail {

   public static void main(String [] args) {
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Send the actual HTML message, as big as you like
         message.setContent("<h1>This is actual message</h1>", "text/html");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Kompilasi dan jalankan program ini untuk mengirim email HTML -

Keluaran

$ java SendHTMLEmail
Sent message successfully....

Kirim Lampiran dalam E-mail

Berikut adalah contoh untuk mengirim email dengan lampiran dari mesin Anda. Di sini diasumsikan bahwa Andalocalhost terhubung ke internet dan cukup mampu untuk mengirim email.

Contoh

// File Name SendFileEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail {

   public static void main(String [] args) {     
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Create the message part 
         BodyPart messageBodyPart = new MimeBodyPart();

         // Fill the message
         messageBodyPart.setText("This is message body");
         
         // Create a multipar message
         Multipart multipart = new MimeMultipart();

         // Set text message part
         multipart.addBodyPart(messageBodyPart);

         // Part two is attachment
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);

         // Send the complete message parts
         message.setContent(multipart );

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Kompilasi dan jalankan program ini untuk mengirim email HTML -

Keluaran

$ java SendFileEmail
Sent message successfully....

Bagian Otentikasi Pengguna

Jika diperlukan untuk memberikan ID pengguna dan Kata Sandi ke server email untuk tujuan otentikasi, maka Anda dapat mengatur properti ini sebagai berikut -

props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");

Mekanisme pengiriman email lainnya akan tetap seperti dijelaskan di atas.

Java adalah bahasa pemrograman multi-threaded yang artinya kita dapat mengembangkan program multi-threaded menggunakan Java. Program multi-utas berisi dua atau lebih bagian yang dapat berjalan secara bersamaan dan setiap bagian dapat menangani tugas yang berbeda pada saat yang sama memanfaatkan sumber daya yang tersedia secara optimal khususnya ketika komputer Anda memiliki banyak CPU.

Menurut definisi, multitasking adalah ketika beberapa proses berbagi sumber daya pemrosesan yang umum seperti CPU. Multi-threading memperluas gagasan multitasking menjadi aplikasi di mana Anda dapat membagi operasi tertentu dalam satu aplikasi menjadi utas individu. Setiap utas dapat berjalan secara paralel. OS membagi waktu pemrosesan tidak hanya di antara aplikasi yang berbeda, tetapi juga di antara setiap utas dalam aplikasi.

Multi-threading memungkinkan Anda menulis dengan cara di mana banyak aktivitas dapat dilanjutkan secara bersamaan dalam program yang sama.

Siklus Hidup Thread

Seutas benang melewati berbagai tahapan dalam siklus hidupnya. Misalnya, utas lahir, dimulai, dijalankan, lalu mati. Diagram berikut menunjukkan siklus hidup utas lengkap.

Berikut adalah tahapan siklus hidup -

  • New- Utas baru memulai siklus hidupnya di status baru. Ini tetap dalam status ini sampai program memulai utas. Ini juga disebut sebagai aborn thread.

  • Runnable- Setelah utas yang baru lahir dimulai, utas menjadi dapat dijalankan. Untaian dalam status ini dianggap sedang menjalankan tugasnya.

  • Waiting- Terkadang, utas beralih ke status menunggu sementara utas menunggu utas lain melakukan tugas. Sebuah thread bertransisi kembali ke kondisi runnable hanya ketika thread lain memberi sinyal kepada thread yang menunggu untuk melanjutkan eksekusi.

  • Timed Waiting- Utas yang dapat dijalankan dapat memasuki status menunggu berjangka waktu untuk interval waktu tertentu. Sebuah utas dalam keadaan ini transisi kembali ke keadaan runnable ketika interval waktu itu kedaluwarsa atau ketika acara itu menunggu terjadi.

  • Terminated (Dead) - Utas yang dapat dijalankan memasuki status dihentikan ketika menyelesaikan tugasnya atau berakhir.

Prioritas Benang

Setiap thread Java memiliki prioritas yang membantu sistem operasi menentukan urutan thread yang dijadwalkan.

Prioritas utas Java berada dalam kisaran antara MIN_PRIORITY (konstanta 1) dan MAX_PRIORITY (konstanta 10). Secara default, setiap utas diberi prioritas NORM_PRIORITY (konstanta 5).

Utas dengan prioritas lebih tinggi lebih penting untuk program dan harus dialokasikan waktu prosesor sebelum utas dengan prioritas lebih rendah. Namun, prioritas thread tidak dapat menjamin urutan eksekusi thread dan sangat bergantung pada platform.

Buat Thread dengan Menerapkan Antarmuka yang Dapat Dijalankan

Jika kelas Anda dimaksudkan untuk dieksekusi sebagai utas, Anda dapat mencapai ini dengan mengimplementasikan Runnableantarmuka. Anda harus mengikuti tiga langkah dasar -

Langkah 1

Sebagai langkah pertama, Anda perlu mengimplementasikan metode run () yang disediakan oleh a Runnableantarmuka. Metode ini menyediakan titik masuk untuk utas dan Anda akan memasukkan logika bisnis lengkap Anda ke dalam metode ini. Berikut ini adalah sintaks sederhana dari metode run () -

public void run( )

Langkah 2

Sebagai langkah kedua, Anda akan membuat Thread objek menggunakan konstruktor berikut -

Thread(Runnable threadObj, String threadName);

Di mana, threadObj adalah turunan dari kelas yang mengimplementasikanRunnable antarmuka dan threadName adalah nama yang diberikan ke utas baru.

LANGKAH 3

Setelah objek Thread dibuat, Anda dapat memulainya dengan memanggil start()metode, yang mengeksekusi panggilan ke metode run (). Berikut ini adalah sintaks sederhana dari metode start () -

void start();

Contoh

Berikut adalah contoh untuk membuat utas baru dan mulai menjalankannya -

class RunnableDemo implements Runnable {
   private Thread t;
   private String threadName;
   
   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
      } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}

public class TestThread {

   public static void main(String args[]) {
      RunnableDemo R1 = new RunnableDemo( "Thread-1");
      R1.start();
      
      RunnableDemo R2 = new RunnableDemo( "Thread-2");
      R2.start();
   }   
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

Buat Thread dengan Memperluas Kelas Thread

Cara kedua untuk membuat utas adalah membuat kelas baru yang diperluas Threadkelas menggunakan dua langkah sederhana berikut. Pendekatan ini memberikan lebih banyak fleksibilitas dalam menangani beberapa thread yang dibuat menggunakan metode yang tersedia di kelas Thread.

Langkah 1

Anda harus mengganti run( )metode yang tersedia di kelas Thread. Metode ini menyediakan titik masuk untuk utas dan Anda akan memasukkan logika bisnis lengkap Anda ke dalam metode ini. Berikut ini adalah sintaks sederhana dari metode run () -

public void run( )

Langkah 2

Setelah objek Thread dibuat, Anda dapat memulainya dengan memanggil start()metode, yang mengeksekusi panggilan ke metode run (). Berikut ini adalah sintaks sederhana dari metode start () -

void start( );

Contoh

Berikut adalah program sebelumnya yang ditulis ulang untuk memperpanjang Thread -

class ThreadDemo extends Thread {
   private Thread t;
   private String threadName;
   
   ThreadDemo( String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // Let the thread sleep for a while.
            Thread.sleep(50);
         }
      } catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}

public class TestThread {

   public static void main(String args[]) {
      ThreadDemo T1 = new ThreadDemo( "Thread-1");
      T1.start();
      
      ThreadDemo T2 = new ThreadDemo( "Thread-2");
      T2.start();
   }   
}

Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Creating Thread-1
Starting Thread-1
Creating Thread-2
Starting Thread-2
Running Thread-1
Thread: Thread-1, 4
Running Thread-2
Thread: Thread-2, 4
Thread: Thread-1, 3
Thread: Thread-2, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-1, 1
Thread: Thread-2, 1
Thread Thread-1 exiting.
Thread Thread-2 exiting.

Metode Benang

Berikut adalah daftar metode penting yang tersedia di kelas Thread.

Sr.No. Metode & Deskripsi
1

public void start()

Memulai utas di jalur eksekusi terpisah, lalu memanggil metode run () pada objek Thread ini.

2

public void run()

Jika objek Thread ini dibuat menggunakan target Runnable terpisah, metode run () akan dipanggil pada objek Runnable tersebut.

3

public final void setName(String name)

Mengubah nama objek Thread. Ada juga metode getName () untuk mengambil nama.

4

public final void setPriority(int priority)

Menetapkan prioritas objek Thread ini. Nilai yang mungkin adalah antara 1 dan 10.

5

public final void setDaemon(boolean on)

Parameter true menunjukkan Thread ini sebagai thread daemon.

6

public final void join(long millisec)

Utas saat ini memanggil metode ini pada utas kedua, menyebabkan utas saat ini memblokir hingga utas kedua berakhir atau jumlah milidetik yang ditentukan berlalu.

7

public void interrupt()

Menyela utas ini, menyebabkannya melanjutkan eksekusi jika diblokir karena alasan apa pun.

8

public final boolean isAlive()

Mengembalikan nilai benar jika utas masih hidup, yaitu kapan saja setelah utas dimulai tetapi sebelum utas berjalan hingga selesai.

Metode sebelumnya dipanggil pada objek Thread tertentu. Metode berikut di kelas Thread bersifat statis. Memanggil salah satu metode statis melakukan operasi pada thread yang sedang berjalan.

Sr.No. Metode & Deskripsi
1

public static void yield()

Menyebabkan utas yang sedang berjalan menghasilkan utas lain dengan prioritas yang sama yang menunggu untuk dijadwalkan.

2

public static void sleep(long millisec)

Menyebabkan utas yang sedang berjalan memblokir setidaknya selama jumlah milidetik yang ditentukan.

3

public static boolean holdsLock(Object x)

Mengembalikan nilai benar jika utas saat ini memegang kunci pada Objek yang diberikan.

4

public static Thread currentThread()

Mengembalikan referensi ke utas yang sedang berjalan, yaitu utas yang memanggil metode ini.

5

public static void dumpStack()

Mencetak pelacakan tumpukan untuk thread yang sedang berjalan, yang berguna saat men-debug aplikasi multithread.

Contoh

Program ThreadClassDemo berikut mendemonstrasikan beberapa metode kelas Thread ini. Pertimbangkan sebuah kelasDisplayMessage yang mengimplementasikan Runnable -

// File Name : DisplayMessage.java
// Create a thread to implement Runnable

public class DisplayMessage implements Runnable {
   private String message;
   
   public DisplayMessage(String message) {
      this.message = message;
   }
   
   public void run() {
      while(true) {
         System.out.println(message);
      }
   }
}

Berikut ini adalah kelas lain yang memperluas kelas Thread -

// File Name : GuessANumber.java
// Create a thread to extentd Thread

public class GuessANumber extends Thread {
   private int number;
   public GuessANumber(int number) {
      this.number = number;
   }
   
   public void run() {
      int counter = 0;
      int guess = 0;
      do {
         guess = (int) (Math.random() * 100 + 1);
         System.out.println(this.getName() + " guesses " + guess);
         counter++;
      } while(guess != number);
      System.out.println("** Correct!" + this.getName() + "in" + counter + "guesses.**");
   }
}

Berikut ini adalah program utama, yang memanfaatkan kelas yang ditentukan di atas -

// File Name : ThreadClassDemo.java
public class ThreadClassDemo {

   public static void main(String [] args) {
      Runnable hello = new DisplayMessage("Hello");
      Thread thread1 = new Thread(hello);
      thread1.setDaemon(true);
      thread1.setName("hello");
      System.out.println("Starting hello thread...");
      thread1.start();
      
      Runnable bye = new DisplayMessage("Goodbye");
      Thread thread2 = new Thread(bye);
      thread2.setPriority(Thread.MIN_PRIORITY);
      thread2.setDaemon(true);
      System.out.println("Starting goodbye thread...");
      thread2.start();

      System.out.println("Starting thread3...");
      Thread thread3 = new GuessANumber(27);
      thread3.start();
      try {
         thread3.join();
      } catch (InterruptedException e) {
         System.out.println("Thread interrupted.");
      }
      System.out.println("Starting thread4...");
      Thread thread4 = new GuessANumber(75);
      
      thread4.start();
      System.out.println("main() is ending...");
   }
}

Ini akan menghasilkan hasil sebagai berikut. Anda dapat mencoba contoh ini lagi dan lagi dan Anda akan mendapatkan hasil yang berbeda setiap saat.

Keluaran

Starting hello thread...
Starting goodbye thread...
Hello
Hello
Hello
Hello
Hello
Hello
Goodbye
Goodbye
Goodbye
Goodbye
Goodbye
.......

Konsep Utama Multithreading Java

Saat melakukan pemrograman Multithreading di Java, Anda harus memiliki konsep berikut yang sangat berguna -

  • Apa itu sinkronisasi utas?

  • Menangani komunikasi interthread

  • Menangani kebuntuan benang

  • Operasi utas utama

Sebuah appletadalah program Java yang berjalan di browser Web. Applet dapat menjadi aplikasi Java yang berfungsi penuh karena memiliki seluruh Java API yang dapat digunakan.

Ada beberapa perbedaan penting antara applet dan aplikasi Java yang berdiri sendiri, termasuk yang berikut ini -

  • Applet adalah kelas Java yang memperluas kelas java.applet.Applet.

  • Metode main () tidak dipanggil pada applet, dan kelas applet tidak akan mendefinisikan main ().

  • Applet dirancang untuk disematkan dalam halaman HTML.

  • Saat pengguna melihat halaman HTML yang berisi applet, kode untuk applet diunduh ke mesin pengguna.

  • JVM diperlukan untuk melihat applet. JVM dapat berupa plug-in dari browser Web atau lingkungan runtime terpisah.

  • JVM pada mesin pengguna membuat instance kelas applet dan memanggil berbagai metode selama masa pakai applet.

  • Applet memiliki aturan keamanan ketat yang diberlakukan oleh browser Web. Keamanan dari sebuah applet sering juga disebut dengan keamanan sandbox, membandingkan applet dengan anak yang bermain di kotak pasir dengan berbagai aturan yang harus diikuti.

  • Kelas-kelas lain yang dibutuhkan applet dapat diunduh dalam satu file Java Archive (JAR).

Siklus Hidup Applet

Empat metode dalam kelas Applet memberi Anda kerangka kerja tempat Anda membangun applet yang serius -

  • init- Metode ini ditujukan untuk inisialisasi apa pun yang diperlukan untuk applet Anda. Ini dipanggil setelah tag param di dalam tag applet telah diproses.

  • start- Metode ini dipanggil secara otomatis setelah browser memanggil metode init. Ini juga dipanggil setiap kali pengguna kembali ke halaman yang berisi applet setelah pergi ke halaman lain.

  • stop- Metode ini secara otomatis dipanggil ketika pengguna keluar dari halaman tempat applet berada. Oleh karena itu, dapat dipanggil berulang kali dalam applet yang sama.

  • destroy- Metode ini hanya dipanggil saat browser dimatikan secara normal. Karena applet dimaksudkan untuk hidup di halaman HTML, Anda biasanya tidak boleh meninggalkan sumber daya setelah pengguna meninggalkan halaman yang berisi applet.

  • paint- Dipanggil segera setelah metode start (), dan juga setiap kali applet perlu mengecat ulang dirinya sendiri di browser. Metode paint () sebenarnya diwarisi dari java.awt.

Applet "Halo, Dunia"

Berikut ini adalah applet sederhana bernama HelloWorldApplet.java -

import java.applet.*;
import java.awt.*;

public class HelloWorldApplet extends Applet {
   public void paint (Graphics g) {
      g.drawString ("Hello World", 25, 50);
   }
}

Pernyataan import ini membawa kelas ke dalam ruang lingkup kelas applet kita -

  • java.applet.Applet
  • java.awt.Graphics

Tanpa pernyataan import tersebut, compiler Java tidak akan mengenali class Applet dan Graphics, yang dirujuk class applet.

Kelas Applet

Setiap applet merupakan perpanjangan dari kelas java.applet.Applet . Kelas Applet dasar menyediakan metode yang dapat dipanggil oleh kelas Applet untuk mendapatkan informasi dan layanan dari konteks browser.

Ini termasuk metode yang melakukan hal berikut -

  • Dapatkan parameter applet
  • Dapatkan lokasi jaringan dari file HTML yang berisi applet
  • Dapatkan lokasi jaringan dari direktori kelas applet
  • Cetak pesan status di browser
  • Ambil gambar
  • Ambil klip audio
  • Putar klip audio
  • Ubah ukuran applet

Selain itu, kelas Applet menyediakan antarmuka yang dengannya penampil atau browser memperoleh informasi tentang applet dan mengontrol eksekusi applet. Penampil mungkin -

  • Minta informasi tentang penulis, versi, dan hak cipta applet
  • Minta deskripsi parameter yang dikenali applet
  • Inisialisasi applet
  • Hancurkan applet
  • Mulailah eksekusi applet
  • Hentikan eksekusi applet

Kelas Applet menyediakan implementasi default dari masing-masing metode ini. Penerapan tersebut dapat diganti seperlunya.

Applet "Hello, World" sudah lengkap seperti aslinya. Satu-satunya metode yang diganti adalah metode pengecatan.

Memanggil Applet

Applet dapat dipanggil dengan menyematkan arahan dalam file HTML dan melihat file melalui penampil applet atau browser yang mendukung Java.

Tag <applet> adalah dasar untuk menyematkan applet dalam file HTML. Berikut adalah contoh yang memanggil applet "Hello, World" -

<html>
   <title>The Hello, World Applet</title>
   <hr>
   <applet code = "HelloWorldApplet.class" width = "320" height = "120">
      If your browser was Java-enabled, a "Hello, World"
      message would appear here.
   </applet>
   <hr>
</html>

Note- Anda dapat merujuk ke Tag Applet HTML untuk memahami lebih lanjut tentang memanggil applet dari HTML.

Atribut kode dari tag <applet> diperlukan. Ini menentukan kelas Applet untuk dijalankan. Lebar dan tinggi juga diperlukan untuk menentukan ukuran awal panel tempat applet berjalan. Direktif applet harus ditutup dengan tag </applet>.

Jika applet mengambil parameter, nilai dapat diteruskan untuk parameter dengan menambahkan tag <param> antara <applet> dan </applet>. Browser mengabaikan teks dan tag lainnya di antara tag applet.

Browser yang tidak mendukung Java tidak memproses <applet> dan </applet>. Oleh karena itu, apa pun yang muncul di antara tag, tidak terkait dengan applet, terlihat di browser yang tidak mendukung Java.

Penampil atau browser mencari kode Java yang dikompilasi di lokasi dokumen. Untuk menentukan sebaliknya, gunakan atribut basis kode dari tag <applet> seperti yang ditunjukkan -

<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
   width = "320" height = "120">

Jika applet berada dalam paket selain default, paket holding harus ditentukan dalam atribut kode menggunakan karakter titik (.) Untuk memisahkan komponen paket / kelas. Misalnya -

<applet  = "mypackage.subpackage.TestApplet.class" 
   width = "320" height = "120">

Mendapatkan Parameter Applet

Contoh berikut menunjukkan cara membuat applet merespons parameter penyiapan yang ditentukan dalam dokumen. Applet ini menampilkan pola kotak-kotak hitam dan warna kedua.

Warna kedua dan ukuran setiap kotak dapat ditentukan sebagai parameter applet di dalam dokumen.

CheckerApplet mendapatkan parameternya dalam metode init (). Itu juga bisa mendapatkan parameternya dalam metode paint (). Namun, mendapatkan nilai dan menyimpan pengaturan sekali di awal applet, daripada di setiap penyegaran, adalah nyaman dan efisien.

Penampil applet atau browser memanggil metode init () dari setiap applet yang dijalankannya. Penampil memanggil init () sekali, segera setelah memuat applet. (Applet.init () diimplementasikan untuk tidak melakukan apa-apa.) Ganti implementasi default untuk memasukkan kode inisialisasi kustom.

Metode Applet.getParameter () mengambil parameter dengan nama parameter (nilai parameter selalu berupa string). Jika nilainya adalah numerik atau data non-karakter lainnya, string harus diurai.

Berikut ini adalah kerangka CheckerApplet.java -

import java.applet.*;
import java.awt.*;

public class CheckerApplet extends Applet {
   int squareSize = 50;   // initialized to default size
   public void init() {}
   private void parseSquareSize (String param) {}
   private Color parseColor (String param) {}
   public void paint (Graphics g) {}
}

Berikut adalah metode init () dan private parseSquareSize () dari CheckerApplet -

public void init () {
   String squareSizeParam = getParameter ("squareSize");
   parseSquareSize (squareSizeParam);
   
   String colorParam = getParameter ("color");
   Color fg = parseColor (colorParam);
   
   setBackground (Color.black);
   setForeground (fg);
}

private void parseSquareSize (String param) {
   if (param == null) return;
   try {
      squareSize = Integer.parseInt (param);
   } catch (Exception e) {
      // Let default value remain
   }
}

Applet memanggil parseSquareSize () untuk mengurai parameter squareSize. parseSquareSize () memanggil metode perpustakaan Integer.parseInt (), yang mengurai string dan mengembalikan integer. Integer.parseInt () melontarkan pengecualian setiap kali argumennya tidak valid.

Oleh karena itu, parseSquareSize () menangkap pengecualian, daripada membiarkan applet gagal pada input yang buruk.

Applet memanggil parseColor () untuk mengurai parameter warna menjadi nilai Color. parseColor () melakukan serangkaian perbandingan string untuk mencocokkan nilai parameter dengan nama warna yang telah ditentukan. Anda perlu menerapkan metode ini agar applet ini berfungsi.

Menentukan Parameter Applet

Berikut ini adalah contoh file HTML dengan CheckerApplet tertanam di dalamnya. File HTML menentukan kedua parameter untuk applet dengan menggunakan tag <param>.

<html>
   <title>Checkerboard Applet</title>
   <hr>
   <applet code = "CheckerApplet.class" width = "480" height = "320">
      <param name = "color" value = "blue">
      <param name = "squaresize" value = "30">
   </applet>
   <hr>
</html>

Note - Nama parameter tidak peka huruf besar / kecil.

Konversi Aplikasi ke Applet

Sangat mudah untuk mengubah aplikasi Java grafis (yaitu, aplikasi yang menggunakan AWT dan dapat Anda mulai dengan peluncur program Java) menjadi applet yang dapat Anda sematkan di halaman web.

Berikut adalah langkah-langkah khusus untuk mengubah aplikasi menjadi applet.

  • Buatlah halaman HTML dengan tag yang sesuai untuk memuat kode applet.

  • Berikan subclass dari kelas JApplet. Jadikan kelas ini publik. Jika tidak, applet tidak dapat dimuat.

  • Hilangkan metode utama dalam aplikasi. Jangan membuat jendela bingkai untuk aplikasi tersebut. Aplikasi Anda akan ditampilkan di dalam browser.

  • Pindahkan kode inisialisasi apa pun dari konstruktor jendela bingkai ke metode init applet. Anda tidak perlu membuat objek applet secara eksplisit. Browser membuat instance untuk Anda dan memanggil metode init.

  • Hapus panggilan ke setSize; untuk applet, ukuran dilakukan dengan parameter lebar dan tinggi pada file HTML.

  • Hapus panggilan ke setDefaultCloseOperation. Sebuah applet tidak bisa ditutup; itu berakhir saat browser keluar.

  • Jika aplikasi memanggil setTitle, hilangkan panggilan ke metode tersebut. Applet tidak boleh memiliki bilah judul. (Anda dapat, tentu saja, memberi judul halaman web itu sendiri, menggunakan tag judul HTML.)

  • Jangan panggil setVisible (true). Applet ditampilkan secara otomatis.

Penanganan Acara

Applet mewarisi grup metode penanganan peristiwa dari kelas Container. Kelas Container mendefinisikan beberapa metode, seperti processKeyEvent dan processMouseEvent, untuk menangani tipe kejadian tertentu, dan kemudian satu metode penampung-semua yang disebut processEvent.

Untuk bereaksi terhadap suatu peristiwa, applet harus mengganti metode khusus peristiwa yang sesuai.

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;

public class ExampleEventHandling extends Applet implements MouseListener {
   StringBuffer strBuffer;

   public void init() {
      addMouseListener(this);
      strBuffer = new StringBuffer();
      addItem("initializing the apple ");
   }

   public void start() {
      addItem("starting the applet ");
   }

   public void stop() {
      addItem("stopping the applet ");
   }

   public void destroy() {
      addItem("unloading the applet");
   }

   void addItem(String word) {
      System.out.println(word);
      strBuffer.append(word);
      repaint();
   }

   public void paint(Graphics g) {
      // Draw a Rectangle around the applet's display area.
      g.drawRect(0, 0, 
      getWidth() - 1,
      getHeight() - 1);

      // display the string inside the rectangle.
      g.drawString(strBuffer.toString(), 10, 20);
   }

   
   public void mouseEntered(MouseEvent event) {
   }
   public void mouseExited(MouseEvent event) {
   }
   public void mousePressed(MouseEvent event) {
   }
   public void mouseReleased(MouseEvent event) {
   }
   public void mouseClicked(MouseEvent event) {
      addItem("mouse clicked! ");
   }
}

Sekarang, mari kita sebut applet ini sebagai berikut -

<html>
   <title>Event Handling</title>
   <hr>
   <applet code = "ExampleEventHandling.class" 
      width = "300" height = "300">
   </applet>
   <hr>
</html>

Awalnya, applet akan menampilkan "inisialisasi applet. Memulai applet." Kemudian setelah Anda mengklik di dalam persegi panjang, "mouse diklik" juga akan ditampilkan.

Menampilkan Gambar

Sebuah applet dapat menampilkan gambar dengan format GIF, JPEG, BMP, dan lainnya. Untuk menampilkan gambar dalam applet, Anda menggunakan metode drawImage () yang ditemukan di kelas java.awt.Graphics.

Berikut adalah contoh yang menggambarkan semua langkah untuk menampilkan gambar -

import java.applet.*;
import java.awt.*;
import java.net.*;

public class ImageDemo extends Applet {
   private Image image;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String imageURL = this.getParameter("image");
      if(imageURL == null) {
         imageURL = "java.jpg";
      }
      try {
         URL url = new URL(this.getDocumentBase(), imageURL);
         image = context.getImage(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         // Display in browser status bar
         context.showStatus("Could not load image!");
      }
   }
   
   public void paint(Graphics g) {
      context.showStatus("Displaying image");
      g.drawImage(image, 0, 0, 200, 84, null);
      g.drawString("www.javalicense.com", 35, 100);
   }  
}

Sekarang, mari kita sebut applet ini sebagai berikut -

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "300" height = "200">
      <param name = "image" value = "java.jpg">
   </applet>
   <hr>
</html>

Memutar Audio

Sebuah applet dapat memutar file audio yang direpresentasikan oleh antarmuka AudioClip dalam paket java.applet. Antarmuka AudioClip memiliki tiga metode, termasuk -

  • public void play() - Memutar klip audio satu kali, dari awal.

  • public void loop() - Menyebabkan klip audio diputar ulang terus menerus.

  • public void stop() - Berhenti memutar klip audio.

Untuk mendapatkan objek AudioClip, Anda harus menjalankan metode getAudioClip () dari kelas Applet. Metode getAudioClip () segera kembali, baik URL menyelesaikan file audio yang sebenarnya atau tidak. File audio tidak diunduh sampai ada upaya untuk memutar klip audio.

Berikut adalah contoh yang menggambarkan semua langkah untuk memutar audio -

import java.applet.*;
import java.awt.*;
import java.net.*;

public class AudioDemo extends Applet {
   private AudioClip clip;
   private AppletContext context;
   
   public void init() {
      context = this.getAppletContext();
      String audioURL = this.getParameter("audio");
      if(audioURL == null) {
         audioURL = "default.au";
      }
      try {
         URL url = new URL(this.getDocumentBase(), audioURL);
         clip = context.getAudioClip(url);
      } catch (MalformedURLException e) {
         e.printStackTrace();
         context.showStatus("Could not load audio file!");
      }
   }
   
   public void start() {
      if(clip != null) {
         clip.loop();
      }
   }
   
   public void stop() {
      if(clip != null) {
         clip.stop();
      }
   }
}

Sekarang, mari kita sebut applet ini sebagai berikut -

<html>
   <title>The ImageDemo applet</title>
   <hr>
   <applet code = "ImageDemo.class" width = "0" height = "0">
      <param name = "audio" value = "test.wav">
   </applet>
   <hr>
</html>

Anda dapat menggunakan test.wav pada PC Anda untuk menguji contoh di atas.

Bahasa Java mendukung tiga jenis komentar -

Sr.No. Komentar & Deskripsi
1

/* text */

Kompilator mengabaikan semuanya dari / * hingga * /.

2

//text

Kompilator mengabaikan semuanya dari // hingga akhir baris.

3

/** documentation */

Ini adalah komentar dokumentasi dan secara umum disebut doc comment. ItuJDK javadocalat menggunakan komentar dokumen saat menyiapkan dokumentasi yang dibuat secara otomatis.

Bab ini menjelaskan tentang Javadoc. Kita akan melihat bagaimana kita dapat menggunakan Javadoc untuk menghasilkan dokumentasi yang berguna untuk kode Java.

Apa itu Javadoc?

Javadoc adalah alat yang disertakan dengan JDK dan digunakan untuk membuat dokumentasi kode Java dalam format HTML dari kode sumber Java, yang memerlukan dokumentasi dalam format yang telah ditentukan sebelumnya.

Berikut adalah contoh sederhana di mana baris di dalam /*….*/ adalah komentar multi-baris Java. Demikian pula, baris yang mengawali // adalah komentar baris tunggal Java.

Contoh

/**
* The HelloWorld program implements an application that
* simply displays "Hello World!" to the standard output.
*
* @author  Zara Ali
* @version 1.0
* @since   2014-03-31 
*/
public class HelloWorld {

   public static void main(String[] args) {
      // Prints Hello, World! on standard output.
      System.out.println("Hello World!");
   }
}

Anda dapat menyertakan tag HTML yang diperlukan di dalam bagian deskripsi. Misalnya, contoh berikut menggunakan <h1> .... </h1> untuk heading dan <p> telah digunakan untuk membuat pemisah paragraf -

Contoh

/**
* <h1>Hello, World!</h1>
* The HelloWorld program implements an application that
* simply displays "Hello World!" to the standard output.
* <p>
* Giving proper comments in your program makes it more
* user friendly and it is assumed as a high quality code.
* 
*
* @author  Zara Ali
* @version 1.0
* @since   2014-03-31 
*/
public class HelloWorld {

   public static void main(String[] args) {
      // Prints Hello, World! on standard output.
      System.out.println("Hello World!");
   }
}

Tag javadoc

Alat javadoc mengenali tag berikut -

Menandai Deskripsi Sintaksis
@penulis Menambahkan pengarang kelas. @teks nama penulis
{@kode} Menampilkan teks dalam font kode tanpa menafsirkan teks sebagai markup HTML atau tag javadoc bersarang. {@code text}
{@docRoot} Merepresentasikan jalur relatif ke direktori root dokumen yang dihasilkan dari halaman yang dibuat. {@docRoot}
@tokopedia Menambahkan komentar yang menunjukkan bahwa API ini tidak lagi digunakan. @teks yang tidak pantas
@pengecualian Menambahkan Throws subpos ke dokumentasi yang dihasilkan, dengan nama kelas dan teks deskripsi. Deskripsi nama kelas @exception
{@inheritDoc} Mewarisi komentar dari nearest kelas yang diwariskan atau antarmuka yang dapat diterapkan. Mewarisi komentar dari kelas lanjutan langsung.
{@tautan} Menyisipkan link in-line dengan label teks yang terlihat yang mengarah ke dokumentasi untuk paket tertentu, kelas, atau nama anggota kelas yang direferensikan. {@link package.class # member label}
{@linkplain} Sama dengan {@link}, kecuali label tautan ditampilkan dalam teks biasa daripada font kode. {@linkplain package.class # member label}
@param Menambahkan parameter dengan nama-parameter yang ditentukan diikuti dengan deskripsi yang ditentukan ke bagian "Parameter". Deskripsi nama parameter @param
@kembali Menambahkan bagian "Pengembalian" dengan teks deskripsi. @kembali deskripsi
@Lihat Menambahkan judul "Lihat Juga" dengan tautan atau entri teks yang mengarah ke referensi. @lihat referensi
@serial Digunakan dalam komentar dokumen untuk bidang standar yang dapat diserialkan. @serial field-description | termasuk | mengecualikan
@ialdata Mendokumentasikan data yang ditulis dengan metode writeObject () atau writeExternal (). @serialData data-description
@polisi_jogja Mendokumentasikan komponen ObjectStreamField. Deskripsi bidang jenis bidang @serialField
@sejak Menambahkan judul "Sejak" dengan teks-sejak yang ditentukan ke dokumentasi yang dihasilkan. @Sejak rilis
@kontol Tag @throws dan @exception adalah sinonim. @throws deskripsi nama kelas
{@nilai} Saat {@value} digunakan dalam komentar dokumen pada bidang statis, nilai konstanta tersebut akan ditampilkan. {@value package.class # field}
@Versi: kapan Menambahkan subjudul "Versi" dengan teks versi yang ditentukan ke dokumen yang dibuat saat opsi -versi digunakan. @versi versi-teks

Contoh

Program berikut menggunakan beberapa tag penting yang tersedia untuk komentar dokumentasi. Anda dapat menggunakan tag lain berdasarkan kebutuhan Anda.

Dokumentasi tentang kelas AddNum akan dibuat dalam file HTML AddNum.html tetapi pada saat yang sama file master dengan nama index.html juga akan dibuat.

import java.io.*;

/**
* <h1>Add Two Numbers!</h1>
* The AddNum program implements an application that
* simply adds two given integer numbers and Prints
* the output on the screen.
* <p>
* <b>Note:</b> Giving proper comments in your program makes it more
* user friendly and it is assumed as a high quality code.
*
* @author  Zara Ali
* @version 1.0
* @since   2014-03-31
*/
public class AddNum {
   /**
   * This method is used to add two integers. This is
   * a the simplest form of a class method, just to
   * show the usage of various javadoc Tags.
   * @param numA This is the first paramter to addNum method
   * @param numB  This is the second parameter to addNum method
   * @return int This returns sum of numA and numB.
   */
   public int addNum(int numA, int numB) {
      return numA + numB;
   }

   /**
   * This is the main method which makes use of addNum method.
   * @param args Unused.
   * @return Nothing.
   * @exception IOException On input error.
   * @see IOException
   */

   public static void main(String args[]) throws IOException {
      AddNum obj = new AddNum();
      int sum = obj.addNum(10, 20);

      System.out.println("Sum of 10 and 20 is :" + sum);
   }
}

Sekarang, proses file AddNum.java di atas menggunakan utilitas javadoc sebagai berikut -

$ javadoc AddNum.java
Loading source file AddNum.java...
Constructing Javadoc information...
Standard Doclet version 1.7.0_51
Building tree for all the packages and classes...
Generating /AddNum.html...
AddNum.java:36: warning - @return tag cannot be used in method with void return type.
Generating /package-frame.html...
Generating /package-summary.html...
Generating /package-tree.html...
Generating /constant-values.html...
Building index for all the packages and classes...
Generating /overview-tree.html...
Generating /index-all.html...
Generating /deprecated-list.html...
Building index for all classes...
Generating /allclasses-frame.html...
Generating /allclasses-noframe.html...
Generating /index.html...
Generating /help-doc.html...
1 warning
$

Anda dapat memeriksa semua dokumentasi yang dihasilkan di sini - AddNum . Jika Anda menggunakan JDK 1.7 maka javadoc tidak menghasilkan file yang bagusstylesheet.css, jadi kami menyarankan untuk mengunduh dan menggunakan stylesheet standar dari https://docs.oracle.com/javase/7/docs/api/stylesheet.css