Search This Blog

Monday 19 June 2017

Other Modifiers for Members in Java

Other Modifiers for Members in Java

Certain characteristics of fields and/or methods can be specified in their declarations by the following keywords:

static Members: The declaration of static members is prefixed by the keyword static to distinguish them from instance members.
Static variables (also called class variables) only exist in the class they are defined in. They are not instantiated when an instance of the class is created. In other words, the values of these variables are not a part of the state of any object.
Static methods are also known as class methods. A static method in a class can directly access other static members in the class. It cannot access instance (i.e., non-static) members of the class, as there is no notion of an object associated with a static method.

final Members: A final variable is a constant, despite being called a variable. Its value cannot be changed once it has been initialized. This applies to instance, static and local variables, including parameters that are declared final.
A final variable of a primitive data type cannot change its value once it has been initialized.
A final variable of a reference type cannot change its reference value once it has been initialized, but the state of the object it denotes can still be changed.
A final method in a class is complete (i.e., has an implementation) and cannot be overridden in any subclass. Subclasses are then restricted in changing the behavior of the method.

abstract Methods: An abstract method does not have an implementation; that is, no method body is defined for an abstract method, only the method prototype is provided in the class definition. Its class is then abstract (i.e., incomplete) and must be explicitly declared as such. Subclasses of an abstract class must then provide the method implementation; otherwise, they are also abstract.

synchronized Methods: Several threads can be executing in a program. They might try to execute several methods on the same object simultaneously. If it is desired that only one thread at a time can execute a method in the object, the methods can be declared synchronized. Their execution is then mutually exclusive among all threads. At any given time, at the most one thread can be executing a synchronized method on an object. This discussion also applies to static synchronized methods of a class.

native Methods:Native methods are also called foreign methods. Their implementation is not defined in Java but in another programming language, for example, C or C++. Such a method can be declared as a member in a Java class definition. Since its implementation appears elsewhere, only the method prototype is specified in the class definition. The method prototype is prefixed with the keyword native. 

transient Fields: Objects can be stored using serialization. Serialization transforms objects into an output format that is conducive for storing objects. Objects can later be retrieved in the same state as when they were serialized, meaning that all fields included in the serialization will have the same values as at the time of serialization. Such objects are said to be persistent.
A field can be specified as transient in the class declaration, indicating that its value should not be saved when objects of the class are written to persistent storage.

volatile Fields: During execution, compiled code might cache the values of fields for efficiency reasons. Since multiple threads can access the same field, it is vital that caching is not allowed to cause inconsistencies when reading and writing the value in the field. The volatile modifier can be used to inform the compiler that it should not attempt to perform optimizations on the field, which could cause unpredictable results when the field is accessed by multiple threads.

Member Accessibility Modifiers in Java

Member Accessibility Modifiers in Java

By specifying member accessibility modifiers, a class can control what information is accessible to clients (i.e., other classes). These modifiers help a class to define a contract so that clients know exactly what services are offered by the class.
Accessibility of members can be one of the following:
  • public
  • protected
  • default (also called package accessibility)
  • private

A member has package or default accessibility when no accessibility modifier is specified. The member accessibility modifier only has meaning if the class (or one of its sub classes) is accessible to the client. Also, note that only one accessibility modifier can be specified for a member.

public Members: Public accessibility is the least restrictive of all the accessibility modifiers. A public member is accessible from anywhere, both in the package containing its class and in other packages where this class is visible. This is true for both instance and static members.(eg SuperclassA, SubclassB)

protected Members: A protected member is accessible in all classes in the package containing its class, and by all subclasses of its class in any package where this class is visible. In other words, non-subclasses in other packages cannot access protected members from other packages. It is less restrictive than the default accessibility(eg SuperclassA1, SubclassB1).

Default Accessibility for Members: When no member accessibility modifier is specified, the member is only accessible by other classes in its class's package. Even if its class is visible in another (possibly nested) package, the member is not accessible there. Default member accessibility is more restrictive than protected member accessibility.(eg SuperclassA2, SubclassB2)

private Members: This is the most restrictive of all the accessibility modifiers. Private members are not accessible from any other class. This also applies to subclasses, whether they are in the same package or not. Since they are not accessible by simple name in a subclass, they are also not inherited by the subclass. (eg SuperclassA3)



Monday 29 May 2017

Arrays in Java

Arrays in Java

An array is a data structure that defines an indexed collection of a fixed number of homogeneous data elements. All elements in the array have the same data type. A position in the array is indicated by a non-negative integer value called the index. An element at a given position in the array is accessed using the index. The size of an array is fixed and cannot increase to accommodate more elements.
  • In Java, arrays are objects. Arrays can be of primitive data types or reference types.
  • In the first case, all elements in the array are of a specific primitive data type. In the second case, all elements are references of a specific reference type. 
  • Each array object has a final field called length, which specifies the array size, that is, the number of elements the array can accommodate. The first element is always at index 0 and the last element at index n-1, where n is the value of the length field in the array.
  • Simple arrays are one-dimensional arrays.
  • An array variable declaration has either the following syntax:<element type>[] <array name>;
    Or
    <element type> <array name>[];
    where <element type> can be a primitive data type or a reference type .

The declaration does not actually create an array. It only declares a reference that can denote an array object.
  • Constructing an Array: An array can be constructed for a specific number of elements of the element type, using the new operator. The resulting array reference can be assigned to an array variable of the corresponding type.
    <array name> = new <element type> [<array size>];
  • The array declaration and construction can be combined. <element type1>[] <array name> = new <element type2>[<array size>];
  • Initializing an Array: Java provides the means of declaring, constructing, and explicitly initializing an array in one declaration statement:
    <element type>[] <array name> = { <array initialize list> };
  • Using an Array: The whole array is referenced by the array name, but individual array elements are accessed by specifying an index with the [] operator. The array element access expression has the following syntax:
    <array name> [<index expression>]
  • Anonymous Arrays:
    <element type>[] <array name> = new <element type>[] { <array initialize list> };
    can be used to declare an array for example
    int[] myArray = new int[] {1, 4, 6, 8}; 
  • Multidimensional Arrays: An array element can be an object reference and arrays are objects, array elements can themselves reference other arrays. In Java, an array of arrays can be defined as follows:
    <element type>[][]...[] <array name>;
    or <element type> <array name>[][]...[];

Saturday 27 May 2017

Java Source File Structure

Java Source File Structure

A Java source file can have the following elements that, if present, must be specified in the following order
  • An optional package declaration to specify a package name.
  • Zero or more import declarations. Since import declarations introduce class and interface names in the source code, they must be placed before any type declarations.
  • Any number of top-level class and interface declarations. Since these declarations belong to the same package, they are said to be defined at the top level, which is the package level.
  • The classes and interfaces can be defined in any order. Class and interface declarations are collectively known as type declarations. Technically, a source file need not have any such definitions, but that is hardly useful.


The Java 2 SDK imposes the restriction that at the most one public class definition per source file can be defined. If a public class is defined, the file name must match this public class. If the public class name is MyApp, then the file name must be MyApp.java.



The main() Method 
  • The Java interpreter executes a method called main in the class specified on the command line.
  • Any class can have a main() method, but only the main() method of the class specified to the Java interpreter is executed to start a Java application.
  • The main() method must have public accessibility so that the interpreter can call it.
  • It is a static method belonging to the class, so that no object of the class is required to start the execution.
  • It does not return a value, that is, it is declared void.
  • It always has an array of String objects as its only formal parameter. This array contains any arguments passed to the program on the command line.
  • All this adds up to the definition of the main() method:

public static void main(String[] args) { // ... }

Wednesday 24 May 2017

Java Language Fundamentals

Java Language Fundamentals

Identifiers
  • A name in a program is called an identifier.
  • Identifiers can be used to denote classes, methods, variables, and labels.
  • In Java an identifier is composed of a sequence of characters, where each character can be either a letter, a digit, a connecting punctuation (such as underscore _), or any currency symbol (such as $, ¢, ¥, or £). However, the first character in an identifier cannot be a digit.
  • Identifiers in Java are case sensitive, for example, price and Price are two different identifiers.

Examples of Legal Identifiers: number, Number, sum_$, bingo, $$_100, mål, grüß 
Examples of Illegal Identifiers: 48chevy, all@hands, grand-sum

Keywords
  • Keywords are reserved identifiers that are predefined in the language and cannot be used to denote other entities.
  • All the keywords are in lowercase, and incorrect usage results in compilation errors.



Literals
  • A literal denotes a constant value, that is, the value a literal represents remains unchanged in the program. Identifiers can be used to denote classes, methods, variables, and labels.
  • Literals represent numerical (integer or floating-point), character, boolean or string values. In addition, there is the literal null that represents the null reference.

Examples of literals
  • Integer 2000, 0, -7 
  • Floating-point 3.14, -3.14, .5, 0.5
  • Character 'a‘, 'A‘, '0‘, ':‘, '-‘, ')' 
  • Boolean true, false 
  • String "abba“, "3.14“, "for“, "a piece of the action“

Comments
A program can be documented by inserting comments at relevant places. These comments are for documentation purposes and are ignored by the compiler.
Java provides three types of comments to document a program:
  • A single-line comment: // ... to the end of the line
  • A multiple-line comment: /* ... */
  • A documentation (Javadoc) comment: /** ... */

Primitive data types
Primitive data types in Java can be divided into three main categories:
  • Integral types— represent signed integers (byte, short, int, long) and unsigned character values (char)
  • Floating-point types (float, double)— represent fractional signed numbers
  • Boolean type (boolean)— represent logical values


Primitive data values are not objects. Each primitive data type defines the range of values in the data type, and operations on these values are defined by special operators in the language.

Variable declaration
A variable stores a value of a particular type. A variable has a name, a type, and a value associated with it. In Java, variables can only store values of primitive data types and references to objects. Variables that store references to objects are called reference variables.

Declaring and Initializing Variables
Variable declarations are used to specify the type and the name of variables. This implicitly determines their memory allocation and the values that can be stored in them.
  • char a, b, c; // a, b and c are character variables.
  • double area; // area is a floating-point variable.
  • boolean flag; // flag is a boolean variable.

A declaration can also include initialization code to specify an appropriate initial value for the variable:
  • int i = 10; // i is an int variable with initial value 10.
  • long big = 2147483648L; // big is a long variable with specified initial value.

Object Reference Variables, An object reference is a value that denotes an object in Java. Such reference values can be stored in variables and used to manipulate the object denoted by the reference value. Before we can use a reference variable to manipulate an object, it must be declared and initialized with the reference value of the object.
  • Pizza yummyPizza; // Variable yummyPizza can reference objects of class Pizza.
  • Hamburger bigOne; // Variable bigOne can reference objects of class Hamburger
  • Pizza yummyPizza = new Pizza("Hot&Spicy"); // Declaration with initializer.