310 likes | 449 Views
This session in COMP 110 focuses on the critical topic of constructors in Java programming, including how they are utilized to create and initialize objects. Key concepts discussed include the significance of the main method, the output behavior of local versus instance variables, and practical examples highlighting the use of multiple constructors. The session also addresses common errors encountered, such as the `java.lang.NoSuchMethodError`, and emphasizes the importance of proper data initialization to prevent unexpected behavior in programs. Don't forget: Lab 5 is due October 31 at 2 PM!
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