Java was the original language for Android development. The entire Android SDK is written in Java, and millions of existing apps use it. While Kotlin is now preferred for new projects, understanding Java remains essential for maintaining legacy code and reading Android documentation.
Java Source Code (.java)
↓ compile
Bytecode (.class)
↓ run on
Android Runtime (ART)
↓
Android App
Aspect
Java on Android
Platform
Runs on Android Runtime (ART), not JVM
UI
Activities, Fragments, XML layouts
Interop
Java and Kotlin work together in same project
Legacy
Many libraries and tutorials still use Java
1Java Basics
Java is a statically typed, object-oriented language. Every Android Activity, Service, and Adapter is ultimately a Java (or Kotlin) class with variables, methods, and control flow.
Hello World and program structure
Java — Main.javapublic class Main {
public static void main(String[] args) {
System.out.println("Hello, Android!");
}
}
Variables and data types
Java — Variables// Primitives
int count = 0;
double price = 99.99;
boolean isActive = true;
char grade = 'A';
// Reference types
String name = "Nikhil";
Integer boxedCount = 42; // wrapper class
// Constants
final int MAX_RETRIES = 3;
final String BASE_URL = "https://api.example.com/";
Control flow
Java — if, switch, loops// if-else
if (score >= 50) {
System.out.println("Pass");
} else {
System.out.println("Fail");
}
// switch
switch (networkType) {
case "WIFI":
showMessage("Wi-Fi connected");
break;
case "MOBILE":
showMessage("Mobile data");
break;
default:
showMessage("No connection");
}
// for loop
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
// enhanced for (for-each)
for (String item : items) {
System.out.println(item);
}
Arrays and ArrayList
Java — Collections basics// Fixed-size array
String[] fruits = {"Apple", "Banana", "Mango"};
// Dynamic list — common in Android adapters
ArrayList<String> tasks = new ArrayList<>();
tasks.add("Learn Java");
tasks.add("Build App");
tasks.remove(0);
2OOP Concepts
Object-Oriented Programming (OOP) organizes code around objects that combine data (fields) and behavior (methods). Android is built entirely on OOP — Activities, Views, Adapters, and Services are all classes.
Four pillars of OOP
Pillar
Meaning
Android Example
Encapsulation
Hide internal data, expose via methods
Private fields + public getters/setters
Abstraction
Show essential features, hide complexity
RecyclerView.Adapter abstract methods
Inheritance
Reuse code from parent class
MainActivity extends AppCompatActivity
Polymorphism
Same interface, different behavior
Override onClick() in different listeners
Encapsulation example
Java — Encapsulationpublic class BankAccount {
private double balance; // hidden from outside
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public boolean withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
return true;
}
return false;
}
}
A class is a blueprint; an object is an instance of that class. In Android, you create objects for users, tasks, adapters, and every screen component.
Class with constructor and methods
Java — User.javapublic class User {
private int id;
private String name;
private String email;
// Constructor
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters and setters
public int getId() { return id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public String getDisplayName() {
return name.toUpperCase();
}
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "'}";
}
}
Creating and using objects
Java — Instantiate objectsUser user = new User(1, "Nikhil", "nikhil@example.com");
System.out.println(user.getDisplayName());
List<User> users = new ArrayList<>();
users.add(new User(1, "Alice", "alice@example.com"));
users.add(new User(2, "Bob", "bob@example.com"));
Static members
Java — Static fields and methodspublic class ApiConfig {
public static final String BASE_URL = "https://api.example.com/";
public static final int TIMEOUT = 30;
public static boolean isValidUrl(String url) {
return url != null && url.startsWith("http");
}
}
// Usage — no object needed
String url = ApiConfig.BASE_URL;
boolean valid = ApiConfig.isValidUrl(url);
Access modifiers
Modifier
Class
Package
Subclass
World
public
✓
✓
✓
✓
protected
✓
✓
✓
✗
default
✓
✓
✗
✗
private
✓
✗
✗
✗
4Inheritance
Inheritance lets a class inherit fields and methods from a parent class. Android relies heavily on inheritance — every Activity extends AppCompatActivity, every adapter extends RecyclerView.Adapter.
extends keyword
Java — Class inheritancepublic class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public String speak() {
return "...";
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name); // call parent constructor
}
@Override
public String speak() {
return "Woof!";
}
}
Java — Custom exception classpublic class ApiException extends Exception {
private final int statusCode;
public ApiException(String message, int statusCode) {
super(message);
this.statusCode = statusCode;
}
public int getStatusCode() {
return statusCode;
}
}
// Throw and catch
public User getUser(int id) throws ApiException {
if (id <= 0) {
throw new ApiException("Invalid user ID", 400);
}
// fetch user...
return user;
}
6Java in Android
Java integrates directly with the Android SDK. Activities, Fragments, RecyclerView adapters, AsyncTask (legacy), and Intent handling are commonly written in Java — especially in older codebases.