Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
Composition Setup

Below is a short tutorial designed for someone who is familiar with programming (potentially only at the level of MATLAB), and has never learned or long forgotten Java. After explaining the very basics of classes and objects, we skip all of the syntax and control flow and go straight to what you will need to complete the workshop. If your Java is not strong, please take the time to understand this tutorial, otherwise you will most likely be lost during the workshop. It should take about 30 minutes.

Java Basics: Classes, Objects, Fields, Methods, and the Keyword Static

In Java, all code is associated with a class. Classes have fields and methods. Instances of classes are created with Constructors and called Objects. Once an Object has been constructed, its methods can be called and its fields can be accessed. Here is a concrete example with two simple classes:

Section
borderfalse
Column

Column
width300px
Code Block
titleCat.java
public class Cat {
  private int age;
  private String name;
  private Cat friend;

  public Cat(String name, int age) {
    this.name = name;
    this.age = age;
    friend = null;
  }

  public String getName() {
    return name;
  }

  public Cat getFriend() {
    return friend;
  }

  public void setFriend(Cat friend) {
    this.friend = friend;
  }

  public String sayHello(String aboutMe) {
    return "Hello World!  My name is " + 
      name + " and I am " + age + 
      " years old." + " I am " + aboutMe + ".";
  }
}
Column
width10px

Column
width500px
Code Block
titleCatsTheMusical.java
public class CatsTheMusical {

  public static void main(String[] args) {
    Cat mist = new Cat("Mr. Mistoffelees", 8);
    System.out.println(mist.sayHello("magical"));
    Cat garf = new Cat("Garfield", 12);
    System.out.println(garf.sayHello("tired/hungry"));
    mist.setFriend(garf);
    System.out.println(mist.getName() + " and " + garf.getName()
        + " are friends? " + CatsTheMusical.areFriends(mist, garf));
    garf.setFriend(mist);
    System.out.println(mist.getName() + " and " + garf.getName()
        + " are friends? " + CatsTheMusical.areFriends(mist, garf));
  }

  public static boolean areFriends(Cat cat1, Cat cat2) {
    if (cat1.getFriend() != null && cat2.getFriend() != null) {
      return cat1.getFriend() == cat2 && cat2.getFriend() == cat1;
    }
    return false;
  }
}
Column

If you understand this code, particularly how the keywords this and static work, and you can predict the output as shown below,

Toggle Cloak
idCat Code Output
Cat Code Output

Cloak
visiblefalse
idCat Code Output

then you probably don't need to expand the section below and can continue.

Toggle Cloak
idCat Code Explained
Cat Code Explained

Cloak
visiblefalse
idCat Code Explained

First, lets talk about the contents of the files Cat.java.

  • Fields: The class Cat has three fields, name, age and friend. Each field has a type, which ensures that we can only store a String in name, an int in age and another Cat in friend. The word private before each field indicates that the field can only be accessed from within the class Cat.
  • Constructors: The class Cat has one constructor public Cat(String name, int age){...}. In the constructor, the fields name and age are initialized with the values given in the arguments, while friend is simply set to null. Because the constructor is public, it can be invoked from other classes. An example of the invoking the constructor can be seen in CatsTheMusical.java.
  • Methods: The class Cat has four methods, getName(){...}, getFriend(){...}, setFriend(Cat friend){...} and sayHello(String aboutMe){...}. The keyword public indicates that the methods can be called outside of the class Cat. The second word in each method is the return type, or the type of the result of the method. Notice that setFriend(...) has a return type of void, indicating that nothing is returned. The first two methods are examples of getter methods, as they simply retrieve the value of a private field. The third method is a setter method, which allows the field friend to be changed from outside the class Cat.

Now lets talk about the other file CatsTheMusical.java.

  • Static Methods: Methods that are static, while associated with the class they are written in, are not associated with any particular instance. They can be invoked by using [class-name].[method]. For example, see the invocation of areFriends(...) within main(...).
  • main(...): All Java program must start with the code public static void main(String[] args){...}. From here, we will follow the methods and constructors into other class files. The arguments, String[] args can be accessed by calling args[0] etc. and can be set by going to the top menu bar and then selecting Run → Run Configurations..., then selecting the Arguments tab in the center and filling out the Program Arguments box.

Now that we have the basic terminology down, lets examine some of the finer points which may be confusing to non-Java programmers:

  • Given an instance of a class (e.g. for Cat c = new Cat(...), c is an instance), non-static methods from the class can be called by [instance name].[method name] (e.g. c.getName()). Similarly, non-static fields can be accessed by calling [instance name].[field name], (e.g. c.name). However, methods or fields labeled private can only be called/accessed from code written within their own class file.
  • Within a constructor, we can directly access the fields of a class by name without reference to any particular instance, as it is implied that the instance is the one that is being built. For example, in the Cat constructor, we make the assignment friend = null. However, when there are argument variables with the same name as the field variables, they take precedence and shadow the fields variables. To reference the fields once they have been shadowed, you need to use the keyword this. In fact, you can use the keyword this whenever you want to refer to a field or method of the instance of the class being built by the constructor, regardless of whether there is shadowing. The same rules when you are inside a non-static method instead of inside a constructor.
  • In static methods, we cannot refer to any non-static fields or non static methods of the class without also providing an instance, as static methods are not associated with any instance. Similarly, the keyword this cannot be applied.

Now you are ready for some more advanced Java!

Types, Primitives, and Generics

TODO... but until then

Inheritance, Abstract Classes, Interfaces, and Inner Classes

TODO... but for now

Data Structures

TODO... but for now