Engineering Full Stack Apps with Java and JavaScript
To access a class or method from another package we need to either use the fully qualified name (e.g. com.javajee.MyClass) or we can use the import statements.
You can use an import statement to import a single class (import java.util.List;) or all classes of a package (import java.util.*;). Remember that you can import only types (classes and interfaces, but not methods) using a regular import.
Consider an example:
package util;
public class BitUtils {
public static void process(byte[] b) { /* some code here */ }
}
You can access the static method process from another package either as:
util.BitUtils.process(bytes);
or using an import statement and then use the class name without qualifier as:
import util.BitUtils;
...
BitUtils.process(bytes);
What if the process method was default (no access modifier specified)? You cannot use a default access method from another package, as default members are not accessible outside the package.
When you use an import statement you are declaring only the package and not any sub packages. Therefore import java.util.*; import all of the classes in the java.util package, but not the java.util.jar classes or java.util.regex packages.
Regular import can import only types (classes and interfaces, but not methods). Static imports can import a class's static members (variables and methods) as well.
Consider our BitUtils example again:
package util;
public class BitUtils {
public static void process(byte[] b) { /* some code here */ }
}
You can also use a static import as:
import static util.BitUtils.process;
and then simply use the process method as:
process(bytes);
You can also use the fully qualified name and regular import here.
Another very common example is to use a static import for System.out.println as:
import static java.lang.System.out;
And then using it as:
out.println();
Even if the feature is called static import, syntax is import static.
Below packages from JDK are automatically imported into your code by Java:
java.lang package
default package (package with no name). However the use of default package is not a good practice.
The class or method should also be accessible, even if we have the import statement or use a fully qualified name. Accessibility is based on the access modifiers: Private members are accessible only within the same class. So you won't be able to access a private member even with fully qualified name or an import statement.
Classes within the same package can access each other without the import statement or a fully qualified name.
You cannot access a class that is defined in the default package from a class in any other package.
You can only import one package (i.e. all classes in that package) using a * or one class in an import statement. Following is an invalid import: import com.*.*;
When importing classes in packages, you do not use static keyword. Static keyword is used for importing static members of a class.
If your package structure is com.javajee.examples, and you import com.*, it will only import classes under com folder and not the ones under javajee or examples.