Access Modifiers और Packages
public: कहीं से भी access हो सकता है। private: सिर्फ़ उसी class के अंदर। protected: same package + subclasses में। default (कुछ ना लिखो): सिर्फ़ same package में।
Package related classes का एक folder/group है — जैसे java.util में List, Map जैसे collection classes होते हैं। अपना package बनाने के लिए "package com.code10x;" लिखते हैं।
package com.code10x;
public class Robot {
private int battery;
protected void charge() { battery = 100; }
}Java mein 4 access levels hain, aur inka effect depend karta hai ki accessing code kaha se hai — same class, same package, subclass (chahe alag package mein ho), ya poori duniya (koi bhi jagah).
| Modifier | Same Class | Same Package | Subclass (diff package) | World |
|---|---|---|---|---|
| public | ✅ | ✅ | ✅ | ✅ |
| protected | ✅ | ✅ | ✅ | ❌ |
| default (kuch na likho) | ✅ | ✅ | ❌ | ❌ |
| private | ✅ | ❌ | ❌ | ❌ |
Har .java file top par "package com.code10x.model;" likh sakti hai — folder structure package naam se match karna chahiye (com/code10x/model/ folder mein file honi chahiye). Doosri jagah use karne ke liye "import com.code10x.model.Student;" likhte hain, ya poore package ke liye import com.code10x.model.*;
java.lang package (String, Integer, System, etc.) automatically har file mein import hota hai, explicit import ki zaroorat nahi.
import static se static members bina class-prefix ke directly use kar sakte ho — jaise import static java.lang.Math.*; ke baad seedha sqrt(25) likh sakte ho, Math.sqrt(25) ki jagah. Zyada use karne se code confusing ho sakta hai (pata nahi chalta method kaha se aaya) — isliye sparingly use karo, mainly test frameworks (JUnit ke assertEquals) mein common hai.
Classpath JVM ko batata hai kaha dhoonde compiled .class files aur libraries. Modern build tools (Maven, Gradle) automatically classpath manage kar dete hain (dependencies download karke sahi jagah rakhte hain), lekin samajhna zaroori hai ki JVM runtime par classes kaise dhoondhti hai — agar "ClassNotFoundException" aaye, aksar classpath issue hoti hai.