Java — μια αντικειμενοστραφής γλώσσα προγραμματισμού που για περισσότερα από δέκα χρόνια ήταν η κύρια γλώσσα του Android SDK. Παρά την επίσημη μετάβαση της Google στο Kotlin, η Java παραμένει σημαντικό μέρος του οικοσυστήματος: παλαιά έργα, εταιρικές εφαρμογές και εκατομμύρια γραμμές κώδικα στο Google Play συνεχίζουν να λειτουργούν σε Java. Σύμφωνα με την αναφορά JetBrains Developer Ecosystem (2025), περίπου το 35% των έργων Android εξακολουθούν να χρησιμοποιούν Java. Διαβάστε περισσότερα για τις τρέχουσες τάσεις στην επίσημη αναφορά JetBrains.
Κύρια σημεία
Java — μια γλώσσα προγραμματισμού γενικής χρήσης, που δημιουργήθηκε από την εταιρεία Sun Microsystems το 1995. Η κύρια αρχή — «Write Once, Run Anywhere»: το μεταγλωττισμένο bytecode Java εκτελείται σε οποιαδήποτε πλατφόρμα όπου είναι εγκατεστημένη η εικονική μηχανή JVM. Στο πλαίσιο της κινητής ανάπτυξης, η Java έγινε η πρώτη επίσημη γλώσσα του Android SDK, που κυκλοφόρησε από την Google το 2008.
Η αρχιτεκτονική της Java βασίζεται σε τρία συστατικά: JDK (Java Development Kit) — σύνολο εργαλείων προγραμματιστή, JRE (Java Runtime Environment) — περιβάλλον εκτέλεσης και JVM (Java Virtual Machine) — εικονική μηχανή. Το Android χρησιμοποιεί τη δική του υλοποίηση JVM — Android Runtime (ART), η οποία αντικατέστησε το Dalvik στην έκδοση 5.0 (Lollipop). Το ART εκτελεί bytecode DEX, το οποίο μεταγλωττίζεται από bytecode Java μέσω του βοηθητικού προγράμματος dx/d8.
Το βασικό χαρακτηριστικό της Java — αυτόματη διαχείριση μνήμης μέσω Garbage Collector (GC). Ο προγραμματιστής δεν χρειάζεται να ελευθερώνει ρητά μνήμη — ο GC παρακολουθεί τα αχρησιμοποίητα αντικείμενα και τα αφαιρεί. Στο Android ART χρησιμοποιούνται Concurrent Mark Sweep (CMS) και Generational GC, βελτιστοποιημένα για τους περιορισμένους πόρους κινητών συσκευών. Αυτό μειώνει το φόρτο του προγραμματιστή, αλλά μπορεί να προκαλέσει «καθυστερήσεις» κατά τη συλλογή σκουπιδιών στο νήμα UI.
Το Android υποστηρίζει ένα υποσύνολο του Java API, το οποίο επεκτείνεται με κάθε νέα έκδοση λειτουργικού συστήματος. Το Android 12 (API 31) πρόσθεσε υποστήριξη για Java 11, συμπεριλαμβανομένων λάμδα με σύλληψη μεταβλητών, αρθρωτό σύστημα JPMS και πελάτη HTTP java.net.http. Το Android 14 (API 34) εισήγαγε πειραματική υποστήριξη για Java 17 μέσω desugaring D8/R8 — ορισμένες λειτουργίες (records, sealed classes) μεταφράζονται σε συμβατό κώδικα για παλαιότερες εκδόσεις.
| Έκδοση Java | Android API (min) | Έκδοση Android | Βασικές λειτουργίες |
|---|---|---|---|
| Java 7 | API 19 | 4.4 KitKat | try-with-resources, multi-catch |
| Java 8 | API 24 | 7.0 Nougat | Λάμδα, Stream API, Optional |
| Java 11 | API 31 | 12 | HTTP Client, Local-Variable Syntax |
| Java 17 | API 34 | 14 | Records, Sealed Classes (D8) |
Android SDK περιλαμβάνει τον μεταγλωττιστή Java, το βοηθητικό πρόγραμμα dex (d8), το aapt (Asset Packaging Tool), τον εξομοιωτή και τις βιβλιοθήκες android.* και java.*. Ο προγραμματιστής γράφει κώδικα σε Java, τον μεταγλωττίζει σε αρχεία .class (bytecode JVM), στη συνέχεια το d8 τα μετατρέπει σε αρχεία .dex (Dalvik Executable), τα οποία συσκευάζονται σε APK μαζί με πόρους και AndroidManifest.xml.
Gradle — το σύστημα δόμησης του έργου Android. Το αρχείο build.gradle (Groovy) ή build.gradle.kts (Kotlin DSL) περιγράφει εξαρτήσεις, εκδόσεις SDK, γεύσεις (product flavors) και υπογραφές. Το Android Gradle Plugin (AGP) έκδοσης 8.x αυτοματοποιεί το desugaring — μετάφραση σύγχρονων λειτουργιών Java σε συμβατό προς τα πίσω κώδικα. Για παράδειγμα, το java.time.LocalDate μετατρέπεται σε κώδικα συμβατό με API 21+ χωρίς αλλαγές στον πηγαίο κώδικα του προγραμματιστή.
// Απλό Android Activity σε Java
package com.example.myapp;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.textView);
tv.setText("Γεια από Java!");
}
// Μέθοδος για χειρισμό κλικ κουμπιού
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Κουμπί πατήθηκε");
}
}Η κλάση MainActivity κληρονομεί την AppCompatActivity — βασική κλάση από το AndroidX για συμβατότητα προς τα πίσω. Η μέθοδος onCreate καλείται κατά τη δημιουργία Activity, σε αυτήν ορίζεται η διάταξη μέσω setContentView. Η findViewById συνδέει μια μεταβλητή Java με ένα στοιχείο από τη διάταξη XML. Η μέθοδος onButtonClick συνδέεται με το κουμπί μέσω του χαρακτηριστικού android:onClick στο XML.
Ο κύκλος ζωής του Activity σε Java — ακολουθία callback: onCreate → onStart → onResume (ενεργό), onPause → onStop → onDestroy (τερματισμός). Ο προγραμματιστής παρακάμπτει αυτές τις μεθόδους για διαχείριση πόρων. onCreate — αρχικοποίηση, onPause — αποθήκευση δεδομένων, onDestroy — απελευθέρωση πόρων. Το Android καλεί αυτές τις μεθόδους κατά την περιστροφή οθόνης, μετάβαση στο παρασκήνιο και λήψη κλήσης.
// Κύκλος ζωής Activity με διαχείριση κατάστασης
public class DetailActivity extends AppCompatActivity {
private String itemId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
itemId = getIntent().getStringExtra("ITEM_ID");
loadData(itemId);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("item_id", itemId);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
itemId = savedInstanceState.getString("item_id");
loadData(itemId);
}
private void loadData(String id) {
// Φόρτωση δεδομένων με βάση το αναγνωριστικό
}
}Η μέθοδος onSaveInstanceState αποθηκεύει την κατάσταση του Activity κατά την περιστροφή οθόνης ή εναλλαγή εργασιών. Το Bundle περιέχει ζεύγη κλειδιού-τιμής — απλούς τύπους, αντικείμενα Parcelable ή Serializable. Η onRestoreInstanceState επαναφέρει την αποθηκευμένη κατάσταση. Αυτό το μοτίβο είναι κρίσιμο για το Android, επειδή το σύστημα μπορεί να καταστρέψει το Activity σε έλλειψη μνήμης και να το επαναφέρει όταν επιστρέψει ο χρήστης.
Η σύνταξη Java — παρόμοια με C, αυστηρά τυποποιημένη, αντικειμενοστραφής. Κάθε αρχείο .java περιέχει μία δημόσια κλάση, το όνομα της οποίας συμπίπτει με το όνομα του αρχείου. Η Java δεν υποστηρίζει συναρτήσεις εκτός κλάσεων — όλα είναι μέθοδοι. Το σημείο εισόδου — η στατική μέθοδος public static void main(String[] args) για εφαρμογές κονσόλας ή οι μέθοδοι κύκλου ζωής Android Activity για κινητά.
Java χωρίζει τους τύπους σε πρωτόγονους (int, double, boolean, char, byte, short, long, float) και τύπους αναφοράς (κλάσεις, διεπαφές, πίνακες, enum). Οι πρωτόγονοι τύποι αποθηκεύονται στη στοίβα και μεταβιβάζονται με τιμή. Τα αντικείμενα — στο σωρό, μεταβιβάζονται με αναφορά. Το autoboxing μετατρέπει αυτόματα έναν πρωτόγονο τύπο σε αντικείμενο περιτυλίγματος (Integer, Double, Boolean), αλλά δημιουργεί επιπλέον αντικείμενα — στο Android αυτό είναι κρίσιμο για την απόδοση UI.
// Παραδείγματα τύπων δεδομένων και δομών Java
public class DataTypes {
// Πρωτόγονοι τύποι
int count = 42;
double price = 19.99;
boolean isActive = true;
char grade = 'A';
// Τύποι αναφοράς
String name = "Android";
Integer boxed = 100; // autoboxing
List<String> items = new ArrayList<>();
// Μέθοδος με Generics
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// Enum για σταθερό σύνολο τιμών
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}Τα generics List<T> εξασφαλίζουν ασφάλεια τύπων συλλογών. Η μέθοδος getFirst επιστρέφει ένα στοιχείο οποιουδήποτε τύπου — ο συγκεκριμένος τύπος καθορίζεται στο σημείο κλήσης. Το Enum Status μεταγλωττίζεται σε μια κλάση με σταθερό σύνολο σταθερών, κάθε στιγμιότυπο είναι singleton. Στο Android, το enum χρησιμοποιείται λιγότερο λόγω κατανάλωσης μνήμης: το ProGuard/R8 βελτιστοποιεί το enum σε σταθερές int όπου είναι δυνατό.
Η σύγκριση Java και Kotlin για ανάπτυξη Android — ένα από τα κύρια θέματα από το 2019, όταν η Google κήρυξε την Kotlin ως γλώσσα προτεραιότητας. Η Kotlin είναι πλήρως συμβατή με την Java — και οι δύο μεταγλωττίζονται σε bytecode JVM, μπορούν να καλέσουν η μία την άλλη και να χρησιμοποιήσουν τις ίδιες βιβλιοθήκες. Ωστόσο, οι προσεγγίσεις στη σύνταξη κώδικα διαφέρουν ριζικά.
Η Kotlin εξαλείφει τη φλυαρία της Java: το data class αντικαθιστά 50+ γραμμές κλάσης Java με getters, setters, equals, hashCode, toString και copy. Το null safety είναι ενσωματωμένο στο σύστημα τύπων της Kotlin — το NullPointerException είναι πρακτικά αδύνατο. Οι συναρτήσεις επέκτασης (Extension functions) επιτρέπουν την προσθήκη μεθόδων σε υπάρχουσες κλάσεις χωρίς κληρονομικότητα. Τα Smart Casts μετατρέπουν αυτόματα τύπους μετά από έλεγχο.
| Πτυχή | Java | Kotlin |
|---|---|---|
| Null safety | Σχολιασμοί @Nullable / @NonNull | String? / String — ενσωματωμένο |
| Data class | 50+ γραμμές με Lombok | data class User(val name: String) |
| Extension | Στατικές βοηθητικές κλάσεις | fun String.isEmail(): Boolean |
| Coroutines | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| Λάμδα | FunctionalInterface + ::method | Λάμδα από προεπιλογή |
| Σχολιασμοί DI | @Inject, @Module, @Provides | Ανάλογα, αλλά λιγότερος κώδικας |
Από πλευράς απόδοσης, Java και Kotlin είναι ταυτόσημες — και οι δύο μεταγλωττίζονται σε bytecode JVM, το οποίο το Android ART εκτελεί με τον ίδιο τρόπο. Η διαφορά στο μέγεθος APK: η Kotlin προσθέτει ~200-400 KB για τη βιβλιοθήκη kotlin-stdlib. Τα έργα Java έχουν μικρότερο μέγεθος APK λόγω απουσίας πρόσθετου χρόνου εκτέλεσης, αλλά κατά τη χρήση Java Stream API και Optional, το μέγεθος APK μπορεί να αυξηθεί λόγω desugaring.
Εργαλεία προγραμματιστή Java για Android περιλαμβάνουν Android Studio, Gradle, προφίλερ και εξομοιωτή. Android Studio — το επίσημο IDE, βασισμένο στο IntelliJ IDEA Community, περιλαμβάνει επεξεργαστή με αυτόματη συμπλήρωση Java, αναλυτή κώδικα (lint), αναδιάρθρωση και οπτικό επεξεργαστή διατάξεων (Layout Editor).
Android Gradle Plugin (AGP) έκδοσης 8.x διαχειρίζεται τη δόμηση: μεταγλώττιση Java σε κλάσεις, desugaring, σμίκρυνση ProGuard/R8, συσκευασία σε APK/AAB. R8 — βελτιωμένο desugaring και συσκότιση, που αντικαθιστά το ProGuard. Τα build variants (debug/release + product flavors) διαμορφώνονται μέσω build.gradle. Το Gradle Daemon επιταχύνει τις επόμενες δομήσεις μέσω προσωρινής αποθήκευσης.
// build.gradle (app) — διαμόρφωση μονάδας Java
android {
compileSdk 34
defaultConfig {
applicationId "com.example.myapp"
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
testImplementation 'junit:junit:4.13.2'
}Το μπλοκ compileOptions καθορίζει την έκδοση Java για μεταγλώττιση — η Java 17 είναι διαθέσιμη από AGP 8.x. Το ελάχιστο SDK (minSdk) καθορίζει την ελάχιστη έκδοση Android στην οποία λειτουργεί η εφαρμογή. Target SDK — η έκδοση για την οποία δοκιμάστηκε η εφαρμογή. Η διαφορά μεταξύ compileSdk και targetSdk: compileSdk — API για μεταγλώττιση, targetSdk — συμπεριφορά χρόνου εκτέλεσης.
Οι περιορισμοί Java στο Android έγιναν ο λόγος για τη μετάβαση της Google στην Kotlin. NullPointerException — η πιο συνηθισμένη εξαίρεση σε εφαρμογές Java-Android, επειδή το σύστημα τύπων δεν διακρίνει μεταξύ nullable και non-null αναφορών. Η Google συνιστά τους σχολιασμούς @Nullable και @NonNull από το πακέτο androidx.annotation, αλλά ο μεταγλωττιστής δεν τους ελέγχει — μόνο το lint το κάνει αυτό.
Η έλλειψη coroutines — άλλος περιορισμός: οι ασύγχρονες λειτουργίες σε Java απαιτούν callbacks, AsyncTask (απαρχαιωμένο από API 30), ExecutorService ή RxJava. Αυτό οδηγεί σε callback hell και διαρροές μνήμης κατά την περιστροφή οθόνης. Τα coroutines Kotlin με Structured Concurrency λύνουν αυτό το πρόβλημα σε επίπεδο γλώσσας: το coroutine ακυρώνεται κατά την καταστροφή του Activity χωρίς χειροκίνητη διαχείριση.
Ο κώδικας προτύπου σε Java — πηγή σφαλμάτων κατά τη χειροκίνητη σύνταξη equals/hashCode, υλοποιήσεων Parcelable και ViewHolder για RecyclerView. Οι βιβλιοθήκες Android KTX και Jetpack Compose είναι προσανατολισμένες στην Kotlin. Νέα API Android (Room, Navigation, Compose) δημοσιεύουν παραδείγματα σε Kotlin από προεπιλογή, αν και υπάρχουν εκδόσεις Java.
Συχνές Ερωτήσεις
Java — μια αντικειμενοστραφής γλώσσα προγραμματισμού από τη Sun Microsystems (1995), που λειτουργεί στην εικονική μηχανή JVM. Ήταν η κύρια γλώσσα του Android SDK μέχρι το 2019. Χρησιμοποιείται στην κινητή ανάπτυξη για παλαιά έργα, διακομιστή (Spring) και εταιρικές εφαρμογές. Διακρίνεται για αυστηρή τυποποίηση, αυτόματη συλλογή σκουπιδιών και διαπλατφορμικότητα bytecode.
Η Google κήρυξε την Kotlin ως γλώσσα προτεραιότητας για Android το 2019. Νέες βιβλιοθήκες AndroidX, Jetpack Compose, συστάσεις αρχιτεκτονικής και τεκμηρίωση παρέχονται από προεπιλογή σε Kotlin. Η Java παραμένει πλήρως υποστηριζόμενη, αλλά τα API σχεδιάζονται με προσέγγιση Kotlin-first. Τα έργα Java απαιτούν περισσότερο κώδικα προτύπου και δεν λαμβάνουν νέες γλωσσικές δυνατότητες πρώτα.
Το Android υποστηρίζει Java 8 πλήρως, Java 11 — μερικώς με Android 12+, Java 17 — πειραματικά μέσω D8 desugaring. Το Android Gradle Plugin (AGP) 8.x μεταφράζει σύγχρονο bytecode σε συμβατό κώδικα για παλαιά API μέσω desugar. Ο προγραμματιστής μπορεί να γράφει σε Java 11+ χρησιμοποιώντας λάμδα, Optional και DateTime API, αλλά records και sealed classes είναι διαθέσιμα μόνο μέσω D8.
Kotlin απαιτεί λιγότερο κώδικα: το data class αντικαθιστά δεκάδες γραμμές Java boilerplate, το null safety είναι ενσωματωμένο στους τύπους, τα coroutines απλοποιούν τον ασυγχρονισμό. Η Java προσφέρει απλούστερη σύνταξη για αρχάριους, αποδεδειγμένο οικοσύστημα βιβλιοθηκών και σταθερά εργαλεία. Η απόδοση χρόνου εκτέλεσης είναι ταυτόσημη — και οι δύο μεταγλωττίζονται σε bytecode JVM, που εκτελείται από το Android ART.
Android Studio — το τυπικό IDE για ανάπτυξη Android με υποστήριξη Java και Kotlin. Περιλαμβάνει εξομοιωτή, προφίλερ (CPU, memory, network), Layout Inspector, APK Analyzer. Το IntelliJ IDEA είναι κατάλληλο για Java διακομιστή. Το Eclipse ADT είναι παρωχημένο και δεν υποστηρίζεται από την Google. Το Android Studio παρέχει επίσης εργαλεία για μετεγκατάσταση κώδικα Java σε Kotlin μέσω ενσωματωμένου μετατροπέα.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης