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 2008 میں Google کے جاری کردہ 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 اسکرین گھمانے، پس منظر میں جانے اور کال وصول کرنے پر ان طریقوں کو کال کرتا ہے۔
// State مینجمنٹ کے ساتھ 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 مستقل میں بہتر بناتا ہے۔
Android ڈویلپمنٹ کے لیے Java اور Kotlin کا موازنہ 2019 سے اہم موضوعات میں سے ایک رہا ہے، جب Google نے Kotlin کو ترجیحی زبان قرار دیا۔ Kotlin Java کے ساتھ مکمل طور پر مطابقت رکھتی ہے — دونوں JVM بائٹ کوڈ میں کمپائل ہوتی ہیں، ایک دوسرے کو کال کر سکتی ہیں اور ایک ہی لائبریریاں استعمال کر سکتی ہیں۔ تاہم، کوڈ لکھنے کے طریقے ڈرامائی طور پر مختلف ہیں۔
Kotlin Java کی طوالت کو ختم کرتی ہے: data class گیٹرز، سیٹرز، equals، hashCode، toString اور copy کے ساتھ Java کلاس کی 50+ لائنوں کی جگہ لے لیتی ہے۔ nul سیفٹی Kotlin کے قسم کے نظام میں شامل ہے — NullPointerException عملی طور پر ناممکن ہے۔ توسیعی فنکشنز وراثت کے بغیر موجودہ کلاسز میں طریقے شامل کرنے کی اجازت دیتے ہیں۔ سمارٹ کاسٹس جانچ کے بعد خود بخود اقسام تبدیل کر دیتے ہیں۔
| پہلو | Java | Kotlin |
|---|---|---|
| nul سیفٹی | @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 APIs (Room, Navigation, Compose) ڈیفالٹ کے طور پر Kotlin میں مثالیں شائع کرتے ہیں، اگرچہ Java ورژن موجود ہیں۔
اکثر پوچھے گئے سوالات
Java Sun Microsystems (1995) کی ایک آبجیکٹ اورینٹڈ پروگرامنگ زبان ہے، جو JVM ورچوئل مشین پر چلتی ہے۔ 2019 تک Android SDK کی بنیادی زبان تھی۔ یہ موبائل ڈویلپمنٹ میں لیگیسی پروجیکٹس، سرور سائڈ (Spring) اور انٹرپرائز ایپلی کیشنز کے لیے استعمال ہوتی ہے۔ سخت ٹائپنگ، خودکار کوڑا کرکٹ جمع کرنے اور بائٹ کوڈ کی کراس پلیٹ فارم صلاحیت سے خصوصیت رکھتی ہے۔
Google نے 2019 میں Kotlin کو Android کے لیے ترجیحی زبان قرار دیا۔ نئی AndroidX لائبریریاں، Jetpack Compose، فن تعمیر کی سفارشات اور دستاویزات ڈیفالٹ کے طور پر Kotlin میں فراہم کی جاتی ہیں۔ Java مکمل طور پر تعاون یافتہ رہتا ہے، لیکن APIs کو Kotlin-first طریقہ کار سے ڈیزائن کیا جاتا ہے۔ Java پروجیکٹس کو زیادہ بوائلر پلیٹ کوڈ کی ضرورت ہوتی ہے اور وہ نئی زبان کی خصوصیات سب سے پہلے حاصل نہیں کرتے۔
Android مکمل طور پر Java 8 کو سپورٹ کرتا ہے، Java 11 جزوی طور پر Android 12+ سے، اور Java 17 تجرباتی طور پر D8 ڈی شوگرنگ کے ذریعے۔ Android Gradle Plugin (AGP) 8.x جدید بائٹ کوڈ کو desugar کے ذریعے پرانے APIs کے لیے مطابقت پذیر کوڈ میں ترجمہ کرتا ہے۔ ڈویلپر Java 11+ میں لکھ سکتا ہے، لیمبڈا، Optional اور DateTime API استعمال کر سکتا ہے، لیکن records اور sealed classes صرف D8 کے ذریعے دستیاب ہیں۔
Kotlin کو کم کوڈ کی ضرورت ہوتی ہے: data class Java بوائلر پلیٹ کی درجنوں لائنوں کی جگہ لے لیتی ہے، nul سیفٹی اقسام میں شامل ہے، coroutines غیر مطابقت پذیری کو آسان بناتے ہیں۔ Java初学者 کے لیے آسان نحو، ایک ثابت شدہ لائبریری ایکو سسٹم اور مستحکم ٹولنگ فراہم کرتا ہے۔ رن ٹائم کارکردگی ایک جیسی ہے — دونوں Android ART کے ذریعے چلائے جانے والے JVM بائٹ کوڈ میں کمپائل ہوتی ہیں۔
Android Studio Java اور Kotlin کی سپورٹ کے ساتھ Android ڈویلپمنٹ کے لیے معیاری IDE ہے۔ اس میں ایمولیٹر، پروفائلر (CPU، میموری، نیٹ ورک)، Layout Inspector، APK Analyzer شامل ہیں۔ IntelliJ IDEA سرور سائڈ Java کے لیے موزوں ہے۔ Eclipse ADT متروک ہے اور Google کی طرف سے تعاون یافتہ نہیں ہے۔ Android Studio بلٹ ان کنورٹر کے ذریعے Java کوڈ کو Kotlin میں منتقل کرنے کے لیے ٹولز بھی فراہم کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں