Java Programming Comprehensive Cheatsheet
Comprehensive Java programming cheatsheet with 14 topics: basic syntax, data types, operators, control flow, arrays, strings, OOP, exceptions, collections, I/O, multithreading, lambda/streams, utilities & best practices. Quick reference for beginners to advanced developers. Includes code examples, version highlights, and practical tips.
- Basic Syntax
- Data Types & Variables
- Operators
- Control Flow
- Arrays
- Strings
- Object-Oriented Programming (OOP)
- Exception Handling
- Collections Framework
- Input & Output (I/O)
- Multithreading
- Lambda & Streams (Java 8+)
- Common Utilities
- Best Practices & Tips
// Single-line comment
/*
Multi-line comment
*/
// Main method (entry point)
public static void main(String[] args) {
System.out.println("Hello, World!");
}
// Naming conventions
// Classes: PascalCase (MyClass)
// Methods/variables: camelCase (myMethod)
// Constants: UPPER_SNAKE_CASE (MAX_SIZE)
// Packages: lowercase (com.example.myapp)
2. Data Types & Variables
| Type |
Size |
Range/Example |
| byte |
1 byte |
-128 to 127 |
| short |
2 bytes |
-32,768 to 32,767 |
| int |
4 bytes |
-2³¹ to 2³¹-1 |
| long |
8 bytes |
-2⁶³ to 2⁶³-1 (suffix L) |
| float |
4 bytes |
~±3.4e38 (suffix f) |
| double |
8 bytes |
~±1.8e308 |
| char |
2 bytes |
Unicode (0-65,535) |
| boolean |
1 bit |
true / false |
// Strings, arrays, classes, interfaces, enums
String name = "Java";
int[] numbers = {1, 2, 3};
int x = 10;
double pi = 3.14;
boolean isReady = true;
char grade = 'A';
long bigNum = 100000L;
float precise = 5.75f;
// Type inference (Java 10+)
var message = "Inferred type"; // String
var count = 42; // int
&& || ! & | ^ (short-circuit: &&, ||)
= += -= *= /= %= &= |= ^= <<= >>=
condition ? exprIfTrue : exprIfFalse
int max = (a > b) ? a : b;
if (obj instanceof String) { ... }
// Pattern matching (Java 16+)
if (obj instanceof String s) { System.out.println(s.length()); }
if (condition) {
// code
} else if (otherCondition) {
// code
} else {
// code
}
Switch (traditional & enhanced)
// Traditional
switch (value) {
case 1:
// code
break;
case 2:
// code
break;
default:
// code
}
// Enhanced (Java 14+)
switch (day) {
case MONDAY, FRIDAY -> System.out.println("Work");
case SATURDAY, SUNDAY -> System.out.println("Weekend");
default -> System.out.println("Midweek");
}
// Switch as expression
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> 8;
};
// for loop
for (int i = 0; i < 10; i++) { }
// enhanced for (for-each)
for (String item : collection) { }
// while
while (condition) { }
// do-while
do { } while (condition);
// break, continue
break; // exit loop
continue; // skip to next iteration
Declaration & Initialization
// Declaration
int[] arr;
int arr[]; // valid but not preferred
// Initialization
arr = new int[5];
int[] arr2 = {1, 2, 3, 4, 5};
int[] arr3 = new int[]{10, 20, 30};
// Multi-dimensional
int[][] matrix = new int[3][4];
int[][] matrix2 = {{1,2}, {3,4}};
int[] nums = {5, 2, 8, 1};
int length = nums.length; // 4
Arrays.sort(nums); // [1,2,5,8]
Arrays.fill(nums, 0); // fill with zeros
Arrays.toString(nums); // "[1, 2, 5, 8]"
Arrays.equals(arr1, arr2); // compare
int[] copy = Arrays.copyOf(nums, nums.length);
int index = Arrays.binarySearch(nums, 5); // requires sorted
String s1 = "Hello";
String s2 = new String("World");
// Common methods
s1.length(); // 5
s1.charAt(1); // 'e'
s1.substring(1, 4); // "ell"
s1.indexOf('l'); // 2
s1.lastIndexOf('l'); // 3
s1.equals("Hello"); // true
s1.equalsIgnoreCase("hello"); // true
s1.compareTo("Hi"); // negative
s1.contains("ell"); // true
s1.replace('l', 'p'); // "Heppo"
s1.toUpperCase(); // "HELLO"
s1.toLowerCase(); // "hello"
s1.trim(); // remove whitespace
"a,b,c".split(","); // ["a","b","c"]
String.join("-", "a","b"); // "a-b"
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
sb.insert(5, ","); // "Hello, World"
sb.reverse(); // "dlroW ,olleH"
sb.toString(); // convert to String
7. Object-Oriented Programming (OOP)
public class Person {
// Fields (instance variables)
private String name;
private int age;
// Static (class) variable
public static int population = 0;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
population++;
}
// Methods
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// Static method
public static int getPopulation() { return population; }
// Override toString
@Override
public String toString() {
return name + " (" + age + ")";
}
}
public class Student extends Person {
private String studentId;
public Student(String name, int age, String studentId) {
super(name, age); // call parent constructor
this.studentId = studentId;
}
@Override
public String toString() {
return super.toString() + " - " + studentId;
}
}
Abstract Classes & Interfaces
// Abstract class
abstract class Animal {
abstract void makeSound(); // no body
void breathe() { System.out.println("Breathing"); }
}
// Interface (Java 8+)
interface Flyable {
void fly();
// Default method
default void land() {
System.out.println("Landing...");
}
// Static method
static void glide() {
System.out.println("Gliding");
}
}
// Multiple inheritance with interfaces
class Bird extends Animal implements Flyable {
@Override
void makeSound() { System.out.println("Chirp"); }
@Override
public void fly() { System.out.println("Flying"); }
}
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
// Enum with fields and methods
enum Status {
SUCCESS(200), ERROR(500);
private final int code;
Status(int code) { this.code = code; }
public int getCode() { return code; }
}
| Modifier |
Class |
Package |
Subclass |
World |
| private |
✅ |
❌ |
❌ |
❌ |
| default |
✅ |
✅ |
❌ |
❌ |
| protected |
✅ |
✅ |
✅ |
❌ |
| public |
✅ |
✅ |
✅ |
✅ |
this // reference to current object
super // reference to parent
final // constant, prevent overriding/inheritance
static // belongs to class, not instance
abstract // must be implemented
synchronized // thread-safe
volatile // variable stored in main memory
transient // skip during serialization
Throwable
├── Error (unrecoverable, don't catch)
└── Exception
├── RuntimeException (unchecked)
└── Checked Exception (must handle)
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero: " + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("Always executes");
}
Try-with-Resources (Java 7+)
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line = br.readLine();
} catch (IOException e) {
e.printStackTrace();
} // br automatically closed
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
// Throwing
throw new MyException("Something went wrong");
| Interface |
Implementation |
Order |
Sorted |
Duplicates |
Null |
| List |
ArrayList, LinkedList |
✅ |
❌ |
✅ |
✅ |
| Set |
HashSet, LinkedHashSet |
❌/✅ |
❌ |
❌ |
✅(1) |
| Set |
TreeSet |
✅ |
✅ |
❌ |
❌ |
| Queue |
PriorityQueue, ArrayDeque |
✅ |
❌ |
✅ |
❌ |
| Map |
HashMap, LinkedHashMap |
❌/✅ |
❌ |
keys ❌ |
✅(1) |
| Map |
TreeMap |
✅ |
✅ |
keys ❌ |
❌ |
import java.util.*;
List<String> list = new ArrayList<>();
list.add("Apple");
list.add(1, "Banana");
list.get(0);
list.set(1, "Orange");
list.remove(0);
list.size();
list.contains("Apple");
list.isEmpty();
Collections.sort(list);
// Iteration
for (String item : list) { }
list.forEach(item -> System.out.println(item));
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
int age = map.get("Alice");
map.getOrDefault("Charlie", 0);
map.containsKey("Bob");
map.remove("Alice");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Useful Collections Methods
Collections.sort(list);
Collections.reverse(list);
Collections.shuffle(list);
Collections.max(collection);
Collections.min(collection);
Collections.binarySearch(list, key); // sorted list required
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String text = sc.nextLine(); // read entire line
int num = sc.nextInt(); // read int
double d = sc.nextDouble();
boolean b = sc.nextBoolean();
sc.close();
// Console (for passwords)
Console console = System.console();
char[] password = console.readPassword("Enter password: ");
// Using Files (Java 7+)
List<String> lines = Files.readAllLines(Paths.get("file.txt"));
String content = Files.readString(Paths.get("file.txt"));
// BufferedReader
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
// Using Files
Files.writeString(Paths.get("output.txt"), "Hello World");
Files.write(Paths.get("output.txt"), lines); // List<String>
// BufferedWriter
try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
bw.write("Hello");
bw.newLine();
bw.write("World");
}
// Extend Thread
class MyThread extends Thread {
public void run() {
System.out.println("Thread running");
}
}
MyThread t1 = new MyThread();
t1.start();
// Implement Runnable
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable running");
}
}
Thread t2 = new Thread(new MyRunnable());
t2.start();
// Lambda
Thread t3 = new Thread(() -> System.out.println("Lambda thread"));
t3.start();
Thread.sleep(1000); // milliseconds
thread.join(); // wait for thread to finish
thread.interrupt(); // interrupt thread
Thread.currentThread(); // get current thread
// Synchronized method
public synchronized void increment() {
count++;
}
// Synchronized block
synchronized(this) {
count++;
}
// Locks (more flexible)
Lock lock = new ReentrantLock();
lock.lock();
try {
// critical section
} finally {
lock.unlock();
}
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> System.out.println("Task"));
Future<String> future = executor.submit(() -> "Result");
String result = future.get(); // blocks
executor.shutdown();
12. Lambda & Streams (Java 8+)
// Syntax: (parameters) -> expression or { statements }
// Functional interfaces
Runnable r = () -> System.out.println("Hello");
Comparator<String> comp = (a, b) -> a.length() - b.length();
Predicate<Integer> isEven = n -> n % 2 == 0;
Function<String, Integer> length = s -> s.length();
Consumer<String> printer = s -> System.out.println(s);
Supplier<Double> random = () -> Math.random();
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// Intermediate ops: filter, map, sorted, distinct, limit, skip
// Terminal ops: forEach, collect, reduce, count, anyMatch, findFirst
// Chaining
names.stream()
.filter(name -> name.length() > 3)
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
// Collect to list
List<String> longNames = names.stream()
.filter(n -> n.length() > 3)
.collect(Collectors.toList());
// Primitive streams
IntStream.range(1, 10).sum(); // 45
IntStream.rangeClosed(1, 10).average();
// Reduce
int sum = numbers.stream().reduce(0, Integer::sum);
Optional<String> reduced = strings.stream().reduce((a,b) -> a + "," + b);
// Types: static, instance, constructor
Math::max // static method
String::length // instance method of arbitrary object
System.out::println // instance method of specific object
ArrayList::new // constructor
import java.time.*;
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dt = LocalDateTime.now();
// Specific values
LocalDate.of(2024, Month.JANUARY, 1);
LocalTime.of(14, 30);
// Formatting
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
String formatted = dt.format(formatter);
// Parsing
LocalDate parsed = LocalDate.parse("2024-01-01");
// Calculations
LocalDate tomorrow = date.plusDays(1);
LocalDate lastMonth = date.minusMonths(1);
Period period = date.until(LocalDate.of(2024, 12, 31));
Math.PI, Math.E
Math.abs(-5); // 5
Math.max(3, 7); // 7
Math.min(3, 7); // 3
Math.pow(2, 3); // 8.0
Math.sqrt(16); // 4.0
Math.random(); // 0.0 to 1.0
Math.round(3.6); // 4
Math.ceil(3.1); // 4.0
Math.floor(3.9); // 3.0
Random rand = new Random();
rand.nextInt(100); // 0-99
rand.nextDouble(); // 0.0-1.0
rand.nextBoolean();
// Secure random
SecureRandom secure = new SecureRandom();
14. Best Practices & Tips
- Packages: com.company.project.module
- Classes: PascalCase, nouns (Customer, OrderService)
- Methods: camelCase, verbs (calculateTotal, getName)
- Constants: UPPER_SNAKE_CASE (MAX_RETRY_COUNT)
// Braces: K&R style (opening brace same line)
if (condition) {
// code
}
// Indentation: 4 spaces
// One statement per line
// No magic numbers: use constants
private static final int MAX_USERS = 100;
- Use StringBuilder for repeated concatenation
- Prefer ArrayList over LinkedList for random access
- Use primitive streams (IntStream) for better performance
- Initialize collections with capacity when known
- Use try-with-resources for auto-closing
// Equality: use equals() for objects, == for primitives
String s1 = new String("Hi");
String s2 = new String("Hi");
s1 == s2; // false (different objects)
s1.equals(s2); // true
// Null checks
if (obj != null && obj.method()) { } // order matters
// Integer caching (-128 to 127)
Integer a = 127, b = 127;
a == b; // true (cached)
Integer c = 128, d = 128;
c == d; // false
Java Versions Quick Reference
| Version |
Key Features |
| Java 8 |
Lambdas, Streams, Optional, Date/Time API |
| Java 9 |
Modules, private interface methods |
| Java 10 |
var (local variable type inference) |
| Java 11 |
HTTP Client, local-variable syntax for lambdas |
| Java 14 |
Records, pattern matching for instanceof |
| Java 16 |
record classes |
| Java 17 |
Sealed classes, pattern matching switch (preview) |
| Java 21 |
Virtual threads, sequenced collections |
This cheatsheet covers the most essential Java concepts. For detailed documentation, visit docs.oracle.com.