COMP 110 Constructors Luv Kohli October 13, 2008 MWF 2-2:50 pm Sitterson 014
Announcements Program 3 assigned today, due October 31, 2pm Ivan Sutherland talk today, 4pm, Sitterson Hall 011 2
Questions? How is Lab 5 going? 3
Today in COMP 110 A couple of notes Friday’s in-class exercise Constructors 4
Running a Java program Make sure you are running the program that has a main method in it Otherwise, you will get this: java.lang.NoSuchMethodError: main Exception in thread "main" 5
Local variables What does the greet() method output? public class Example { private String str = “hello”; public void doStuff() { String str = “goodbye”; } public void greet() { doStuff(); System.out.println(str); } } Outputs hello. Why? doStuff() uses local variable str, not instance variable str 6
Local variables What does the greet() method output? public class Example { private String str = “hello”; public void doStuff() { str = “goodbye”; } public void greet() { doStuff(); System.out.println(str); } } Outputs goodbye. Why? Make sure you understand this for step 1 of Lab 5! 7
Creating a new instance public class AnotherExample { private Student jack; public void myMethod() { jack = new Student(); jack.setName(“Jack Smith”); jack.setAge(19); } 8
Friday’s in-class exercise 9
The perils of incorrectly initialized data 10
Spirit of Kansas crash, Feb. 23, After heavy rains, water affected air-data sensors These sensors feed angle of attack and yaw data to flight-control system Water distorted preflight readings in 3 of the plane’s 24 sensors Caused flight-control system to make an erroneous correction, making the plane stall and crash 11
Constructors Create and initialize new objects Special methods that are called when creating a new object Student jack = new Student(); 12 Calling a constructor
Creating an object Create an object jack of class Student Student jack = new Student(); Scanner keyboard = new Scanner(System.in); Create an object keyboard of class Scanner 13 Create an object by calling a constructor Return memory address of object Assign memory address of object to variable
Constructors Can perform any action you write into a constructor’s definition Meant to perform initializing actions ◦ For example, initializing values of instance variables 14
Similar to mutator methods However, constructors create an object in addition to initializing it Like methods, constructors can have parameters 15
Example: Pet class public class Pet { private String name; private int age; private double weight; public Pet() { name = “No name yet.”; age = 0; weight = 0; } public Pet(String initName, int initAge, double initWeight) { name = initName; age = initAge; weight = initWeight; } 16 Default constructor
Example: Pet class, setPet method public void setPet(String newName, int newAge, double newWeight) { name = newName; age = newAge; weight = newWeight; } 17
A closer look public Pet(String initName, int initAge, double initWeight) { name = initName; age = initAge; weight = initWeight; } 18 Same name as class name No return type Parameters Body
Initializing instance variables Constructors give values to all instance variables Even if you do not explicitly give an instance variable a value in your constructor, Java will give it a default value Normal programming practice to give values to all instance variables 19
Default constructor Constructor that takes no parameters public Pet() { name = “No name yet.”; age = 0; weight = 0; } Java automatically defines a default constructor if you do not define any constructors 20
Default constructor If you define at least one constructor, a default constructor will not be created for you 21
Several constructors You can have several constructors per class ◦ They all have the same name, just different parameters 22
Example: Pet class public class Pet { private String name; private int age; private double weight; public Pet() { name = “No name yet.”; age = 0; weight = 0; } public Pet(String initName, int initAge, double initWeight) { name = initName; age = initAge; weight = initWeight; } 23
Calling a constructor Pet myPet; myPet = new Pet(“Frostillicus”, 3, 121.5); You cannot use an existing object to call a constructor: myPet.Pet(“Fang”, 3, 155.5); // invalid! 24
Change an object using mutators myPet.setPet(“Fang”, 1, 155.5); 25
Calling methods from constructors Just like calling methods from methods public Pet(String initName, int initAge, double initWeight) { setPet(initName, initAge, initWeight); } public void setPet(String newName, int newAge, double newWeight) { name = newName; age = newAge; weight = newWeight; } 26
Calling methods from constructors Can cause problems when calling public methods ◦ Problem has to do with inheritance, chapter 8 ◦ Another class can alter the behavior of public methods Can solve problem by making any method that constructor calls private 27
Example: Pet class public class Pet { private String name; private int age; private double weight; public Pet(String initName, int initAge, double initWeight) { set(initName, initAge, initWeight); } public void setPet(String newName, int newAge, double newWeight) { set(newName, newAge, newWeight); } private void set(String newName, int newAge, double newWeight) { name = newName; age = newAge; weight = newWeight; } 28
Wednesday Talk about Lab 5 More about constructors Static variables and methods 29