Introduction To Classes: Fields Declaration
Introduction To Classes: Fields Declaration
Introduction To Classes: Fields Declaration
Introduction to classes
DEFINING A CLASS: Def: In the real world, you'll often find many individual objects all of the same kind. A class is a user-defined data type with a template that serves to define its properties. once the class type has been defined, we can create variable s of that type using declarations that are similar to the basic type declarations. In java, these variables are termed as instances are of classes, which are the actual objects. The basic form of a class definition is: Class Syntax:Class classname { type instance-variable1 ; type instance-variable2 ; .. FIELDS .. DECLARATION type instance-variableN ; type methodname1 (parameter-list ) { // body of method } type methodname2 (parameter-list ) { // body of method Method } DECLARATION ..... .. type methodnameN (parameter-list ) { // body of method } } Everything inside the square brackets is optional. This means that the following would be a valid class definition: Class Empty { } Because the body is empty, this class does not contain any properties and therefore cannot do anything. we can,however compile it and even create object using it. C++ programeres may note that there is no semicolon after closing brace.
JAVA PROGRAMMING
Page 1
Rahul Patel
PROGRAMMING WITH JAVA FIELDS DECLARATION: Data is encapsulated in a class by placing data fields inside the body of the class definition. These variables are called instance variables because they are created whenever an object of the class is instantiated. We can declare the instance variable exactly the same way as we declare local variables. Examples: Class box { double height; double width; } The class box contains double integer type instance variables. It allowed to declare them in one line as double length, width; Remember these variables are only declared and therefore no storage space has been created in the memory.
Simple class Here is a class called Box that defines three instance variables: width, height, and depths. Currently, Box does not contain any methods (but some will be added soon). class Box { double width; double height; double depth; } As stated, a class defines a new type of data. In this case, the new data type is called Box. You will use this name to declare objects of type Box. It is important to remember that a class declaration only creates a template; it does not create an actual object. Thus, the preceding code does not cause any objects of type Box to come into existence. To actually create a Box object, you will use a statement like the following: Box mybox = new Box(); // create a Box object called mybox After this statement executes, mybox will be an instance of Box. Thus, it will have physical reality. For the moment, dont worry about the details of this statement. Again, each time you create an instance of a class, you are creating an object that contains its own copy of each instance variable defined by the class. Thus, every Box object will contain its own copies of the instance variables width, height, and depth. JAVA PROGRAMMING Page 2 Rahul Patel
PROGRAMMING WITH JAVA To access these variables, you will use the dot (.) operator. The dot operator links the name of the object with the name of an instance variable. For example, to assign the width variable of mybox the value 100, you would use the following statement: mybox.width = 100; /* A program that uses the Box class. Call this file BoxDemo.java */ class Box { double width; double height; double depth; } // This class declares an object of type Box. class BoxDemo { public static void main(String args[]) { Box b1 = new Box(); double vol; b1.width = 10; b1.height = 20; b1.depth = 15; vol = b1.width * b1.height * b1.depth; System.out.println("Volume is " + vol); } } You should call the file that contains this program BoxDemo.java, because the main( ) method is in the class called BoxDemo, not the class called Box. When you compile this program, you will find that two .class files have been created, one for Box and one for BoxDemo. The Java compiler automatically puts each class into its own .class file. It is not necessary for both the Box and the BoxDemo class to actually be in the same source file. You could put each class in its own file, called Box.java and BoxDemo.java, respectively. To run this program, you must execute BoxDemo.class. When you do, you will see the following output: Volume is 3000.0 CREATING OBJECTS As pointed out earlier, an object in java is essentially a block of memory that contains space to store all the instance variables. Creating an object is also referred to as instantiating an object. Object in java are created using the new operator. The new operator creates an object of the specified class and returns a reference to that object. Here is an example of creating an object of type Box . Page 3 Rahul Patel
JAVA PROGRAMMING
PROGRAMMING WITH JAVA Box b1; // declare reference to object B1 = new Box(); // allocate a Box object The first statement declares a variables to hold the object reference and the second one actually assigns the object reference to the variable. The first line declares b1 as a reference to an object of type Box. After this line executes, b1 contains the value null, which indicates that it does not yet point to an actual object. Any attempt to use b1 at this point will result in a compile-time error. The next line allocates an actual object and assigns a reference to it to b1. After the second line executes, you can use b1 as if it were a Box object. But in reality, b1 simply holds the memory address of the actual Box object. The effect of these two lines of code is depicted in Figure
Assigning Object Reference Variables Object reference variables act differently than you might expect when an assignment takes place. For example, what do you think the following fragment does? Box b1 = new Box(); Box b2 = b1; You might think that b2 is being assigned a reference to a copy of the object referred to by b1. That is, you might think that b1 and b2 refer to separate and distinct objects. However, this would be wrong. Instead, after this fragment executes, b1 and b2 will both refer to the same object. The assignment of b1 to b2 did not allocate any memory or copy any part of the original object. It simply makes b2 refer to the same object as does b1. Thus, any changes made to the object through b2 will affect the object to which b1 is referring, since they are the same object. This situation is depicted here:
JAVA PROGRAMMING
Page 4
Rahul Patel
Although b1 and b2 both refer to the same object, they are not linked in any other way. For example, a subsequent assignment to b1 will simply unhook b1 from the original object without affecting the object or affecting b2. For example: Box b1 = new Box(); Box b2 = b1; // ... b1 = null; Here, b1 has been set to null, but b2 still points to the original object. METHODS DECLARATION A class with only data fields has no life. The objects created by such a class cannot respond to any messages. We must therefore and methods that are necessary for manipulating The data contained in the class. Methods are declared inside the body of the class but immediately after the declaration of instance variables. The general form of a methods declaration is Type methodname ( parameter-list ) { Method-body; } Method declarations have four basic parts: The name of the method(method name) The type of the value the method returns(type) A list of parameters(parameter-list) The body of the method The type specifies the type of value the method would return. This could be a simple data type such as ant as well as any class type. It could even be void type, if the method does not return any value. The method name is a valid identifier. The parameter list is always enclosed in parentheses. This list contains variable names and types of all the values we want to give to the method as input. The variable in the list are separated by commas. In case where no input data are required, the declaration must retain the empty parentheses ex: ( int m, float x, float y) // three parameter Page 5 Rahul Patel
JAVA PROGRAMMING
Example: // This program includes a method inside the box class. class Box { double width; double height; double depth; void volume() { System.out.print("Volume is "); System.out.println(width * height * depth); } }
JAVA PROGRAMMING
Page 6
Rahul Patel
PROGRAMMING WITH JAVA class DemoBox { public static void main(String args[]) { Box b1 = new Box(); // assign values to mybox1's instance variables b1.width = 10; b1.height = 20; b1.depth = 15; // display volume of first box b1.volume(); } } Output:Volume is 3000.0 Example: // Now, volume() returns the volume of a box. class Box { double width; double height; double depth; // compute and return volume double volume() { return width * height * depth; } } class DemoBox { public static void main(String args[]) { Box b1 = new Box(); double vol; // assign values to mybox1's instance variables b1.width = 10; b1.height = 20; b1.depth = 15; vol = b1.volume(); System.out.println("Volume is " + vol); } }
JAVA PROGRAMMING
Page 7
Rahul Patel
PROGRAMMING WITH JAVA Example: // This program uses a parameterized method. class Box { double width; double height; double depth; double volume() { return width * height * depth; } void setDim(double w, double h, double d) { width = w; height = h; depth = d; } } class DemoBox { public static void main(String args[]) { Box b1 = new Box(); Box b2 = new Box(); double vol; b1.setDim(10, 20, 15); b2.setDim(3, 6, 9); vol = b1.volume(); System.out.println("Volume is " + vol); vol = b2.volume(); System.out.println("Volume is " + vol); } } CONSTRUCTOR: It can be tedious to initialize all of the variables in a class each time an instance is created. Even when you add convenience functions like setDim( ), it would be simpler and more concise to have all of the setup done at the time the object is first created. Because the requirement for initialization is so common, Java allows objects to initialize themselves when they are created. This automatic initialization is performed through the use of a constructor. A constructor initializes an object immediately upon creation. It has the same name as the class in which it resides and is syntactically similar to a method.
JAVA PROGRAMMING
Page 8
Rahul Patel
PROGRAMMING WITH JAVA Once defined, the constructor is automatically called immediately after the object is created, before the new operator completes. Constructors look a little strange because they have no return type, not even void. This is because the implicit return type of a class constructor is the class type itself. You can rework the Box example so that the dimensions of a box are automatically initialized when an object is constructed. To do so, replace setDim( ) with a constructor. Lets begin by defining a simple constructor that simply sets the dimensions of each box to the same values. This version is shown here: Example: /* Here, Box uses a constructor to initialize the dimensions of a box.*/ class Box { double width; double height; double depth; // This is the constructor for Box. Box() { System.out.println("Constructing Box"); width = 10; height = 10; depth = 10; } // compute and return volume double volume() { return width * height * depth; } } class DemoBox { public static void main(String args[]) { Box b1 = new Box(); Box b2 = new Box(); double vol; vol = b1.volume(); System.out.println("Volume is " + vol); vol = b2.volume(); System.out.println("Volume is " + vol); } } When this program is run, it generates the following results: JAVA PROGRAMMING Page 9 Rahul Patel
PROGRAMMING WITH JAVA OutPut:Constructing Box Constructing Box Volume is 1000.0 Volume is 1000.0
JAVA PROGRAMMING
Page 10
Rahul Patel
PROGRAMMING WITH JAVA Parameterized Constructors While the Box( ) constructor in the preceding example does initialize a Box object, it is not very usefulall boxes have the same dimensions. What is needed is a way to construct Box objects of various dimensions. The easy solution is to add parameters to the constructor. As you can probably guess, this makes them much more useful. For example, the following version of Box defines a parameterized constructor which sets the dimensions of a box as specified by those parameters. Pay special attention to how Box objects are created. Example: /* Here, Box uses a parameterized constructor to initialize the dimensions of a box. */ class Box { double width; double height; double depth; // This is the constructor for Box. Box(double w, double h, double d) { width = w; height = h; depth = d; } // compute and return volume double volume() { return width * height * depth; } } class DemoBox { public static void main(String args[]) { Box b1 = new Box(10, 20, 15); Box b2 = new Box(3, 6, 9); double vol; vol = b1.volume(); System.out.println("Volume is " + vol); vol = b2.volume(); System.out.println("Volume is " + vol); } }
JAVA PROGRAMMING
Page 11
Rahul Patel
PROGRAMMING WITH JAVA The this Keyword Sometimes a method will need to refer to the object that invoked it. To allow this, Java defines the this keyword. this can be used inside any method to refer to the current object. That is, this is always a reference to the object on which the method was invoked. You can use this anywhere a reference to an object of the current class type is permitted. To better understand what this refers to, consider the following version of Box( ): // A redundant use of this. Box(double w, double h, double d) { this.width = w; this.height = h; this.depth = d; } This version of Box( ) operates exactly like the earlier version. The use of this is redundant,but perfectly correct. Inside Box( ), this will always refer to the invoking object. Example:
class A { int a,b,c; void input(int a,int b) { this.a=a; this.b=b; } int mul() { return a*b; } } class This1 {
JAVA PROGRAMMING
Page 12
Rahul Patel
JAVA PROGRAMMING
Page 13
Rahul Patel
PROGRAMMING WITH JAVA Garbage collection? How it works? Garbage collection is one of the most important features of Java. The purpose of garbage collection is to identify and discard objects that are no longer needed by a program so that their resources can be reclaimed and reused. Garbage collection is also called automatic memory management. In Java, it is good idea to explicitly assign null into a variable when no more in use. In Java on calling System.gc() and Runtime.gc(), JVM tries to recycle the unused objects, but there is no guarantee when all the objects will garbage collected. Garbage collection is an automatic process. Few important points about garbage collection in java: objects are created on heap in Java irrespective of there scope e.g. local or member variable. while its worth noting that class variables or static members are created in method area of Java memory space and both heap and method area is shared between different thread. Garbage collection is a mechanism provided by Java Virtual Machine to reclaim heap space from objects which are eligible for Garbage collection. Garbage collection relieves java programmer from memory management which is essential part of C++ programming and gives more time to focus on business logic. Garbage Collection in Java is carried by a daemon thread called Garbage Collector. Before removing an object from memory Garbage collection thread invokes finalize () method of that object and gives an opportunity to perform any sort of cleanup required. You as Java programmer can not force Garbage collection in Java; it will only trigger if JVM thinks it needs a garbage collection based on Java heap size. There are methods like System.gc () and Runtime.gc () which is used to send request of Garbage collection to JVM but it??s not guaranteed that garbage collection will happen. If there is no memory space for creating new object in Heap Java Virtual Machine throws OutOfMemoryError or java.lang.OutOfMemoryError heap space J2SE 5(Java 2 Standard Edition) adds a new feature called Ergonomics goal of ergonomics is to provide good performance from the JVM with minimum of command line tuning.
JAVA PROGRAMMING
Page 14
Rahul Patel
PROGRAMMING WITH JAVA Example:1 The process of disposing of dead objects is called garbage collection. Encouraging the Java Virtual Machine (JVM) to do some garbage collecting and recover the memory. class Test { double radius; // Radius of a sphere test() { } // Class constructor Test(double r) { radius = r; // Set the radius } } public class MainClass { public static void main(String[] arg) { test t = new test(); System.gc(); } }
Example:-2 Run the garbage collector using System class Page 15 Rahul Patel
JAVA PROGRAMMING
PROGRAMMING WITH JAVA public class Main { public static void main(String[] args) { System.gc(); } }
Sometimes an object will need to perform some action when it is destroyed. For example, if an object is holding some non-java resource such as a file handle or window character font, then you might want to make sure these resources are freed before an object is destroyed. To handle such situations, java provides a mechanism called finalization. By using finalization, you can define specific actions that will occur when an object is just about to be reclaimed by the garbage collector. To add a finalizer to a class, you simply define the finalize() method. The java run time calls that method whenever it is about to recycle an object of that class. Inside the finalize() method you will specify those actions that must be performed before an object is destroyed. The garbage collector runs periodically, checking for objects that are no longer referenced by any running state or indirectly through other referenced objects. Right before an asset is freed, the java run time calls the finalize() method on the object. The finalize() method has this general form: protected void finalize() { JAVA PROGRAMMING Page 16 Rahul Patel
PROGRAMMING WITH JAVA // finalization code here } Here, the keyword protected is a specifier that prevents access to finalize() by code defined outside its class. It is important to understand that finalize() is only called just prior to garbage collection. It is not called when an object goes out-of-scope, for example. This means program should provide other means of releasing system resources, etc., used by the object. It must not rely on finalize() for normal program operation.
JAVA PROGRAMMING
Page 17
Rahul Patel
PROGRAMMING WITH JAVA Wrepper Class Before we can instantiate a wrapper class, we need to know its name and the arguments its constructor accepts. The name of the wrapper class corresponding to each primitive data type, along with the arguments its constructor accepts, is listed below: Primitive datatype-->Wrapper Class-->Constructor arguments boolean--> Boolean--> boolean or String byte--> Byte--> byte or String char--> Character--> char short--> Short--> short or String int-->Integer--> int or String long--> Long--> long or String float-->Float--> float double or String double-->Double--> double or String Java Float Example This example shows how an object of Float can be declared and used. Float is a wrapper class provided to wrap float primitive value. It has a single field of type float. public class wrapperexample { public static void main(String[] args) {
// Create an Float object from double primitive type double d = 10.10; Float ob2 = new Float(d); System.out.println(ob2);
JAVA PROGRAMMING
Page 18
Rahul Patel
JAVA PROGRAMMING
Page 19
Rahul Patel