# SE1EP1 - Java Fundamentals
# References
- Pemrograman Java (opens new window)
- JVM vs JRE vs JDK (opens new window)
- JVM Languages (opens new window)
- Apa itu JVM? (opens new window)
- The difference between JDK, JRE, and JVM (opens new window)
- Java Classpath (opens new window)
- Java Data Types (opens new window)
- Java Primitive Data Type (opens new window)
- Generics in Java (opens new window)
# Introduction
# - Mengenal Java dan Fungsinya
Apa itu Java?
Java merupakan bahasa pemrograman yang digunakan secara luas untuk pengodean aplikasi web. Bahasa ini telah menjadi pilihan populer di antara developer selama lebih dari dua dekade, dengan jutaan aplikasi Java yang digunakan saat ini. Java merupakan bahasa multiplatform yang berorientasi pada objek dan berpusat pada jaringan yang dapat digunakan sebagai platform di dalamnya. Java merupakan bahasa pemrograman yang cepat, aman, dan andal untuk mengodekan segala sesuatu mulai dari aplikasi seluler dan perangkat lunak korporasi hingga aplikasi big data dan teknologi sisi server.
Apa saja fungsi Java?
Karena merupakan bahasa yang gratis dan serbaguna, Java membangun perangkat lunak yang dilokalkan dan terdistribusi. Beberapa penggunaan Java yang umum di antaranya adalah:
Pengembangan Game
Banyak game seluler, komputer, dan video populer dibangun di Java. Bahkan game modern yang mengintegrasikan teknologi canggih seperti machine learning atau realitas virtual (virtual reality) dibangun dengan teknologi Java.Komputasi cloud
Java sering disebut sebagai WORA – Write Once and Run Anywhere, yang membuatnya sempurna untuk aplikasi berbasis cloud yang terdesentralisasi. Penyedia cloud memilih bahasa Java untuk menjalankan program di berbagai platform yang mendasari.Big Data
Java digunakan untuk mesin pemrosesan data yang dapat bekerja dengan set data yang kompleks dan data waktu nyata yang berjumlah besar.Kecerdasan Buatan
Java merupakan pembangkit (powerhouse) bagi pustaka machine learning. Stabilitas dan kecepatan membuatnya sempurna untuk pengembangan aplikasi kecerdasan buatan, seperti pemrosesan bahasa alami dan deep learning.Internet of Things
Java telah digunakan untuk memprogram sensor dan perangkat keras di perangkat edge yang dapat terhubung ke internet secara mandiri.
Apakah Java dan JavaScript sama?
Meskipun keduanya mengandung kata yang sama yaitu Java, akan tetapi Java dan JavaScript adalah dua bahasa yang berbeda dan tidak ada kaitan apapun diantara keduanya. Berikut ini adalah kesamaan dan perbedaannya:
Features | Java | JavaScript |
---|---|---|
Tujuan Awal | Cross-Platform | Web Browsers |
Runtime | JRE | JavaScript engine (V8, SpiderMonkey, JavaScriptCore, Chakra, etc) |
Diciptakan Oleh | James Gosling | Brendan Eich |
Perusahaan Pendiri | Sun Microsystems | Netscape Communications |
Rilis Perdana | 23/05/1995 | 04/12/1995 |
OOP Support | ✔ | ✔ |
Multithreading Support | ✔ | ✘ |
Statically Typed | ✔ | ✘ |
Compiled Language | ✔ | ✘ |
Runtime Required | ✔ | ✔ |
Try Catch | ✔ | ✔ |
Entry point Required | ✔ | ✘ |
Synchronous | ✔ | ✘ |
Asynchronous | ✔ | ✔ |
Cross-Platform | ✔ | ✔ |
# Skillset & Tech Stack
# - Hardware dan Software requirement untuk Java Programming
Untuk membuat proses pembangunan software dengan Java lebih lancar setidaknya kamu perlu memenuhi spesifikasi Hardware dan Software yang memadai.
Spesifikasi Hardware:
- CPU: 4 Core
- Memory: 16 GB
- Free Disk Space: 30 GB
Software Requirement:
- OS: Windows (7/8/10/11), Linux, Mac OS
- OpenJDK: >= 19
- Bash Shell
# - Skillset apa saja yang wajib dikuasai seorang Java Developer
Seorang Java Developer tentunya perlu menguasai beberapa skillset berikut:
- Memahami logika algoritma
- Memahami XML
- Pemahaman OOP yang kuat
- Mampu mendeteksi bugs dari log
- Memahami Konsep Rest API
- Menguasai SQL
- Menguasai Unit Testing
- Menguasai Framework
- Mampu membuat dokumentasi yang jelas dan lengkap
- Memiliki Kesabaran
# - tools apa saja yang wajib dikuasai seorang Java Developer
Ada juga tools yang akan sering kamu gunakan jika kamu menjadi seorang Java Developer, yaitu:
- OpenJDK
- Git
- Bash / Unix-Like Shell
- IDE (Eclipse / Intellij Idea)
- HTTP Client (Postman/Thunder Client/dll)
- Maven / Gradle
- Docker
# Environment Setup
# - Setup IDE
Pada materi kali ini, kita akan menggunakan IDE dari Jetbrains yaitu Intellij Idea. Kamu bisa memilih Community Edition pada link berikut:
jetbrains.com/idea/download
Pilihlah sesuai dengan sistem operasi yang kamu gunakan.
# - Setup Runtime
Untuk mengkompilasi dan menjalankan program java, kamu membutuhkan compiler yang biasa dikenal dengan JDK (Java Development Kit). Kamu bisa memilih OpenJDK sebagai compiler java karena opensource.
Berikut ini link untuk installasi OpenJDK:
openjdk.org/install
Setelah proses instalasi selesai, lakukan verifikasi bahwa OpenJDK sudah terinstall dengan benar:
java -version
javac -version
# - Setup Tools
Selanjutnya ada juga beberapa tools yang perlu kamu install untuk mendukung produktifitas kamu sebagai Java Developer.
- Git
- HTTP Client (Postman/Thunder Client/dll)
- Bash Terminal (untuk windows bisa menggunakan git bash)
- Docker
# - Mengenal JVM
JVM atau singkatan dari Java Virtual Machine, bukanlah virtual machine seperti yang ada pada sebuah hypervisor. JVM bertanggung jawab untuk mengkonversi Bytecode ke mesin spesifik yang digunakan oleh JRE dan JDK. JRE (Java Runtime Environment) digunakan untuk menjalankan Java bytecode, sedangkan JDK (Java Development Kit) digunakan untuk mengkompilasi bahasa program Java ke Java Bytecode.
JVM juga memiliki kemampuan untuk menjalankan kode yang bukan ditulis dengan bahasa program Java dan telah dikompilasi menjadi Java Bytecode. Beberapa bahasa program yang didukung oleh JVM, diantaranya:
- Java
- Kotlin
- Scala
- Groovy
- Clojure
- Fantom
- Ceylon
- Jython
- JRuby
- Frege
- Xtend
- Golo
- Concurnaas
- Yeti
# Pemrograman Dasar
# - Classpath
Classpath pada Java adalah satu set kumpulan path atau lokasi dari library Java yang dibutuhkan pada sebuah project atau dikenal dengan dependencies. Seperti halnya vendor
pada PHP atau node_modules
pada NodeJS. Definisi classpath dapat merujuk pada kumpulan file, direktori maupun java arsip (JAR) yang masing-masing dipisahkan dengan simbol colon (😃.
Contoh definisi classpath:
CLASSPATH=.:lib:app:/opt/javalib
java MyProgram
Atau:
java -classpath .:lib:app:/opt/javalib MyProgram
# - Tipe Data
Tipe data pada Java dibagi menjadi 2 kategori, yaitu Primitive Data Type dan Object Data Type (Non-Primitive).
Berikut ini adalah beberapa Primitive Data Type pada Java:
Tipe Data | Default Value | Keterangan |
---|---|---|
byte | 0 | menampung nilai byte |
short | 0 | menampung nilai bilangan bulat |
int | 0 | menampung nilai bilangan bulat lebih besar dari short |
long | 0L | menampung nilai bilangan bulat lebih besar dari int |
float | 0.0f | menampung nilai float |
double | 0.0d | menampung nilai double |
boolean | \u0000 | menampung nilai boolean |
char | false | menampung nilai karakter |
Ada juga beberapa contoh Object Data Type, diantaranya:
Tipe Data | Default Value | Keterangan |
---|---|---|
String | null | menampung nilai berupa kumpulan karakter |
Integer | null | menampung nilai integer |
Float | null | menampung nilai float |
Berikut init contoh penggunakan beberapa tipe data pada Java. Buatlah sebuah file dengan nama App.java lalu isi dengan kode berikut:
// Filename: App.java
class App {
public static void main(String[] args) {
int a = 1;
short b = 2;
long c = 3L;
float d = 4.0f;
System.out.println(a + b + c + d);
}
}
Kemudian jalankan perintah berikut pada terminal:
javac App.java
java App
Setelah perintah diatas dijalankan, maka akan tercipta 1 file baru dengan nama App.class, file itulah yang disebut dengan Java Bytecode yang akan dieksekusi oleh JVM melalui JRE.
# - Class
Class pada java merupakan sebuah object yang didalamnya terdapat beberapa elemen yaitu property, method, constructor dan class lain (inner class).
Setiap class hanya dapat di eksekusi dengan membuat entrypoint atau dengan melakukan import dari class lainnya yang memiliki entrypoint.
Berikut ini adalah contoh Class pada Java:
class Car {
// Property
float fuelLiter;
// Property
String name;
// Constructor
Car(String name) {
// Property assignment
this.name = name;
}
// Method
void fuelRefill(float liter) {
// Property addition assignment
this.fuelLiter += liter;
}
// Method
boolean run() {
return true;
}
// Entrypoint Method
public static void main(String[] args) throws InterruptedException {
// Local Variable
int kmTarget = 10;
// Instance
Car miniBus = new Car("minibus");
// For Loop
for (int km = 0; km <= kmTarget; km++) {
// Instance Method Call
boolean running = miniBus.run();
// Conditional
if (!running) {
// Static Method Call
System.out.println("fuel empty");
// Break the loop
break;
}
// Static Method Call
System.out.println(km + "km");
// Static Method Call
Thread.sleep(1000);
}
}
}
# - Instance dan Static
Pada contoh sebelumnya terdapat kode miniBus.run()
yang merupakan eksekusi dari method run
di class Car
. Method run
tidak dapat di eksekusi langsung dengan kode Car.run()
karena tidak bersifat static. Jadi sebelum mengeksekusi method run
kamu harus membuat instance dan menampungnya ke dalam sebuah variable, contohnya: Car miniBus = new Car("minibus")
.
Sementara pada code System.out.println("...")
tidak dibutuhkan instance karena System.out.println
merupakan static method. Begitu juga dengan Thread.sleep
.
Method main
pada class Car
bersifat static, sebetulnya kamu dapat mengeksekusinya dengan kode Car.main
. Tetapi berhubung main
adalah sebuah entrypoint, jadi method main
sebaiknya hanya dieksekusi oleh JRE.
# - Array
Mendefinisikan Array pada java cukup sederhana, kamu cukup menambahkan []
(square brackets) setelah tipe datanya.
// Array Definition
char[] world = {'H', 'e', 'l', 'l', 'o'};
// For loop
for (char c: world) {
System.out.print(c);
}
System.out.println(" world");
# - Error Handling
Implementasi Error handling pada java sangatlah mudah, kamu bisa menggunakan block try
, catch
, finaly
.
block | fungsi |
---|---|
try | membungkus kode yang memiliki kemungkinan error |
catch | tidak akan dieksekusi kecuali terjadi error |
finaly | dieksekusi setelah block try atau catch selesai dieksekusi tanpa peduli bahwa terjadi error atau sukses |
contoh:
for (int i = 5; i >= 0; i--) {
System.out.println(5/i);
}
Jika kode diatas dijalankan, maka akan muncul error seperti berikut:
Exception in thread "main" java.lang.ArithmeticException: / by zero
Bungkus kode diatas dengan block try
catch
:
try {
for (int i = 5; i >= 0; i--) {
System.out.println(5/i);
}
} catch (Exception e) {
System.out.println("skip");
}
# - Package
Package pada java biasa digunakan untuk mengklasifikasikan kode berdasarkan fungsinya. nama package biasanya memiliki format reverse domain name dan ditulis dalam lowercase.
contoh penulisan package:
package com.example.hello;
// atau
package com.example.world;
setiap kata dipisahkan oleh titik, nantinya akan mewakili nama folder:
└── com
└── example
├── hello
└── world
Buatlah 3 file dalam satu folder yang sama, dengan nama berikut:
App.java
Hello.java
World.java
isi file App.java
:
package com.example;
import com.example.hello.Hello;
import com.example.world.World;
class App {
public static void main(String[] args) {
System.out.println(Hello.sayHello() + " " + World.sayWorld());
}
}
isi file Hello.java
:
package com.example.hello;
public class Hello {
public static String sayHello() {
return "Hello";
}
}
isi file World.java
:
package com.example.world;
public class World {
public static String sayWorld() {
return "World";
}
}
Lakukan compiling pada 3 file tersebut:
# compile java dan masukan bytecode ke dalam folder build
javac -d build *.java
# Jalankan program dengan classpath yang ada difolder build
# nama class yang akan di eksekusi harus diikuti dengan nama packagenya
java -classpath build com.example.App
# - JAR (Java Archive)
Untuk merilis aplikasi berbasis java, kamu perlu menghimpun semua bytecode dalam sebuah file yang bernama JAR atau Java Archive. JAR biasanya memiliki ekstensi .jar
. Berikut ini cara membuat JAR file dari sebuah project.
cd /path/to/project
javac -d build *.java
cd build
jar cfe app.jar com.example.App $(find . -name '*.class')
Setelah perintah tersebut di eksekusi, maka file app.jar
siap di distribusikan. berikut ini adalah cara menjalankan file JAR:
java -jar app.jar
Sekarang kamu sudah bisa mendistribusikan project tersebut.