Java - Classes & Objects
Classes & Objects
Class Anatomy
package com.example.model;
public class Person {
  // fields (state)
  private final String name;       // immutable once set
  private int age;                  // mutable
  // constructors
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  // methods (behavior)
  public String getName() { return name; }
  public int getAge() { return age; }
  public void birthday() { age++; }
  @Override public String toString() { return name + "(" + age + ")"; }
}
Creating Objects
Person p = new Person("Ada", 36);
p.birthday();
System.out.println(p); // Ada(37)
this, static, and instance members
- thisrefers to the current instance.
- staticfields/methods belong to the class, not instances.
class MathUtil {
  static int add(int a, int b) { return a + b; }
}
int s = MathUtil.add(2,3);
equals, hashCode, toString
Override consistently to establish value semantics and useful logging.
public final class Point {
  private final int x, y;
  public Point(int x, int y) { this.x = x; this.y = y; }
  @Override public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Point)) return false;
    Point p = (Point) o; return x == p.x && y == p.y;
  }
  @Override public int hashCode() { return java.util.Objects.hash(x,y); }
  @Override public String toString() { return "("+x+","+y+")"; }
}
Initialization Order
- Field initializers → instance init blocks → constructor body.
- Static fields/static init blocks run once when class is loaded.
Avoid heavy work in constructors; prefer factory methods if construction can fail or requires validation.
  Try it
- Add equals,hashCode, andtoStringto a simplePointclass and test behavior in aHashSet.
- Create a factory method Person.of(name, age)and discuss pros/cons vs constructor.