Content deleted Content added
No edit summary Tags: Mobile edit Mobile web edit |
|||
(69 intermediate revisions by 58 users not shown) | |||
Line 1:
{{Short description|Package of Java software}}
A '''Java package''' organizes [[Java (programming language)|Java]] [[class (computer science)|classes]] into [[namespaces]],<ref>James Gosling, Bill Joy, Guy Steele, Gilad Bracha, ''The Java Language Specification, Third Edition'', {{ISBN|0-321-24678-0}}, 2005. In the Introduction, it is stated "Chapter 7 describes the structure of a program, which is organized into packages similar to the modules of Modula."</ref>
providing a unique namespace for each type it contains.
Classes in the same package can access each other's package-private and protected members.
In general, a package can contain the following kinds of [[Datatypes|types]]: classes, [[Interface (Java)|interfaces]], enumerations, records and [[Java annotation|annotation]] types. A package allows a developer to group classes (and interfaces) together. These classes will all be related in some way – they might all have to do with a specific application or perform a specific set of tasks.
Programmers also typically use packages to organize classes belonging to the same category or providing similar functionality.
==Using packages==
In a Java source file, the package that this file's class or classes belong to is specified with the
<code>package</code> [[keyword (computer programming)|keyword]]. This keyword is usually the first keyword in the source file. At most one package declaration can appear in a source file. <
package java.awt.event;
</syntaxhighlight>
To use a package's classes inside a Java source file, it is convenient to import the classes from the package with an <code>import</code> declaration. The following declaration
<
import java.awt.event.*;
</syntaxhighlight>
imports all classes from the <code>java.awt.event</code> package, while the next declaration
<
import java.awt.event.ActionEvent;
</syntaxhighlight>
imports only the <code>ActionEvent</code> class from the package. After either of these import declarations, the <code>ActionEvent</code> class can be referenced using its simple class name:
<
ActionEvent myEvent = new ActionEvent();
</syntaxhighlight>
Classes can also be used directly without an import declaration by using the fully qualified name of the class. For example,
<
java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();
</syntaxhighlight>
does not require a preceding import declaration.
===Package-wide Javadoc & annotations===
===The unnamed package===▼
▲===The unnamed package===
If a package declaration is not used, classes are placed in an unnamed package. Classes in an unnamed package cannot be imported by classes in any other package.<ref>{{cite web|url=http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5 |title=Chapter 7. Packages |publisher=Docs.oracle.com |access-date=2013-09-15}}</ref> The official Java Tutorial advises against this:
:Generally speaking, an unnamed package is only for small or temporary applications or when you are just beginning the development process. Otherwise, classes and interfaces belong in named packages.<ref>
==Package access protection==
Public members and classes are visible everywhere and private members are visible only in the same class. Classes within a package can access classes and members declared with ''default'' (''package-private'') access as well as class members declared with the ''<code>protected</code>'' access modifier. Default (package-private) access is enforced when a class or member has not been declared as <code>public</code>, <code>protected</code> or <code>private</code>. By contrast, classes in other packages cannot access classes and members declared with default access. However, class members declared as <code>protected</code> can be accessed from the classes in the same package as well as classes in other packages that are subclasses of the declaring class.<ref>
==Creation of JAR files==
Line 54 ⟶ 57:
In general, a package name begins with the top level ___domain name of the organization and then the organization's ___domain and then any subdomains, listed in reverse order. The organization can then choose a specific name for its package. Subsequent components of the package name vary according to an organization's own internal naming conventions.<ref>[http://www.oracle.com/technetwork/java/codeconventions-135099.html Code Conventions for the Java Programming Language: 9. Naming Conventions]</ref>
For example, if an organization in Canada called MySoft creates a package to deal with fractions, naming the package <
Complete conventions for disambiguating package names and rules for naming packages when the Internet ___domain name cannot be directly used as a package name are described in section 7.7 of the Java Language Specification.<ref>
==Core packages in Java SE 8==
{{main|Java Platform, Standard Edition}}
{| class="wikitable plainrowheaders"
! scope="row" | {{code|java.lang}}
|
|-
! scope="row" | {{code|java.util}}
|
|-
! scope="row" | {{code|java.io}}
|
|-
! scope="row" | {{code|java.math}}
| Multiprecision arithmetics
|-
! scope="row" | {{code|java.nio}}
|
|-
! scope="row" | {{code|java.net}}
|
|-
! scope="row" | {{code|java.security
| |-
! scope="row" | {{code|java.sql
| |-
! scope="row" | {{code|java.awt
| |-
! scope="row" | {{code|java.text}}
|
|-
! scope="row" | {{code|java.rmi}}
|
|-
! scope="row" | {{code|java.time
| |-
! scope="row" | {{code|java.beans
| |-
! scope="row" | {{code|java.applet}}
| This package provides classes and methods to create and communicate with the applets.
|}
==Modules==
{{details|Java Platform Module System}}
In [[Java 9]] (released on September 21, 2017) support for "[[modular programming|modules]]", a kind of collection of packages,
Modules
| url=http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html
| title=JDK Module Summary
| publisher=[[Oracle Corporation]]
| date=2015-10-23
|
| archive-date=2015-12-08
| archive-url=https://web.archive.org/web/20151208074800/http://cr.openjdk.java.net/~mr/jigsaw/ea/module-summary.html
| url-status=dead
}}</ref><ref>{{cite web |url=https://www.oracle.com/corporate/features/understanding-java-9-modules.html |title=Understanding Java 9 Modules | publisher=[[Oracle Corporation]]| date=October 1, 2017| access-date=2022-10-04}}</ref> For example, the majority of the Java standard library is exported by the module <code>java.base</code>.
As an example, the following module declaration declares that the module ''com.foo.bar'' depends on another ''com.foo.baz'' module, and exports the following packages: ''com.foo.bar.alpha'' and ''com.foo.bar.beta'':
<syntaxhighlight lang="cpp">
module com.foo.bar {
requires com.foo.baz;
exports com.foo.bar.alpha;
exports com.foo.bar.beta;
}
</syntaxhighlight>
==See also==
* [[Translation unit (programming)]]
* [[Modules (C++)]]
==References==
Line 109 ⟶ 144:
[[Category:Java (programming language)|Package]]
[[Category:Modularity]]
|