Java OOP — Methods, Classes, Objects

Create method

public class Main {
  static void myMethod() {
    // code to be executed
  }
}

Call a method

public class Main {
  static void myMethod() {
    System.out.println("I just got executed!");
  }
 
  public static void main(String[] args) {
    myMethod();
  }
}

Parameters

public class Main {
  static void myMethod(String fname, int age) {
    System.out.println(fname + " is " + age);
  }
 
  public static void main(String[] args) {
    myMethod("Liam", 5);
    myMethod("Jenny", 8);
    myMethod("Anja", 31);
  }
}

Return

public class Main {
  static int myMethod(int x) {
    return 5 + x;
  }
 
  public static void main(String[] args) {
    System.out.println(myMethod(3));
  }
}

Method overloading

Multiple methods can share the same name as long as they take different parameter types:

static int plusMethod(int x, int y) {
  return x + y;
}
 
static double plusMethod(double x, double y) {
  return x + y;
}
 
public static void main(String[] args) {
  int myNum1 = plusMethod(8, 5);
  double myNum2 = plusMethod(4.3, 6.26);
  System.out.println("int: " + myNum1);
  System.out.println("double: " + myNum2);
}

Class (basic)

public class Main {
  int x = 5;
}

Create an object (single + multiple)

public class Main {
  int x = 5;
 
  public static void main(String[] args) {
    Main myObj = new Main();  // "Main" is like a class data type, type safety shit
    System.out.println(myObj.x);
  }
}
 
public class Main {
  int x = 5;
 
  public static void main(String[] args) {
    Main myObj1 = new Main();  // Object 1
    Main myObj2 = new Main();  // Object 2
    System.out.println(myObj1.x);
    System.out.println(myObj2.x);
  }
}

Using multiple classes

Often used for organisation — one class holds the attributes and methods, another holds main() (the entry point).

// Main.java
public class Main {
  int x = 5;
}
 
// Second.java
class Second {
  public static void main(String[] args) {
    Main myObj = new Main();
    System.out.println(myObj.x);
  }
}

Modifying values + final

public class Main {
  int x;
 
  public static void main(String[] args) {
    Main myObj = new Main();
    myObj.x = 40;
    System.out.println(myObj.x);
  }
}
 
// Using final -> can't modify values
public class Main {
  final int x = 10;
 
  public static void main(String[] args) {
    Main myObj = new Main();
    myObj.x = 25; // will generate an error: cannot assign a value to a final variable
    System.out.println(myObj.x);
  }
}

Multiple objects

public class Main {
  int x = 5;
 
  public static void main(String[] args) {
    Main myObj1 = new Main();  // Object 1
    Main myObj2 = new Main();  // Object 2
    myObj2.x = 25;
    System.out.println(myObj1.x);  // Outputs 5
    System.out.println(myObj2.x);  // Outputs 25
  }
}

Calling methods within classes

public class Main {
  static void myMethod() {
    System.out.println("Hello World!");
  }
 
  public static void main(String[] args) {
    myMethod();
  }
}
 
// Notice that Main must be in lowercase

Static vs Public methods

  • Static — belongs to the class (one copy for all).
  • Non-static (public) — belongs to the object (each instance has its own copy).
public class Main {
  // Static method
  static void myStaticMethod() {
    System.out.println("Static methods can be called without creating objects");
  }
 
  // Public method
  public void myPublicMethod() {
    System.out.println("Public methods must be called by creating objects");
  }
 
  // Main method
  public static void main(String[] args) {
    myStaticMethod(); // Call the static method
    // myPublicMethod(); This would compile an error
 
    Main myObj = new Main(); // Create an object of Main
    myObj.myPublicMethod(); // Call the public method on the object
  }
}