Chapter Eight Java
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.
Continue..
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.
Continue..
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.
Once defined, the constructor is automatically called
when the object is created, before the new operator
completes.
Continue..
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.
It is the constructor’s job to initialize the internal
state of an object so that the code creating an
instance will have a fully initialized, usable object
immediately.
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.
Continue..
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.
Instance Variable hiding
As you know, it is illegal in Java to declare two local
variables with the same name inside the same or
enclosing scopes.
Interestingly, you can have local variables, including
formal parameters to methods, which overlap with
the names of the class’ instance variables.
Continue..
However, when a local variable has the same name
as an instance variable, the local variable hides the
instance variable.
Garbage Collection
Since objects are dynamically allocated by using the
new operator, you might be wondering how such
objects are destroyed and their memory released for
later reallocation.
In some languages, such as C++, dynamically
allocated objects must be manually released by use
of a delete operator. Java takes a different approach;
it handles deallocation for you automatically.
Continue..
The technique that accomplishes this is called
garbage collection.
It works like this: when no references to an object
exist, that object is assumed to be no longer
needed, and the memory occupied by the object
can be reclaimed. There is no explicit need to
destroy objects as in C++.
The Finalize method
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 character font, then you might want
to make sure these resources are freed before an
object is destroyed.
Continue..
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.
Continue..
The finalize( ) method has this general form:
protected void finalize( )
{
// finalization code here
}
Method overloading
In Java, it is possible to define two or more methods
within the same class that share the same name, as
long as their parameter declarations are different.
When this is the case, the methods are said to be
overloaded, and the process is referred to as
method overloading.
Continue..
Method overloading is one of the ways that Java
supports polymorphism.
If you have never used a language that allows the
overloading of methods, then the concept may
seem strange at first.
But as you will see, method overloading is one of
Java’s most exciting and useful features.
Continue..
When an overloaded method is invoked, Java uses
the type and/or number of arguments as its guide
to determine which version of the overloaded
method to actually call.
Thus, overloaded methods must differ in the type
and/or number of their parameters.
Continue..
While overloaded methods may have different
return types, the return type alone is insufficient to
distinguish two versions of a method.
Overloading Constructors
In addition to overloading normal methods, you can
also overload constructor methods.
In fact, for most real-world classes that you create,
overloaded constructors will be the norm, not the
exception.
Argument Passing
In general, there are two ways that a computer
language can pass an argument to a subroutine.
The first way is call-by-value. This approach copies
the value of an argument into the formal parameter
of the subroutine.
Therefore, changes made to the parameter of the
subroutine have no effect on the argument
Continue..
The second way an argument can be passed is call-
by-reference.
In this approach, a reference to an argument (not
the value of the argument) is passed to the
parameter.
Inside the subroutine, this reference is used to
access the actual argument specified in the call.
Continue..
This means that changes made to the parameter will
affect the argument used to call the subroutine
As you will see, although Java uses call-by-value to
pass all arguments, the precise effect differs
between whether a primitive type or a reference
type is passed.
Continue..
When you pass an object to a method, the situation
changes dramatically, because objects are passed by
what is effectively call-by-reference.
Keep in mind that when you create a variable of a
class type, you are only creating a reference to an
object.
Continue..
Thus, when you pass this reference to a method,
the parameter that receives it will refer to the same
object as that referred to by the argument.
This effectively means that objects act as if they are
passed to methods by use of call-by-reference.
Changes to the object inside the method do affect
the object used as an argument.
Recursion methods
Java supports recursion. Recursion is the process of
defining something in terms of itself.
As it relates to Java programming, recursion is the
attribute that allows a method to call itself.
Continue..
A method that calls itself is said to be recursive.
The main advantage to recursive methods is that
they can be used to create clearer and simpler
versions of several algorithms than can their
iterative relatives.
For example, the QuickSort sorting algorithm is
quite difficult to implement in an iterative way.
Continue..
Also, some types of AI-related algorithms are most
easily implemented using recursive solutions.
When writing recursive methods, you must have an
if statement somewhere to force the method to
return without the recursive call being executed.
If you don’t do this, once you call the method, it will
never return.
Access Control
As you know, encapsulation links data with the code
that manipulates it. However, encapsulation
provides another important attribute: access
control.
Through encapsulation, you can control what parts
of a program can access the members of a class.
By controlling access, you can prevent misuse.
Continue..
Java’s access modifiers are public, private, and
protected. Java also defines a default access level.
protected applies only when inheritance is involved.
The other access modifiers are described next.
Continue..
Let’s begin by defining public and private. When a
member of a class is modified by public, then that
member can be accessed by any other code.
When a member of a class is specified as private,
then that member can only be accessed by other
members of its class.
Continue..
Now you can understand why main( ) has always
been preceded by the public modifier.
It is called by code that is outside the program—
that is, by the Java run-time system.
Continue..
When no access modifier is used, then by default
the member of a class is public within its own
package, but cannot be accessed outside of its
package.
Static Methods and variables
There will be times when you will want to define a
class member that will be used independently of
any object of that class.
Normally, a class member must be accessed only in
conjunction with an object of its class.
Continue..
However, it is possible to create a member that can
be used by itself, without reference to a specific
instance.
To create such a member, precede its declaration with the
keyword static.
Continue..
When a member is declared static, it can be
accessed before any objects of its class are created,
and without reference to any object.
You can declare both methods and variables to be
static.
The most common example of a static member is
main( ). main( ) is declared as static because it must
be called before any objects exist.
Continue..
Instance variables declared as static are, essentially,
global variables. When objects of its class are
declared, no copy of a static variable is made.
Instead, all instances of the class share the same
static variable.
Continue..
Methods declared as static have several restrictions:
• They can only directly call other static methods.
• They can only directly access static data.
• They cannot refer to this or super in any way.
(The keyword super relates to inheritance and is
described in the next chapter.)
Final keyword
A field can be declared as final.
Doing so prevents its contents from being modified,
making it, essentially, a constant.
This means that you must initialize a final field when
it is declared.
Array
Arrays were introduced earlier in these chapters,
before classes had been discussed.
Now that you know about classes, an important
point can be made about arrays: they are
implemented as objects. Because of this, there is a
special array attribute that you will want to take
advantage of.
Continue..
Specifically, the size of an array—that is, the
number of elements that an array can hold—is
found in its length instance variable.
Nested and Inner Classes
It is possible to define a class within another class;
such classes are known as nested classes.
The scope of a nested class is bounded by the scope
of its enclosing class. Thus, if class B is defined
within class A, then B does not exist independently
of A. A nested class has access to the members,
including private members, of the class in which it is
nested.
Continue..
However, the enclosing class does not have access
to the members of the nested class.
A nested class that is declared directly within its
enclosing class scope is a member of its enclosing
class.
It is also possible to declare a nested class that is
local to a block.
Continue..
There are two types of nested classes: static and
non-static. A static nested class is one that has the
static modifier applied. Because it is static, it must
access the non-static members of its enclosing class
through an object.
That is, it cannot refer to non-static members of its
enclosing class directly. Because of this restriction,
static nested classes are seldom used.
Continue..
The most important type of nested class is the inner
class.
An inner class is a non-static nested class.
It has access to all of the variables and methods of
its outer class and may refer to them directly in the
same way that other non-static members of the
outer class do.
String class
String is probably the most commonly used class in
Java’s class library. The obvious reason for this is
that strings are a very important part of
programming.
The first thing to understand about strings is that
every string you create is actually an object of type
String. Even string constants are actually String
objects. For example, in the statement
Continue..
System.out.println("This is a String, too");
the string "This is a String, too" is a String object
The second thing to understand about strings is that
objects of type String are immutable; once a String
object is created, its contents cannot be altered.
Continue..
While this may seem like a serious restriction, it is
not, for two reasons:
•If you need to change a string, you can always
create a new one that contains the modifications.
•Java defines peer classes of String, called
StringBuffer and StringBuilder, which allow strings
to be altered, so all of the normal string
manipulations are still available in Java
Strings can be constructed in a variety of ways. The
easiest is to use a statement like this:
String myString = "this is a test";
Once you have created a String object, you can use it
anywhere that a string is allowed.
For example, this statement displays myString:
System.out.println(myString);
Continue..
Java defines one operator for String objects: +. It is
used to concatenate two strings. For
example, this statement The String class contains
several methods that you can use. Here are a few.
You can test
two strings for equality by using equals( ). You can
obtain the length of a string by calling
Continue..
the length( ) method. You can obtain the character at
a specified index within a string by
calling charAt( )
Sometimes you will want to pass information into a
program when you run it. This is
accomplished by passing command-line arguments to
main( ).
Continue..
A command-line argument is
the information that directly follows the program’s
name on the command line when it is
executed. To access the command-line arguments
inside a Java program is quite easy—they
are stored as strings in a String array passed to the
args parameter of main( ). The first
command-line argument is stored at args[0], the
second at args[1], and so on.
Continue..
Beginning with JDK 5, Java has included a feature that
simplifies the creation of methods that need to take a
variable number of arguments.
This feature is called varargs and it is short for
variable-length arguments.
A method that takes a variable number of arguments
is called a variable-arity method, or simply a varargs
method.
Varargs: Variable-Length Arguments
A variable-length argument is specified by three
periods (…). For example, here is how
vaTest( ) is written using a vararg:
static void vaTest(int ... v) {
……..
}
Continue..
Thank you

Chapter 8 java

  • 1.
  • 2.
    Constructor It can betedious 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.
  • 3.
    Continue.. Because the requirementfor 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.
  • 4.
    Continue.. A constructor initializesan object immediately upon creation. It has the same name as the class in which it resides and is syntactically similar to a method. Once defined, the constructor is automatically called when the object is created, before the new operator completes.
  • 5.
    Continue.. Constructors look alittle 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. It is the constructor’s job to initialize the internal state of an object so that the code creating an instance will have a fully initialized, usable object immediately.
  • 6.
    The This Keyword Sometimesa 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.
  • 7.
    Continue.. That is, thisis 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.
  • 8.
    Instance Variable hiding Asyou know, it is illegal in Java to declare two local variables with the same name inside the same or enclosing scopes. Interestingly, you can have local variables, including formal parameters to methods, which overlap with the names of the class’ instance variables.
  • 9.
    Continue.. However, when alocal variable has the same name as an instance variable, the local variable hides the instance variable.
  • 10.
    Garbage Collection Since objectsare dynamically allocated by using the new operator, you might be wondering how such objects are destroyed and their memory released for later reallocation. In some languages, such as C++, dynamically allocated objects must be manually released by use of a delete operator. Java takes a different approach; it handles deallocation for you automatically.
  • 11.
    Continue.. The technique thataccomplishes this is called garbage collection. It works like this: when no references to an object exist, that object is assumed to be no longer needed, and the memory occupied by the object can be reclaimed. There is no explicit need to destroy objects as in C++.
  • 12.
    The Finalize method Sometimesan 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 character font, then you might want to make sure these resources are freed before an object is destroyed.
  • 13.
    Continue.. To handle suchsituations, 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.
  • 14.
    Continue.. The finalize( )method has this general form: protected void finalize( ) { // finalization code here }
  • 15.
    Method overloading In Java,it is possible to define two or more methods within the same class that share the same name, as long as their parameter declarations are different. When this is the case, the methods are said to be overloaded, and the process is referred to as method overloading.
  • 16.
    Continue.. Method overloading isone of the ways that Java supports polymorphism. If you have never used a language that allows the overloading of methods, then the concept may seem strange at first. But as you will see, method overloading is one of Java’s most exciting and useful features.
  • 17.
    Continue.. When an overloadedmethod is invoked, Java uses the type and/or number of arguments as its guide to determine which version of the overloaded method to actually call. Thus, overloaded methods must differ in the type and/or number of their parameters.
  • 18.
    Continue.. While overloaded methodsmay have different return types, the return type alone is insufficient to distinguish two versions of a method.
  • 19.
    Overloading Constructors In additionto overloading normal methods, you can also overload constructor methods. In fact, for most real-world classes that you create, overloaded constructors will be the norm, not the exception.
  • 20.
    Argument Passing In general,there are two ways that a computer language can pass an argument to a subroutine. The first way is call-by-value. This approach copies the value of an argument into the formal parameter of the subroutine. Therefore, changes made to the parameter of the subroutine have no effect on the argument
  • 21.
    Continue.. The second wayan argument can be passed is call- by-reference. In this approach, a reference to an argument (not the value of the argument) is passed to the parameter. Inside the subroutine, this reference is used to access the actual argument specified in the call.
  • 22.
    Continue.. This means thatchanges made to the parameter will affect the argument used to call the subroutine As you will see, although Java uses call-by-value to pass all arguments, the precise effect differs between whether a primitive type or a reference type is passed.
  • 23.
    Continue.. When you passan object to a method, the situation changes dramatically, because objects are passed by what is effectively call-by-reference. Keep in mind that when you create a variable of a class type, you are only creating a reference to an object.
  • 24.
    Continue.. Thus, when youpass this reference to a method, the parameter that receives it will refer to the same object as that referred to by the argument. This effectively means that objects act as if they are passed to methods by use of call-by-reference. Changes to the object inside the method do affect the object used as an argument.
  • 25.
    Recursion methods Java supportsrecursion. Recursion is the process of defining something in terms of itself. As it relates to Java programming, recursion is the attribute that allows a method to call itself.
  • 26.
    Continue.. A method thatcalls itself is said to be recursive. The main advantage to recursive methods is that they can be used to create clearer and simpler versions of several algorithms than can their iterative relatives. For example, the QuickSort sorting algorithm is quite difficult to implement in an iterative way.
  • 27.
    Continue.. Also, some typesof AI-related algorithms are most easily implemented using recursive solutions. When writing recursive methods, you must have an if statement somewhere to force the method to return without the recursive call being executed. If you don’t do this, once you call the method, it will never return.
  • 28.
    Access Control As youknow, encapsulation links data with the code that manipulates it. However, encapsulation provides another important attribute: access control. Through encapsulation, you can control what parts of a program can access the members of a class. By controlling access, you can prevent misuse.
  • 29.
    Continue.. Java’s access modifiersare public, private, and protected. Java also defines a default access level. protected applies only when inheritance is involved. The other access modifiers are described next.
  • 30.
    Continue.. Let’s begin bydefining public and private. When a member of a class is modified by public, then that member can be accessed by any other code. When a member of a class is specified as private, then that member can only be accessed by other members of its class.
  • 31.
    Continue.. Now you canunderstand why main( ) has always been preceded by the public modifier. It is called by code that is outside the program— that is, by the Java run-time system.
  • 32.
    Continue.. When no accessmodifier is used, then by default the member of a class is public within its own package, but cannot be accessed outside of its package.
  • 33.
    Static Methods andvariables There will be times when you will want to define a class member that will be used independently of any object of that class. Normally, a class member must be accessed only in conjunction with an object of its class.
  • 34.
    Continue.. However, it ispossible to create a member that can be used by itself, without reference to a specific instance. To create such a member, precede its declaration with the keyword static.
  • 35.
    Continue.. When a memberis declared static, it can be accessed before any objects of its class are created, and without reference to any object. You can declare both methods and variables to be static. The most common example of a static member is main( ). main( ) is declared as static because it must be called before any objects exist.
  • 36.
    Continue.. Instance variables declaredas static are, essentially, global variables. When objects of its class are declared, no copy of a static variable is made. Instead, all instances of the class share the same static variable.
  • 37.
    Continue.. Methods declared asstatic have several restrictions: • They can only directly call other static methods. • They can only directly access static data. • They cannot refer to this or super in any way. (The keyword super relates to inheritance and is described in the next chapter.)
  • 38.
    Final keyword A fieldcan be declared as final. Doing so prevents its contents from being modified, making it, essentially, a constant. This means that you must initialize a final field when it is declared.
  • 39.
    Array Arrays were introducedearlier in these chapters, before classes had been discussed. Now that you know about classes, an important point can be made about arrays: they are implemented as objects. Because of this, there is a special array attribute that you will want to take advantage of.
  • 40.
    Continue.. Specifically, the sizeof an array—that is, the number of elements that an array can hold—is found in its length instance variable.
  • 41.
    Nested and InnerClasses It is possible to define a class within another class; such classes are known as nested classes. The scope of a nested class is bounded by the scope of its enclosing class. Thus, if class B is defined within class A, then B does not exist independently of A. A nested class has access to the members, including private members, of the class in which it is nested.
  • 42.
    Continue.. However, the enclosingclass does not have access to the members of the nested class. A nested class that is declared directly within its enclosing class scope is a member of its enclosing class. It is also possible to declare a nested class that is local to a block.
  • 43.
    Continue.. There are twotypes of nested classes: static and non-static. A static nested class is one that has the static modifier applied. Because it is static, it must access the non-static members of its enclosing class through an object. That is, it cannot refer to non-static members of its enclosing class directly. Because of this restriction, static nested classes are seldom used.
  • 44.
    Continue.. The most importanttype of nested class is the inner class. An inner class is a non-static nested class. It has access to all of the variables and methods of its outer class and may refer to them directly in the same way that other non-static members of the outer class do.
  • 45.
    String class String isprobably the most commonly used class in Java’s class library. The obvious reason for this is that strings are a very important part of programming. The first thing to understand about strings is that every string you create is actually an object of type String. Even string constants are actually String objects. For example, in the statement
  • 46.
    Continue.. System.out.println("This is aString, too"); the string "This is a String, too" is a String object The second thing to understand about strings is that objects of type String are immutable; once a String object is created, its contents cannot be altered.
  • 47.
    Continue.. While this mayseem like a serious restriction, it is not, for two reasons: •If you need to change a string, you can always create a new one that contains the modifications. •Java defines peer classes of String, called StringBuffer and StringBuilder, which allow strings to be altered, so all of the normal string manipulations are still available in Java
  • 48.
    Strings can beconstructed in a variety of ways. The easiest is to use a statement like this: String myString = "this is a test"; Once you have created a String object, you can use it anywhere that a string is allowed. For example, this statement displays myString: System.out.println(myString); Continue..
  • 49.
    Java defines oneoperator for String objects: +. It is used to concatenate two strings. For example, this statement The String class contains several methods that you can use. Here are a few. You can test two strings for equality by using equals( ). You can obtain the length of a string by calling Continue..
  • 50.
    the length( )method. You can obtain the character at a specified index within a string by calling charAt( ) Sometimes you will want to pass information into a program when you run it. This is accomplished by passing command-line arguments to main( ). Continue..
  • 51.
    A command-line argumentis the information that directly follows the program’s name on the command line when it is executed. To access the command-line arguments inside a Java program is quite easy—they are stored as strings in a String array passed to the args parameter of main( ). The first command-line argument is stored at args[0], the second at args[1], and so on. Continue..
  • 52.
    Beginning with JDK5, Java has included a feature that simplifies the creation of methods that need to take a variable number of arguments. This feature is called varargs and it is short for variable-length arguments. A method that takes a variable number of arguments is called a variable-arity method, or simply a varargs method. Varargs: Variable-Length Arguments
  • 53.
    A variable-length argumentis specified by three periods (…). For example, here is how vaTest( ) is written using a vararg: static void vaTest(int ... v) { …….. } Continue..
  • 54.