310 likes | 439 Views
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. Questions?. How is Lab 5 going?. Today in COMP 110. A couple of notes
E N D
COMP 110Constructors 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
Questions? • How is Lab 5 going?
Today in COMP 110 • A couple of notes • Friday’s in-class exercise • Constructors
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"
Local variables • What does the greet() method output? publicclass Example { private String str = “hello”; publicvoid doStuff() { String str = “goodbye”; } publicvoid greet() { doStuff(); System.out.println(str); } } • Outputs hello. Why? • doStuff() uses local variable str, not instance variable str
Local variables • What does the greet() method output? publicclass Example { private String str = “hello”; publicvoid doStuff() { str = “goodbye”; } publicvoid greet() { doStuff(); System.out.println(str); } } • Outputs goodbye. Why? • Make sure you understand this for step 1 of Lab 5!
Creating a new instance publicclass AnotherExample { private Student jack; publicvoid myMethod() { jack = new Student(); jack.setName(“Jack Smith”); jack.setAge(19); } }
Spirit of Kansas crash, Feb. 23, 2008 • http://www.youtube.com/watch?v=_ZCp5h1gK2Q • 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
Constructors • Create and initialize new objects • Special methods that are called when creating a new object Student jack = new Student(); 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 Assign memory address of object to variable Return memory address of object Create an objectby calling a constructor
Constructors • Can perform any action you write into a constructor’s definition • Meant to perform initializing actions • For example, initializing values of instance variables
Similar to mutator methods • However, constructors create an object in addition to initializing it • Like methods, constructors can have parameters
Example: Pet class publicclass Pet { private String name; privateint age; privatedouble 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; } } Default constructor
Example: Pet class, setPet method publicvoid setPet(String newName, int newAge, double newWeight) { name = newName; age = newAge; weight = newWeight; }
A closer look public Pet(String initName, int initAge, double initWeight) { name = initName; age = initAge; weight = initWeight; } Same name as class name Parameters Body No return type
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
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
Default constructor • If you define at least one constructor, a default constructor will not be created for you
Several constructors • You can have several constructors per class • They all have the same name, just different parameters
Example: Pet class publicclass Pet { private String name; privateint age; privatedouble 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; } }
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!
Change an object using mutators myPet.setPet(“Fang”, 1, 155.5);
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; }
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
Example: Pet class publicclass Pet { private String name; privateint age; privatedouble 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; } }
Wednesday • Talk about Lab 5 • More about constructors • Static variables and methods