You're building a game with many enemies. Each enemy has health, position, and attack methods. Instead of managing separate variables, a class bundles the data and behavior into one reusable blueprint.

Your first class

Define a class with fields and methods.

example
FirstClass.java
Replay: real traced execution (multi-file project)
public class FirstClass {
    public static void main(String[] args) {
        System.out.println("=== Your First Class ===\n");

        // Create an object from the Dog class
        Dog myDog = new Dog();

        // Set field values
        String dogName = "Buddy";
        int dogAge = 3;
        myDog.name = dogName;
        myDog.breed = "Golden Retriever";
        myDog.age = dogAge;

        // Read field values
        System.out.println("Name: " + myDog.name);
        System.out.println("Breed: " + myDog.breed);
        System.out.println("Age: " + myDog.age);

        // Call methods
        System.out.println();
        myDog.bark();
        myDog.bark();
    }
}

// Class definition
class Dog {
    // Fields (instance variables)
    String name;
    String breed;
    int age;

    // Method
    void bark() {
        System.out.println(name + " says: Woof!");
    }
}
public class FirstClass {
    public static void main(String[] args) {
        System.out.println("=== Your First Class ===\n");

        // Create an object from the Dog class
        Dog myDog = new Dog();

        // Set field values
        String dogName = "Luna";
        int dogAge = 3;
        myDog.name = dogName;
        myDog.breed = "Golden Retriever";
        myDog.age = dogAge;

        // Read field values
        System.out.println("Name: " + myDog.name);
        System.out.println("Breed: " + myDog.breed);
        System.out.println("Age: " + myDog.age);

        // Call methods
        System.out.println();
        myDog.bark();
        myDog.bark();
    }
}

// Class definition
class Dog {
    // Fields (instance variables)
    String name;
    String breed;
    int age;

    // Method
    void bark() {
        System.out.println(name + " says: Woof!");
    }
}
public class FirstClass {
    public static void main(String[] args) {
        System.out.println("=== Your First Class ===\n");

        // Create an object from the Dog class
        Dog myDog = new Dog();

        // Set field values
        String dogName = "Rex";
        int dogAge = 3;
        myDog.name = dogName;
        myDog.breed = "Golden Retriever";
        myDog.age = dogAge;

        // Read field values
        System.out.println("Name: " + myDog.name);
        System.out.println("Breed: " + myDog.breed);
        System.out.println("Age: " + myDog.age);

        // Call methods
        System.out.println();
        myDog.bark();
        myDog.bark();
    }
}

// Class definition
class Dog {
    // Fields (instance variables)
    String name;
    String breed;
    int age;

    // Method
    void bark() {
        System.out.println(name + " says: Woof!");
    }
}
public class FirstClass {
    public static void main(String[] args) {
        System.out.println("=== Your First Class ===\n");

        // Create an object from the Dog class
        Dog myDog = new Dog();

        // Set field values
        String dogName = "Buddy";
        int dogAge = 1;
        myDog.name = dogName;
        myDog.breed = "Golden Retriever";
        myDog.age = dogAge;

        // Read field values
        System.out.println("Name: " + myDog.name);
        System.out.println("Breed: " + myDog.breed);
        System.out.println("Age: " + myDog.age);

        // Call methods
        System.out.println();
        myDog.bark();
        myDog.bark();
    }
}

// Class definition
class Dog {
    // Fields (instance variables)
    String name;
    String breed;
    int age;

    // Method
    void bark() {
        System.out.println(name + " says: Woof!");
    }
}
public class FirstClass {
    public static void main(String[] args) {
        System.out.println("=== Your First Class ===\n");

        // Create an object from the Dog class
        Dog myDog = new Dog();

        // Set field values
        String dogName = "Buddy";
        int dogAge = 7;
        myDog.name = dogName;
        myDog.breed = "Golden Retriever";
        myDog.age = dogAge;

        // Read field values
        System.out.println("Name: " + myDog.name);
        System.out.println("Breed: " + myDog.breed);
        System.out.println("Age: " + myDog.age);

        // Call methods
        System.out.println();
        myDog.bark();
        myDog.bark();
    }
}

// Class definition
class Dog {
    // Fields (instance variables)
    String name;
    String breed;
    int age;

    // Method
    void bark() {
        System.out.println(name + " says: Woof!");
    }
}
  1. myDog ← ⟨Dog A⟩, dogName ← Buddy, dogAge ← 3, myDog.name ← Buddy

    2public class FirstClass {3    public static void main(String[] args) {4        System.out.println("=== Your First Class ===\n");5        6        // Create an object from the Dog class  //?create7        Dog myDog→ ⟨Dog A⟩ = new Dog();8        9        // Set field values  //?fields10        String dogName→ Buddy = "Buddy";  //@dogName="Luna", "Rex"11        int dogAge→ 3 = 3;  //@dogAge=1, 712        myDog.name→ Buddy = dogNameBuddy;13        myDog.breed→ Golden Retriever = "Golden Retriever";14        myDog.age→ 3 = dogAge3;15        16        // Read field values17        System.out.println("Name: " + myDog.nameBuddy);18        System.out.println("Breed: " + myDog.breedGolden Retriever);19        System.out.println("Age: " + myDog.age3);20        21        // Call methods  //@var=_,!22        System.out.println();  //@var=_,!23        myDog.bark();  //@var=_,!24        myDog.bark();  //@var=_,!
    output=== Your First Class ===
    Name: Buddy
    Breed: Golden Retriever
    Age: 3
  2. void bark()

    pass 1 of 2
    22        System.out.println();  //@var=_,!23        myDog.bark();  //@var=_,!24        myDog.bark();  //@var=_,!25    }26}2728// Class definition  //?classdef29class Dog {30    // Fields (instance variables)  //?fieldsdef31    String name;32    String breed;33    int age;34    35    // Method  //@var=_,!36    void bark() {  //?method37        System.out.println(nameBuddy + " says: Woof!");  //@var=_,!38    }  //@var=_,!
    outputBuddy says: Woof!
  3. void bark()

    pass 2 of 2
    23        myDog.bark();  //@var=_,!24        myDog.bark();  //@var=_,!25    }26}2728// Class definition  //?classdef29class Dog {30    // Fields (instance variables)  //?fieldsdef31    String name;32    String breed;33    int age;34    35    // Method  //@var=_,!36    void bark() {  //?method37        System.out.println(nameBuddy + " says: Woof!");  //@var=_,!38    }  //@var=_,!
    outputBuddy says: Woof!
  1. myDog ← ⟨Dog A⟩, dogName ← Luna, dogAge ← 3, myDog.name ← Luna

    1public class FirstClass {2    public static void main(String[] args) {3        System.out.println("=== Your First Class ===\n");4        5        // Create an object from the Dog class6        Dog myDog→ ⟨Dog A⟩ = new Dog();7        8        // Set field values9        String dogName→ Luna = "Luna";10        int dogAge→ 3 = 3;11        myDog.name→ Luna = dogNameLuna;12        myDog.breed→ Golden Retriever = "Golden Retriever";13        myDog.age→ 3 = dogAge3;14        15        // Read field values16        System.out.println("Name: " + myDog.nameLuna);17        System.out.println("Breed: " + myDog.breedGolden Retriever);18        System.out.println("Age: " + myDog.age3);19        20        // Call methods21        System.out.println();22        myDog.bark();23        myDog.bark();
    output=== Your First Class ===
    Name: Luna
    Breed: Golden Retriever
    Age: 3
  2. void bark()

    pass 1 of 2
    21        System.out.println();22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameLuna + " says: Woof!");37    }
    outputLuna says: Woof!
  3. void bark()

    pass 2 of 2
    22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameLuna + " says: Woof!");37    }
    outputLuna says: Woof!
  1. myDog ← ⟨Dog A⟩, dogName ← Rex, dogAge ← 3, myDog.name ← Rex, myDog.breed ← Golden Retriever

    1public class FirstClass {2    public static void main(String[] args) {3        System.out.println("=== Your First Class ===\n");4        5        // Create an object from the Dog class6        Dog myDog→ ⟨Dog A⟩ = new Dog();7        8        // Set field values9        String dogName→ Rex = "Rex";10        int dogAge→ 3 = 3;11        myDog.name→ Rex = dogNameRex;12        myDog.breed→ Golden Retriever = "Golden Retriever";13        myDog.age→ 3 = dogAge3;14        15        // Read field values16        System.out.println("Name: " + myDog.nameRex);17        System.out.println("Breed: " + myDog.breedGolden Retriever);18        System.out.println("Age: " + myDog.age3);19        20        // Call methods21        System.out.println();22        myDog.bark();23        myDog.bark();
    output=== Your First Class ===
    Name: Rex
    Breed: Golden Retriever
    Age: 3
  2. void bark()

    pass 1 of 2
    21        System.out.println();22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameRex + " says: Woof!");37    }
    outputRex says: Woof!
  3. void bark()

    pass 2 of 2
    22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameRex + " says: Woof!");37    }
    outputRex says: Woof!
  1. myDog ← ⟨Dog A⟩, dogName ← Buddy, dogAge ← 1, myDog.name ← Buddy

    1public class FirstClass {2    public static void main(String[] args) {3        System.out.println("=== Your First Class ===\n");4        5        // Create an object from the Dog class6        Dog myDog→ ⟨Dog A⟩ = new Dog();7        8        // Set field values9        String dogName→ Buddy = "Buddy";10        int dogAge→ 1 = 1;11        myDog.name→ Buddy = dogNameBuddy;12        myDog.breed→ Golden Retriever = "Golden Retriever";13        myDog.age→ 1 = dogAge1;14        15        // Read field values16        System.out.println("Name: " + myDog.nameBuddy);17        System.out.println("Breed: " + myDog.breedGolden Retriever);18        System.out.println("Age: " + myDog.age1);19        20        // Call methods21        System.out.println();22        myDog.bark();23        myDog.bark();
    output=== Your First Class ===
    Name: Buddy
    Breed: Golden Retriever
    Age: 1
  2. void bark()

    pass 1 of 2
    21        System.out.println();22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameBuddy + " says: Woof!");37    }
    outputBuddy says: Woof!
  3. void bark()

    pass 2 of 2
    22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameBuddy + " says: Woof!");37    }
    outputBuddy says: Woof!
  1. myDog ← ⟨Dog A⟩, dogName ← Buddy, dogAge ← 7, myDog.name ← Buddy

    1public class FirstClass {2    public static void main(String[] args) {3        System.out.println("=== Your First Class ===\n");4        5        // Create an object from the Dog class6        Dog myDog→ ⟨Dog A⟩ = new Dog();7        8        // Set field values9        String dogName→ Buddy = "Buddy";10        int dogAge→ 7 = 7;11        myDog.name→ Buddy = dogNameBuddy;12        myDog.breed→ Golden Retriever = "Golden Retriever";13        myDog.age→ 7 = dogAge7;14        15        // Read field values16        System.out.println("Name: " + myDog.nameBuddy);17        System.out.println("Breed: " + myDog.breedGolden Retriever);18        System.out.println("Age: " + myDog.age7);19        20        // Call methods21        System.out.println();22        myDog.bark();23        myDog.bark();
    output=== Your First Class ===
    Name: Buddy
    Breed: Golden Retriever
    Age: 7
  2. void bark()

    pass 1 of 2
    21        System.out.println();22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameBuddy + " says: Woof!");37    }
    outputBuddy says: Woof!
  3. void bark()

    pass 2 of 2
    22        myDog.bark();23        myDog.bark();24    }25}2627// Class definition28class Dog {29    // Fields (instance variables)30    String name;31    String breed;32    int age;33    34    // Method35    void bark() {36        System.out.println(nameBuddy + " says: Woof!");37    }
    outputBuddy says: Woof!

A class has fields (data) and methods (behavior). Define once, create many objects.

class Blueprint for objects. Defines fields (data) and methods (behavior).

Create objects from a class

Instantiate objects using new.

CreateObjects.java
Replay: real traced execution (multi-file project)
public class CreateObjects {
    public static void main(String[] args) {
        System.out.println("=== Creating Multiple Objects ===\n");

        // Create first student
        Student alice = new Student();
        alice.name = "Alice";
        alice.grade = 85;

        // Create second student
        Student bob = new Student();
        bob.name = "Bob";
        bob.grade = 92;

        // Create third student
        Student charlie = new Student();
        charlie.name = "Charlie";
        charlie.grade = 78;

        // Display all students
        System.out.println("Student Records:");
        System.out.println("  " + alice.name + ": " + alice.grade);
        System.out.println("  " + bob.name + ": " + bob.grade);
        System.out.println("  " + charlie.name + ": " + charlie.grade);

        // Each is independent
        System.out.println("\nChanging Alice's grade...");
        alice.grade = 90;

        System.out.println("Alice: " + alice.grade);
        System.out.println("Bob: " + bob.grade);  // Unchanged!
        System.out.println("Charlie: " + charlie.grade);  // Unchanged!
    }
}

class Student {
    String name;
    int grade;
}
  1. alice ← ⟨Student A⟩, alice.name ← Alice, alice.grade ← 85, bob ← ⟨Student B⟩

    1public class CreateObjects {2    public static void main(String[] args) {3        System.out.println("=== Creating Multiple Objects ===\n");4        5        // Create first student  //?first6        Student alice→ ⟨Student A⟩ = new Student();7        alice.name→ Alice = "Alice";8        alice.grade→ 85 = 85;9        10        // Create second student  //?second11        Student bob→ ⟨Student B⟩ = new Student();12        bob.name→ Bob = "Bob";13        bob.grade→ 92 = 92;14        15        // Create third student16        Student charlie→ ⟨Student C⟩ = new Student();17        charlie.name→ Charlie = "Charlie";18        charlie.grade→ 78 = 78;19        20        // Display all students  //?display21        System.out.println("Student Records:");22        System.out.println("  " + alice.nameAlice + ": " + alice.grade85);23        System.out.println("  " + bob.nameBob + ": " + bob.grade92);24        System.out.println("  " + charlie.nameCharlie + ": " + charlie.grade78);25        26        // Each is independent  //?independent27        System.out.println("\nChanging Alice's grade...");28        alice.grade→ 90 = 90;29        30        System.out.println("Alice: " + alice.grade90);31        System.out.println("Bob: " + bob.grade92);  // Unchanged!32        System.out.println("Charlie: " + charlie.grade78);  // Unchanged!33    }
    output=== Creating Multiple Objects ===
    Student Records:
      Alice: 85
      Bob: 92
      Charlie: 78
    
    Changing Alice's grade...
    Alice: 90
    Bob: 92
    Charlie: 78

new ClassName() creates an object. Each object is independent.

object Instance of a class. Has its own copy of the fields.

Access and modify fields

Read and write object data.

AccessFields.java
Replay: real traced execution (multi-file project)
public class AccessFields {
    public static void main(String[] args) {
        System.out.println("=== Accessing Object Fields ===\n");

        Book book = new Book();

        // Write to fields
        book.title = "1984";
        book.author = "George Orwell";
        book.pages = 328;
        book.isAvailable = true;

        // Read from fields
        System.out.println("Title: " + book.title);
        System.out.println("Author: " + book.author);
        System.out.println("Pages: " + book.pages);
        System.out.println("Available: " + book.isAvailable);

        // Modify fields
        System.out.println("\nBorrowing book...");
        book.isAvailable = false;
        System.out.println("Available: " + book.isAvailable);

        // Default values before fields are assigned
        System.out.println("\n=== Default Values ===");
        Book emptyBook = new Book();
        System.out.println("Default title: " + emptyBook.title);
        System.out.println("Default pages: " + emptyBook.pages);
        System.out.println("Default available: " + emptyBook.isAvailable);
    }
}

class Book {
    // Different field types
    String title;       // Reference type (default: null)
    String author;      // Reference type (default: null)
    int pages;          // Primitive (default: 0)
    boolean isAvailable; // Primitive (default: false)
}
  1. book ← ⟨Book A⟩, book.title ← 1984, book.author ← George Orwell

    2public class AccessFields {3    public static void main(String[] args) {4        System.out.println("=== Accessing Object Fields ===\n");5        6        Book book→ ⟨Book A⟩ = new Book();7        8        // Write to fields  //?write9        book.title→ 1984 = "1984";10        book.author→ George Orwell = "George Orwell";11        book.pages→ 328 = 328;12        book.isAvailable→ true = true;13        14        // Read from fields  //?read15        System.out.println("Title: " + book.title1984);16        System.out.println("Author: " + book.authorGeorge Orwell);17        System.out.println("Pages: " + book.pages328);18        System.out.println("Available: " + book.isAvailabletrue);19        20        // Modify fields  //?modify21        System.out.println("\nBorrowing book...");22        book.isAvailable→ false = false;23        System.out.println("Available: " + book.isAvailablefalse);24        25        // Default values before fields are assigned  //@var=_,!26        System.out.println("\n=== Default Values ===");  //@var=_,!27        Book emptyBook→ ⟨Book B⟩ = new Book();  //?defaults28        System.out.println("Default title: " + emptyBook.titlenull);  //@var=_,!29        System.out.println("Default pages: " + emptyBook.pages0);  //@var=_,!30        System.out.println("Default available: " + emptyBook.isAvailablefalse);  //@var=_,!31    }
    output=== Accessing Object Fields ===
    Title: 1984
    Author: George Orwell
    Pages: 328
    Available: true
    
    Borrowing book...
    Available: false
    
    === Default Values ===
    Default title: null
    Default pages: 0
    Default available: false

Use dot notation: object.field to access, object.field = value to set.

Multiple instances

Each object has its own field values.

MultipleInstances.java
Replay: real traced execution (multi-file project)
public class MultipleInstances {
    public static void main(String[] args) {
        System.out.println("=== Multiple Instances Demo ===\n");

        // Create bank accounts
        BankAccount acc1 = new BankAccount();
        acc1.owner = "Alice";
        acc1.balance = 1000.0;

        BankAccount acc2 = new BankAccount();
        acc2.owner = "Bob";
        acc2.balance = 500.0;

        BankAccount acc3 = new BankAccount();
        acc3.owner = "Charlie";
        acc3.balance = 2500.0;

        // Initial state
        System.out.println("Initial balances:");
        printAccount(acc1);
        printAccount(acc2);
        printAccount(acc3);

        // Operations on different accounts
        System.out.println("\nTransactions:");
        acc1.balance -= 200;  // Alice withdraws
        System.out.println("Alice withdrew $200");

        acc2.balance += 100;  // Bob deposits
        System.out.println("Bob deposited $100");

        acc3.balance -= 500;  // Charlie withdraws
        System.out.println("Charlie withdrew $500");

        // Final state
        System.out.println("\nFinal balances:");
        printAccount(acc1);
        printAccount(acc2);
        printAccount(acc3);

        // Each object maintains its own state!
        System.out.println("\n=== Key Point ===");
        System.out.println("Three objects, three independent balances!");
        System.out.println("Same class (blueprint), different data (state).");
    }

    static void printAccount(BankAccount acc) {
        System.out.println("  " + acc.owner + ": $" + acc.balance);
    }
}

class BankAccount {
    String owner;
    double balance;
}
  1. acc1 ← ⟨BankAccount A⟩, acc1.owner ← Alice, acc1.balance ← 1000.0

    1public class MultipleInstances {2    public static void main(String[] args) {3        System.out.println("=== Multiple Instances Demo ===\n");4        5        // Create bank accounts  //?create6        BankAccount acc1→ ⟨BankAccount A⟩ = new BankAccount();7        acc1.owner→ Alice = "Alice";8        acc1.balance→ 1000.0 = 1000.0;9        10        BankAccount acc2→ ⟨BankAccount B⟩ = new BankAccount();11        acc2.owner→ Bob = "Bob";12        acc2.balance→ 500.0 = 500.0;13        14        BankAccount acc3→ ⟨BankAccount C⟩ = new BankAccount();15        acc3.owner→ Charlie = "Charlie";16        acc3.balance→ 2500.0 = 2500.0;17        18        // Initial state19        System.out.println("Initial balances:");20        printAccount(acc1⟨BankAccount A⟩);21        printAccount(acc2);
    output=== Multiple Instances Demo ===
    Initial balances:
  2. static void printAccount(BankAccount acc)

    pass 1 of 6
    19    System.out.println("Initial balances:");20    printAccount(acc1⟨BankAccount A⟩);21    printAccount(acc2⟨BankAccount B⟩);22    printAccount(acc3);23    24    // Operations on different accounts  //?operations25    System.out.println("\nTransactions:");26    acc1.balance -= 200;  // Alice withdraws27    System.out.println("Alice withdrew $200");28    29    acc2.balance += 100;  // Bob deposits30    System.out.println("Bob deposited $100");31    32    acc3.balance -= 500;  // Charlie withdraws33    System.out.println("Charlie withdrew $500");34    35    // Final state  //?final36    System.out.println("\nFinal balances:");37    printAccount(acc1);38    printAccount(acc2);39    printAccount(acc3);40    41    // Each object maintains its own state!  //?state42    System.out.println("\n=== Key Point ===");43    System.out.println("Three objects, three independent balances!");44    System.out.println("Same class (blueprint), different data (state).");45}4647static void printAccount(BankAccount acc⟨BankAccount A⟩) {48    System.out.println("  " + acc.ownerAlice + ": $" + acc.balance1000.0);49}
    output  Alice: $1000.0
    All 6 passes — pass 1 is the card above
    passaccacc.owneracc.balanceacc1acc2acc3acc1.balanceacc2.balanceacc3.balance
    1⟨BankAccount A⟩Alice1000.0⟨BankAccount A⟩⟨BankAccount B⟩
    2⟨BankAccount B⟩Bob500.0⟨BankAccount B⟩⟨BankAccount C⟩
    3⟨BankAccount C⟩Charlie2500.0⟨BankAccount A⟩⟨BankAccount B⟩⟨BankAccount C⟩1000.0 800.0500.0 600.02500.0 2000.0
    4⟨BankAccount A⟩Alice800.0⟨BankAccount A⟩⟨BankAccount B⟩
    5⟨BankAccount B⟩Bob600.0⟨BankAccount B⟩⟨BankAccount C⟩
    6⟨BankAccount C⟩Charlie2000.0⟨BankAccount C⟩

Changes to one object don't affect others. Each has its own memory.

Methods that use object data

Methods can read and modify the object's fields.

ClassWithMethods.java
Replay: real traced execution (multi-file project)
public class ClassWithMethods {
    public static void main(String[] args) {
        System.out.println("=== Class with Methods ===\n");

        Counter counter = new Counter();

        counter.display();  // Shows 0 (default)

        counter.increment();
        counter.increment();
        counter.increment();
        counter.display();  // Shows 3

        counter.decrement();
        counter.display();  // Shows 2

        counter.reset();
        counter.display();  // Shows 0

        System.out.println("\n=== Two Independent Counters ===");
        Counter counterA = new Counter();
        Counter counterB = new Counter();

        counterA.increment();
        counterA.increment();
        counterA.increment();
        counterA.increment();
        counterA.increment();

        counterB.increment();
        counterB.increment();

        System.out.println("Counter A: " + counterA.getValue());
        System.out.println("Counter B: " + counterB.getValue());
    }
}

class Counter {
    int count = 0;  // Field with initial value

    void increment() {
        count++;
    }

    void decrement() {
        if (count > 0) {
            count--;
        }
    }

    void reset() {
        count = 0;
    }

    int getValue() {
        return count;
    }

    void display() {
        System.out.println("Count: " + count);
    }
}
  1. counter ← ⟨Counter A⟩

    1public class ClassWithMethods {2    public static void main(String[] args) {3        System.out.println("=== Class with Methods ===\n");4        5        Counter counter→ ⟨Counter A⟩ = new Counter();  //?createcounter6        7        counter.display();  // Shows 0 (default)
    output=== Class with Methods ===
  2. void display()

    pass 1 of 4
    7        counter.display();  // Shows 0 (default)8        9        counter.increment();  //?callmethod10        counter.increment();11        counter.increment();12        counter.display();  // Shows 313        14        counter.decrement();15        counter.display();  // Shows 216        17        counter.reset();  //?reset18        counter.display();  // Shows 019        20        System.out.println("\n=== Two Independent Counters ===");  //?independent21        Counter counterA = new Counter();22        Counter counterB = new Counter();23        24        counterA.increment();25        counterA.increment();26        counterA.increment();27        counterA.increment();28        counterA.increment();29        30        counterB.increment();31        counterB.increment();32        33        System.out.println("Counter A: " + counterA.getValue());34        System.out.println("Counter B: " + counterB.getValue());35    }36}3738class Counter {39    int count = 0;  // Field with initial value  //?field40    41    void increment() {  //?methoddef42        count++;43    }44    45    void decrement() {46        if (count > 0) {47            count--;48        }49    }50    51    void reset() {52        count = 0;53    }54    55    int getValue() {  //?getter56        return count;57    }58    59    void display() {60        System.out.println("Count: " + count0);61    }
    outputCount: 0
    All 4 passes — pass 1 is the card above
    passcountcounterAcounterB
    10
    23 2
    30
    40⟨Counter B⟩⟨Counter C⟩
  3. count ← 1

    pass 1 of 10
    9        counter.increment();  //?callmethod10        counter.increment();11        counter.increment();12        counter.display();  // Shows 313        14        counter.decrement();15        counter.display();  // Shows 216        17        counter.reset();  //?reset18        counter.display();  // Shows 019        20        System.out.println("\n=== Two Independent Counters ===");  //?independent21        Counter counterA = new Counter();22        Counter counterB = new Counter();23        24        counterA.increment();25        counterA.increment();26        counterA.increment();27        counterA.increment();28        counterA.increment();29        30        counterB.increment();31        counterB.increment();32        33        System.out.println("Counter A: " + counterA.getValue());34        System.out.println("Counter B: " + counterB.getValue());35    }36}3738class Counter {39    int count = 0;  // Field with initial value  //?field40    41    void increment() {  //?methoddef42        count→ 1++;43    }
    All 10 passes — pass 1 is the card above
    passcount
    10 1
    21 2
    32 3
    40 1
    51 2
    62 3
    73 4
    84 5
    90 1
    101 2
  4. count ← 2

    14        counter.decrement();15        counter.display();  // Shows 216        17        counter.reset();  //?reset18        counter.display();  // Shows 019        20        System.out.println("\n=== Two Independent Counters ===");  //?independent21        Counter counterA = new Counter();22        Counter counterB = new Counter();23        24        counterA.increment();25        counterA.increment();26        counterA.increment();27        counterA.increment();28        counterA.increment();29        30        counterB.increment();31        counterB.increment();32        33        System.out.println("Counter A: " + counterA.getValue());34        System.out.println("Counter B: " + counterB.getValue());35    }36}3738class Counter {39    int count = 0;  // Field with initial value  //?field40    41    void increment() {  //?methoddef42        count++;43    }44    45    void decrement() {46        if (count3 > 0) {47            count→ 2--;48        }
  5. count ← 0

    17        counter.reset();  //?reset18        counter.display();  // Shows 019        20        System.out.println("\n=== Two Independent Counters ===");  //?independent21        Counter counterA = new Counter();22        Counter counterB = new Counter();23        24        counterA.increment();25        counterA.increment();26        counterA.increment();27        counterA.increment();28        counterA.increment();29        30        counterB.increment();31        counterB.increment();32        33        System.out.println("Counter A: " + counterA.getValue());34        System.out.println("Counter B: " + counterB.getValue());35    }36}3738class Counter {39    int count = 0;  // Field with initial value  //?field40    41    void increment() {  //?methoddef42        count++;43    }44    45    void decrement() {46        if (count > 0) {47            count--;48        }49    }50    51    void reset() {52        count→ 0 = 0;53    }
  6. int getValue()

    pass 1 of 2
    55int getValue() {  //?getter56    return count5;57}
  7. System.out.println("Counter A: " + counterA.getValue());

    33    System.out.println("Counter A: " + counterA.getValue());34    System.out.println("Counter B: " + counterB.getValue());35}
    outputCounter A: 5
  8. int getValue()

    pass 2 of 2
    55int getValue() {  //?getter56    return count2;57}
  9. System.out.println("Counter B: " + counterB.getValue());

    33    System.out.println("Counter A: " + counterA.getValue());34    System.out.println("Counter B: " + counterB.getValue());35}
    outputCounter B: 2

Methods operate on this object's data. this is implicit.

Exercise: PointRectangle.java

Create Point and Rectangle classes that work together