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": कंपाइल किया गया Java बाइटकोड किसी भी प्लेटफ़ॉर्म पर चलता है जहाँ JVM वर्चुअल मशीन स्थापित है। मोबाइल विकास के संदर्भ में, Java Google द्वारा 2008 में जारी Android SDK की पहली आधिकारिक भाषा बनी।
Java आर्किटेक्चर तीन घटकों पर आधारित है: JDK (Java Development Kit) — डेवलपर टूल्स का सेट, JRE (Java Runtime Environment) — रनटाइम वातावरण, और JVM (Java Virtual Machine) — वर्चुअल मशीन। Android अपना स्वयं का JVM कार्यान्वयन — Android Runtime (ART) उपयोग करता है, जिसने संस्करण 5.0 (Lollipop) में Dalvik को बदल दिया। ART DEX बाइटकोड निष्पादित करता है, जो dx/d8 उपयोगिता के माध्यम से Java बाइटकोड से कंपाइल किया जाता है।
Java की एक प्रमुख विशेषता Garbage Collector (GC) के माध्यम से स्वचालित मेमोरी प्रबंधन है। डेवलपर को स्पष्ट रूप से मेमोरी मुक्त करने की आवश्यकता नहीं है — GC अप्रयुक्त ऑब्जेक्ट्स को ट्रैक करता है और उन्हें हटाता है। Android ART में, Concurrent Mark Sweep (CMS) और Generational GC का उपयोग किया जाता है, जो मोबाइल उपकरणों के सीमित संसाधनों के लिए अनुकूलित हैं। यह डेवलपर पर बोझ कम करता है, लेकिन UI थ्रेड पर कचरा संग्रह के दौरान "लैग" पैदा कर सकता है।
Android Java API का एक उपसमूह समर्थन करता है जो OS के प्रत्येक नए संस्करण के साथ विस्तारित होता है। Android 12 (API 31) ने Java 11 के लिए समर्थन जोड़ा, जिसमें वेरिएबल कैप्चर के साथ लैम्ब्डा, JPMS मॉड्यूल सिस्टम और java.net.http HTTP क्लाइंट शामिल हैं। Android 14 (API 34) ने D8/R8 डिसगरिंग के माध्यम से Java 17 के लिए प्रयोगात्मक समर्थन पेश किया — कुछ सुविधाएं (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 फ़ाइलों (JVM बाइटकोड) में कंपाइल करता है, फिर d8 उन्हें .dex फ़ाइलों (Dalvik Executable) में बदलता है, जो संसाधनों और AndroidManifest.xml के साथ APK में पैक की जाती हैं।
Gradle Android प्रोजेक्ट बिल्ड सिस्टम है। build.gradle (Groovy) या build.gradle.kts (Kotlin DSL) फ़ाइल निर्भरताओं, SDK संस्करणों, फ्लेवर और हस्ताक्षरों का वर्णन करती है। Android Gradle Plugin (AGP) संस्करण 8.x डिसगर को स्वचालित करता है — आधुनिक Java सुविधाओं का पिछड़ा-संगत कोड में अनुवाद। उदाहरण के लिए, java.time.LocalDate डेवलपर के स्रोत में बदलाव के बिना API 21+ संगत कोड में बदल जाता है।
// Java में सरल Android Activity
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("Hello from Java!");
}
// बटन क्लिक को संभालने की विधि
public void onButtonClick(View view) {
TextView tv = findViewById(R.id.textView);
tv.setText("Button clicked");
}
}MainActivity क्लास AppCompatActivity को बढ़ाती है — पिछड़ी संगतता के लिए AndroidX से एक आधार क्लास। onCreate मेथड Activity बनने पर कॉल की जाती है, इसमें setContentView के माध्यम से लेआउट सेट किया जाता है। findViewById Java वेरिएबल को XML लेआउट के एक तत्व से जोड़ता है। onButtonClick मेथड XML में android:onClick विशेषता के माध्यम से बटन से बंधा होता है।
Java में Activity जीवनचक्र कॉलबैक का एक क्रम है: 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 फ़ाइल में एक public क्लास होती है जिसका नाम फ़ाइल नाम से मेल खाता है। Java क्लासेज़ के बाहर फंक्शन का समर्थन नहीं करता — सब कुछ एक मेथड है। प्रवेश बिंदु कंसोल एप्लिकेशन के लिए स्थैतिक मेथड public static void main(String[] args) या मोबाइल के लिए Android Activity जीवनचक्र मेथड्स है।
Java प्रकारों को प्रिमिटिव (int, double, boolean, char, byte, short, long, float) और संदर्भ प्रकार (क्लासेज़, इंटरफ़ेस, ऐरे, enum) में विभाजित करता है। प्रिमिटिव स्टैक पर संग्रहीत होते हैं और मान द्वारा पास किए जाते हैं। ऑब्जेक्ट हीप में होते हैं, संदर्भ द्वारा पास किए जाते हैं। ऑटोबॉक्सिंग स्वचालित रूप से प्रिमिटिव को रैपर ऑब्जेक्ट (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<>();
// जेनेरिक्स के साथ विधि
public <T> T getFirst(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
// मानों के निश्चित सेट के लिए Enum
public enum Status {
PENDING, LOADING, SUCCESS, ERROR
}
}जेनेरिक्स List<T> संग्रह के लिए प्रकार सुरक्षा प्रदान करते हैं। getFirst मेथड किसी भी प्रकार का तत्व लौटाता है — विशिष्ट प्रकार कॉल साइट पर निर्धारित होता है। Enum Status स्थिरांक के एक निश्चित सेट के साथ एक क्लास में कंपाइल होता है, प्रत्येक इंस्टेंस एक सिंगलटन है। Android में, मेमोरी खपत के कारण enum का उपयोग कम बार किया जाता है: ProGuard/R8 जहाँ संभव हो enum को int स्थिरांक में अनुकूलित करता है।
Java और Kotlin की तुलना Android विकास के लिए 2019 से मुख्य विषयों में से एक रही है, जब Google ने Kotlin को प्राथमिकता भाषा घोषित किया। Kotlin Java के साथ पूरी तरह से संगत है — दोनों JVM बाइटकोड में कंपाइल होते हैं, एक-दूसरे को कॉल कर सकते हैं और समान लाइब्रेरी का उपयोग कर सकते हैं। हालांकि, कोड लिखने के दृष्टिकोण नाटकीय रूप से भिन्न हैं।
Kotlin Java की वर्बोसिटी को समाप्त करता है: data class गेटर्स, सेटर्स, equals, hashCode, toString और copy के साथ Java क्लास की 50+ पंक्तियों को बदल देता है। नल सुरक्षा Kotlin के प्रकार सिस्टम में बनाई गई है — NullPointerException व्यावहारिक रूप से असंभव है। एक्सटेंशन फंक्शन बिना इनहेरिटेंस के मौजूदा क्लासेज़ में मेथड जोड़ने की अनुमति देते हैं। Smart Casts जाँच के बाद स्वचालित रूप से प्रकार बदलते हैं।
| पहलू | Java | Kotlin |
|---|---|---|
| नल सुरक्षा | @Nullable / @NonNull एनोटेशन | String? / String — निर्मित |
| Data class | Lombok के साथ 50+ पंक्तियाँ | data class User(val name: String) |
| एक्सटेंशन | स्थैतिक उपयोगिता क्लासेज़ | fun String.isEmail(): Boolean |
| Coroutines | AsyncTask / ExecutorService | suspend + Structured Concurrency |
| लैम्ब्डा | FunctionalInterface + ::method | डिफ़ॉल्ट रूप से लैम्ब्डा |
| DI एनोटेशन | @Inject, @Module, @Provides | समान, लेकिन कम कोड |
प्रदर्शन के मामले में, Java और Kotlin समान हैं — दोनों JVM बाइटकोड में कंपाइल होते हैं, जिसे Android ART समान रूप से निष्पादित करता है। अंतर APK आकार में है: Kotlin kotlin-stdlib लाइब्रेरी के लिए ~200-400 KB जोड़ता है। Java प्रोजेक्ट्स में अतिरिक्त रनटाइम की अनुपस्थिति के कारण APK का आकार छोटा होता है, लेकिन Java Stream API और Optional का उपयोग करते समय, डिसगरिंग के कारण APK का आकार बढ़ सकता है।
Android के लिए Java डेवलपर टूल्स में Android Studio, Gradle, प्रोफ़ाइलर और एमुलेटर शामिल हैं। Android Studio आधिकारिक IDE है, जो IntelliJ IDEA Community पर आधारित है, इसमें Java ऑटोकम्पलीट के साथ संपादक, कोड विश्लेषक (lint), रीफैक्टरिंग और विज़ुअल लेआउट एडिटर (Layout Editor) शामिल है।
Android Gradle Plugin (AGP) संस्करण 8.x बिल्ड का प्रबंधन करता है: क्लासेज़ में Java कंपाइलेशन, डिसगरिंग, ProGuard/R8 मिनिफिकेशन, APK/AAB में पैकेजिंग। R8 एक अपडेटेड डिसगरिंग और ऑबफस्केटर है, जो ProGuard की जगह लेता है। बिल्ड वेरिएंट (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 रनटाइम व्यवहार है।
Android में Java की सीमाओं ने Google के Kotlin में संक्रमण का कारण बना। NullPointerException Java Android एप्लिकेशन में सबसे आम अपवाद है, क्योंकि प्रकार सिस्टम nullable और non-null संदर्भों के बीच अंतर नहीं करता है। Google androidx.annotation पैकेज से @Nullable और @NonNull एनोटेशन की सिफारिश करता है, लेकिन कंपाइलर उनकी जाँच नहीं करता — केवल lint करता है।
Coroutines की अनुपस्थिति एक और सीमा है: Java में अतुल्यकालिक संचालन के लिए कॉलबैक, AsyncTask (API 30 से पदावनत), ExecutorService या RxJava की आवश्यकता होती है। इससे कॉलबैक हेल और स्क्रीन घुमाने पर मेमोरी लीक होती है। Structured Concurrency के साथ Kotlin coroutines इस समस्या को भाषा स्तर पर हल करते हैं: मैन्युअल प्रबंधन के बिना Activity नष्ट होने पर coroutine रद्द हो जाता है।
Java में बॉयलरप्लेट कोड equals/hashCode, Parcelable कार्यान्वयन और RecyclerView के लिए ViewHolder को मैन्युअल रूप से लिखने पर त्रुटियों का स्रोत है। Android KTX लाइब्रेरी और Jetpack Compose Kotlin की ओर उन्मुख हैं। नए Android API (Room, Navigation, Compose) डिफ़ॉल्ट रूप से Kotlin में उदाहरण प्रकाशित करते हैं, हालाँकि Java संस्करण मौजूद हैं।
अक्सर पूछे जाने वाले प्रश्न
Java Sun Microsystems (1995) की एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है, जो JVM वर्चुअल मशीन पर चलती है। 2019 तक Android SDK की प्राथमिक भाषा थी। इसका उपयोग मोबाइल विकास में लीगेसी प्रोजेक्ट्स, सर्वर-साइड (Spring) और एंटरप्राइज़ एप्लिकेशन के लिए किया जाता है। यह सख्त टाइपिंग, स्वचालित कचरा संग्रह और बाइटकोड की क्रॉस-प्लेटफ़ॉर्म क्षमता द्वारा विशेषता है।
Google ने 2019 में Kotlin को Android के लिए प्राथमिकता भाषा घोषित किया। नई AndroidX लाइब्रेरी, Jetpack Compose, आर्किटेक्चर अनुशंसाएं और दस्तावेज़ डिफ़ॉल्ट रूप से Kotlin में दिए जाते हैं। Java पूरी तरह से समर्थित रहता है, लेकिन API Kotlin-first दृष्टिकोण से डिज़ाइन किए जाते हैं। Java प्रोजेक्ट्स को अधिक बॉयलरप्लेट कोड की आवश्यकता होती है और उन्हें नई भाषा सुविधाएं पहले नहीं मिलती हैं।
Android पूरी तरह से Java 8 का समर्थन करता है, Java 11 आंशिक रूप से Android 12+ से, और Java 17 प्रयोगात्मक रूप से D8 डिसगरिंग के माध्यम से। Android Gradle Plugin (AGP) 8.x आधुनिक बाइटकोड को desugar के माध्यम से पुराने API के लिए संगत कोड में अनुवादित करता है। डेवलपर Java 11+ में लिख सकता है, लैम्ब्डा, Optional और DateTime API का उपयोग कर सकता है, लेकिन records और sealed classes केवल D8 के माध्यम से उपलब्ध हैं।
Kotlin को कम कोड की आवश्यकता होती है: data class Java बॉयलरप्लेट की दर्जनों पंक्तियों को बदल देता है, नल सुरक्षा प्रकारों में निर्मित है, coroutines अतुल्यकालिकता को सरल बनाते हैं। Java शुरुआती लोगों के लिए सरल सिंटैक्स, एक सिद्ध लाइब्रेरी पारिस्थितिकी तंत्र और स्थिर टूलिंग प्रदान करता है। रनटाइम प्रदर्शन समान है — दोनों Android ART द्वारा निष्पादित JVM बाइटकोड में कंपाइल होते हैं।
Android Studio Java और Kotlin के समर्थन के साथ Android विकास के लिए मानक IDE है। इसमें एमुलेटर, प्रोफ़ाइलर (CPU, memory, network), Layout Inspector, APK Analyzer शामिल हैं। IntelliJ IDEA सर्वर Java के लिए उपयुक्त है। Eclipse ADT पदावनत है और Google द्वारा समर्थित नहीं है। Android Studio निर्मित कन्वर्टर के माध्यम से Java कोड को Kotlin में माइग्रेट करने के लिए उपकरण भी प्रदान करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें