Download Object-Oriented Programming in Java: Defining and Using Classes and more Slides Web Design and Development in PDF only on Docsity! Web Design & Development Lecture 4 Docsity.com OOP in Java Docsity.com Defining Classes Docsity.com The Structure of Classes class name { declarations constructor definitions method definitions } instance variables and symbolic constants how to create and initialize objects how to manipulate those objects (may or may not include its own “driver”, i.e., main( )) These parts of a class can actually be in any order Docsity.com Defining a Class Comparison with C++ Java gives you the ability to write classes or user-defined data types similar to the way C++ does, with a few differences Points to consider when defining a class There are no global variables or functions. Everything resides inside a class. Remember we wrote our main method inside a class Specify access modifiers (public, private or protected ) for each member method or data members at every line. No semicolon (;) at the end of class All methods (functions) are written inline. There are no separate header and implementation files. Docsity.com Points to consider when defining a class (cont) Access Modifiers public : Accessible anywhere by anyone Private : Only accessible within this class Protected : Accessible only to the class itself and to it’s subclasses or other classes in the same “package” Package : Default access if no access modifier is provided. Accessible to all classes in the same package Constructor Same name as class name Does not have a return type No initialization list JVM provides a zero-argument constructor only if a class doesn’t define it’s own constructor Destructor Destructors are not required in a java class Defining a Class Comparison with C++ (cont) Docsity.com Example Docsity.com Task - Defining a Class Create a class for Student should be able to store the following characteristics of student Roll No Name Provide default, parameterized and copy constructors Provide standard getters/setters for instance variables Make sure, roll no has never assigned a negative value i.e. ensuring the correct state of the object Provide print method capable of printing student object on console Attributes: Roll NO Name Methods: constructors getters/setters print Student Docsity.com // Standard Getters public String getName ( ) { return name; } public int getRollNo ( ) { return rollNo; } Student Implementation Code cont. Docsity.com // Constructor that uses a default value instead of taking an argument. public Student() { name = “not set”; rollNo = 100; } // parameterized Constructor for a new student public Student(String name, int rollNo) { setName(name); //call to setter of name setRollNo(rollNo); //call to setter of rollNo } // Copy Constructor for a new student public Student(Student s) { name = s.name; rollNo = s.rollNo; } Student Implementation Code cont. Docsity.com // method used to display method on console public void print () { System.out.println("Student name:" +name+ ", roll no:" +rollNo); } } // end of class Student Implementation Code cont. Docsity.com Using a class Comparison with C++ Differences from C++ (cont) Objects are always passed by reference whereas primitive data types are passed by value. All methods use the run-time, not compile-time, types (i.e. all Java methods are like C++ virtual functions) The types of all objects are known at run-time All objects are allocated on the heap (always safe to return objects from methods) Docsity.com Task - Using Student Class Create objects of Student class by calling default, parameterized and copy constructors. Call Students class various methods on objects ali Attributes: Roll NO Name Methods: constructors getters/setters print Student Attributes: Roll NO: 89 Name: ali raza Methods: getters/setters print class object Docsity.com Student Client Code public class Test{ public static void main (String args[]){ // Make two students Student s1 = new Student("ali", 15); Student s2 = new Student(); //call to default costructor s1.print(); s2.print(); s2.setName("usman"); s2.setRollNo(20); System.out.print("Student name:" + s2.getName()); System.out.println(" rollNo:" + s2.getRollNo()); //continue…. Docsity.com More on Classes Docsity.com Static A class can have static Variables Methods Static variables and methods Are associated with the class itself!! Not associated with the object Therefore Statics can be accessed without instantiating an object! Generally accessed by class name Cannot refer to a non-static instance variable in a static method No this reference Docsity.com Static Variable & Methods Occurs as a single copy in the class For example; System.out is a static variable JOptionPane.showInputDialog(String) Docsity.com Garbage collection and finalize Java performs garbage collection and eliminates the need to free objects explicitly. When an object has no references to it anywhere, except in other objects that are also unreferenced, its space can be reclaimed. Before the object is destroyed, it might be necessary for the object to perform some actions. For example closing an open file. In such a case define a finalize() method with the actions to be performed before the object is destroyed. Docsity.com finalize When a finalize method is defined in a class, Java run time calls finalize() whenever it is about to recycle an object of that class. protected void finalize() { // code } A garbage collector reclaims objects in any order or never reclaim them. System.gc() Request the JVM to run the garbage collector Not necessary it will run Docsity.com Memory Mangement public class Test{ public static void main|(String args[]){ Student s1 = new Student(“ali”); Student s2 = new Student(“raza”); s1= s2; } } No Memory leakage in Java, Automatic Garbage Collection will take care of such scenarios s1 s2 0F59 0F59 03D2 name ali Stack Heap 03D2 name raza Docsity.com // Constructor that uses a default value instead of taking an argument. public Student() { name = “not set”; rollNo = 100; countStudents += 1; } // parameterized Constructor for a new student public Student(String name, int rollNo) { setName(name); //call to setter of name setRollNo(rollNo); //call to setter of rollNo countStudents += 1; } // Copy Constructor for a new student public Student(Student s) { name = s.name; rollNo = s.rollNo; countStudents += 1; } Modify Student Class Docsity.com // Overridden methods // Overriding toString method of class java.lang.Object public String toString () { return ("name: "+name + "RollNo: " + rollNo); } //Overriding finalize method of Object class protected void finalize () { countStudents -= 1; } } // end of class Modify Student Class Docsity.com Student Client Code public class Test{ public static void main (String args[]){ int numObjs; numObjs = Student.getCountStudents(); System.out.println("Students Objects:"+numObjs); Student s1 = new Student("ali", 15); System.out.println("Student:" + s1.toString() ); numObjs = Student.getCountStudents(); System.out.println("Students Objects:"+numObjs); Docsity.com