Blog about Programming Languages & Coding

Blog about Programming Languages & Coding
Contents for Computer Science, IT, B.Sc. CS & IT, M.Sc. CS & IT, MCA, BE CS & IT, ME CS & IT , Interview Questions, Books and Online Course Recommendations from Udemy, Coursera, etc

Packages in Java

 

 

Packages

Packages are used in Java in order to prevent naming conflicts, to control access, to make searching/locating and usage of classes, interfaces, enumerations and annotations easier, etc.

Package can be defined as a grouping of related types (classes, interfaces, enumerations and annotations) providing access protection and namespace management.

Some of the existing packages in Java are −

·      java.lang − bundles the fundamental classes

·      java.util - The java.util package contains the collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).

·      java.io − classes for input , output functions are bundled in this package

Advantage of Java Package

1) Java package is used to categorize the classes and interfaces so that they can be easily maintained.

2) Java package provides access protection.

3) Java package removes naming collision.

Programmers can define their own packages to bundle group of classes/interfaces, etc.

It is a good practice to group related classes implemented by you so that a programmer can easily determine that the classes, interfaces, enumerations, and annotations are related.

Since the package creates a new namespace there won't be any name conflicts with names in other packages. Using packages, it is easier to provide access control and it is also easier to locate the related classes.

Creating a Package

While creating a package, you should choose a name for the package and include a package statement along with that name at the top of every source file that contains the classes, interfaces, enumerations, and annotation types that you want to include in the package.

The package statement should be the first line in the source file. There can be only one package statement in each source file, and it applies to all types in the file.

If a package statement is not used then the class, interfaces, enumerations, and annotation types will be placed in the current default package.

Simple example of java package

The package keyword is used to create a package in java.

1.   //save as Simple.java  

2.   package mypack;  

3.   public class Simple{  

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

5.       System.out.println("Welcome to package");  

6.      }  

7.   }  

How to compile java package

If you are not using any IDE, you need to follow the syntax given below:

1.   javac -d directory javafilename  

For example

1.   javac -d . Simple.java  

The -d switch specifies the destination where to put the generated class file. You can use any directory name like d:/abc (in case of windows) etc. If you want to keep the package within the same directory, you can use . (dot).


How to run java package program

You need to use fully qualified name e.g. mypack.Simple etc to run the class.


To Compile: javac -d . Simple.java

To Run: java mypack.Simple

Output:Welcome to package

The -d is a switch that tells the compiler where to put the class file i.e. it represents destination. The . represents the current folder.

 

Access Protection

Java provides many levels of protection to allow fine-grained control over the visibility of variables and methods within classes, subclasses, and packages.

 

Classes and packages are both means of encapsulating and containing the name space

and scope of variables and methods.

Packages act as containers for classes and other subordinate packages. Classes act as containers for data and code. The class is Java’s smallest unit of abstraction. Because of the interplay between classes and packages, Java addresses four categories of visibility for class members:

 

• Subclasses in the same package

• Non-subclasses in the same package

• Subclasses in different packages

• Classes that are neither in the same package nor subclasses

 

The three access modifiers, private, public, and protected, provide a variety of ways to

produce the many levels of access required by these categories. Table-1 sums up the

interactions.

Ø  Anything declared public can be accessed from anywhere.
Anything declared
private cannot be seen outside of its class.

Ø  When a member does not have an explicit access specification, it is visible to subclasses as well as to other classes in the same package. This is the default access.

Ø  If you want to allow an element to be seen outside your current package, but only to classes that subclass your class directly, then declare that element protected.

Table-1

 


The import Keyword:

If a class wants to use another class in the same package, the package name need not be used. Classes in the same package find each other without any special syntax.

Example

Here, a class named Boss is added to the payroll package that already contains Employee. The Boss can then refer to the Employee class without using the payroll prefix, as demonstrated by the following Boss class.

package payroll;

public class Boss {

   public void payEmployee() {

           Employee e=new Employee();

           e.mailCheck();

   }

}

What happens if the Employee class is not in the payroll package? The Boss class must then use one of the following techniques for referring to a class in a different package.

  • The fully qualified name of the class can be used. For example −

payroll.Employee

·      The package can be imported using the import keyword and the wild card (*). For example −

import payroll.*;

  • The class itself can be imported using the import keyword. For example −

import payroll.Employee;

Note − A class file can contain any number of import statements. The import statements must appear after the package statement and before the class declaration.

 

How to access package from another package?

There are three ways to access the package from outside the package.

1.   import package.*;

2.   import package.classname;

3.   fully qualified name.

1) Using packagename.*

If you use package.* then all the classes and interfaces of this package will be accessible but not subpackages.

The import keyword is used to make the classes and interface of another package accessible to the current package.

//save by A.java 

package pack; 

public class A{ 

  public void msg(){System.out.println("Hello");} 

} 

//save by B.java 

package mypack; 

import pack.*; 

class B{ 

  public static void main(String args[]){ 

   A obj = new A(); 

   obj.msg(); 

  } 

} 

Output:Hello

2) Using packagename.classname

If you import package.classname then only declared class of this package will be accessible.

//save by A.java 

package pack; 

public class A{ 

  public void msg(){System.out.println("Hello");} 

} 

//save by B.java 

package mypack; 

import pack.A; 

 class B{ 

  public static void main(String args[]){ 

   A obj = new A(); 

   obj.msg(); 

  } 

} 

Output:Hello

3) Using fully qualified name

If you use fully qualified name then only declared class of this package will be accessible. Now there is no need to import. But you need to use fully qualified name every time when you are accessing the class or interface.

It is generally used when two packages have same class name e.g. java.util and java.sql packages contain Date class.

//save by A.java 

package pack; 

public class A{ 

  public void msg(){System.out.println("Hello");} 

} 

//save by B.java 

package mypack; 

class B{ 

  public static void main(String args[]){ 

   pack.A obj = new pack.A();//using fully qualified name 

   obj.msg(); 

  } 

} 

Output:Hello

Note: If you import a package, subpackages will not be imported.

If you import a package, all the classes and interface of that package will be imported excluding the classes and interfaces of the subpackages. Hence, you need to import the subpackage as well.

Note: Sequence of the program must be package then import then class.

 

Predefined packages :

java.lang

java.lang is automatically imported into all programs. It contains classes and interfaces that are fundamental to virtually all of Java programming. It is Java’s most widely used package.   java.lang includes the following classes:

 

java.util:

This important package contains a large assortment of classes and interfaces that support a broad range of functionality. For example, java.util has classes that generate pseudorandom numbers, manage date and time, observe events, manipulate sets of bits, tokenize strings, and handle formatted data. The java.util package also contains one of Java’s most powerful subsystems: the Collections Framework. The Collections Framework is a sophisticated hierarchy of interfaces and classes that provide state-of-the-art technology for managing groups of objects. It merits close attention by all programmers.

 

Because java.util contains a wide array of functionality, it is quite large. Here is a list of its top-level classes:

Packages in Java Packages in Java Reviewed by Asst. Prof. Sunita Rai on July 11, 2022 Rating: 5

No comments:

Powered by Blogger.