>  기사  >  Java  >  Java 패키지 요약

Java 패키지 요약

little bottle
little bottle앞으로
2019-04-08 16:24:533209검색

Java의 패키지는 트리 구조의 경로이기 때문에 폴더 , 로 이해할 수 있습니다. 패키지를 사용하여 특정 패키지 아래에 패키지를 선언할 때 .class도 배치해야 합니다. 패키지 이름을 딴 디렉터리에 있어야 합니다. 그렇지 않으면 클래스를 찾을 수 없습니다.

클래스를 패키지에 넣으려면 package 문을 사용해야 합니다. 실제로 package 문을 사용하지 않으면 클래스가 기본 기본 패키지에 배치됩니다. 프로그램, 실행 디렉터리 아래에 동일한 이름을 가진 .class 파일이 있을 수 없습니다.

또한 완전한 클래스 이름은 패키지 이름 + 클래스 이름입니다. 가져오기를 사용하지 않으면 클래스 사용 시 java.util.Date와 같이 완전한 클래스 이름을 제공해야 합니다. 편의를 위해 Java는 java.lang 두 패키지와 현재 파일의 기본 패키지를 자동으로 가져옵니다. 즉, (1) Java는 java.lang에서 클래스를 사용할 때 다른 패키지가 전체 클래스 이름을 제공할 필요가 없다고 규정합니다. lang package; (2) ) 기본 패키지의 클래스는 전체 클래스 이름을 지정하지 않고도 서로 함께(또는 동일한 패키지 아래에서) 사용할 수 있습니다.

패키지된 클래스와 패키지되지 않은 클래스 간의 상호 액세스에는 다음과 같은 규칙이 있습니다. (1) 패키지되지 않은 클래스는 패키지된 클래스에 액세스할 수 있으며 직접 가져올 수 있습니다. (2) 패키지된 클래스는 패키지되지 않은 클래스에 직접 액세스할 수 없습니다. 동일한 패키지에 접근권한이 있어야 하며, 패키지가 없는 클래스는 import할 수 없습니다. (3) 클래스 정의 시 다른 사람이 사용할 수 있도록 Bag을 정의해야 합니다.

            Java 패키지는 (경로 관점에서) 계층적으로 보이지만 실제로는 그렇지 않습니다. 예를 들어 java.awt와 java.awt.color는 동일한 상태를 갖는 두 개의 패키지입니다. java.awt.color는 java.awt에 속하지 않습니다.使用 클래스 이름에 클래스를 사용할 때는 먼저 현재 패키지에서 이 클래스를 찾고, 가져오지 않은 패키지에서 찾으세요.

패키지의 구성원

일부 관련 클래스, 인터페이스, 열거형, 주석 유형, 그림과 같이 패키지의 클래스에서 사용하는 리소스 파일 등

패키지의 역할

(1) 관련 인터페이스와 클래스를 함께 모으세요

예를 들어 그래픽 처리 관련 모듈을 함께 묶는 패키지 그래픽

(2) 유형 간의 이름 충돌 방지: 패키지는 일종의 캡슐화 역할을 하며 클래스에 대한 다층 네임스페이스를 제공합니다.

(3) 패키지에 대한 외부 액세스 제어 구현

패키지 사용(패키지 선언, 가져오기)

일반적으로 패키지 사용은 세 단계로 요약할 수 있습니다. 클래스와 인터페이스를 패키지로 묶는 방법, 방법 패키지의 클래스를 사용하는 방법, 컴파일러가 소스 파일을 찾을 수 있도록 파일 시스템을 정렬하는 방법 등을 설명합니다.

1. 패키지 정의

1. 패키지 클래스 선언

패키지 이름은 일반적으로 모두 소문자이며 "."로 구분됩니다.

패키지 명명 규칙은 다음 링크를 참조하세요: https://segmentfault.com/a/1190000008711718

                                                                                   https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html

패키지 선언은 다음과 같습니다. 원칙: (1) 패키지 문은 소스 파일의 시작 부분에 있어야 합니다. (2) 소스 파일에는 하나의 패키지 문만 있을 수 있습니다. (3) 패키지 이름은 모두 소문자여야 합니다. 클래스 및 인터페이스 이름과의 충돌을 피하십시오.

2. 패키지된 class

javac -d 디렉토리 소스 파일 이름.java

3. 패키지된 class

java 패키지 이름.classname

2을 실행합니다. 다른 패키지는 상대적으로 간단하며 코드의 클래스 이름과 함께 직접 사용할 수 있습니다. 다른 패키지 간의 액세스는 조건을 충족해야 합니다. 클래스가 다른 패키지의 클래스에서 액세스하려면 public으로 수정해야 합니다(참고: 사용). public으로 수정된 클래스는 파일명과 동일해야 합니다.) 일반적으로 서로 다른 패키지 간에 사용할 수 있는 세 가지 방법이 있습니다. (1) 클래스에 액세스하려면 전체 이름을 사용하고, (2) 클래스를 포함하는 전체 패키지를 가져옵니다.

1. Circle 클래스(공개 수정)가 있는 A 그래픽 패키지가 있다고 가정하면 이에 대한 아웃소싱 액세스는 다음과 같습니다.

graphics.Circle cir = new graphics.Circle();

2. 이 클래스 가져오기

위의 전체 이름을 사용하는 방법은 약간 번거롭습니다. 이 클래스를 축약하거나 자주 사용하려면 다음과 같이 할 수 있습니다:

import graphics.Circle;

public class PackageTest {
    public static void main(String[] args) {
        Circle cir = new Circle();
    }
}

3. 전체 패키지를 가져옵니다

Line 클래스와 같이 패키지의 클래스를 더 많이 사용하려면 다음과 같은 모든 클래스를 가져올 수 있습니다. 패키지:

import graphics.*;

public class PackageTest {
    public static void main(String[] args) {
        Circle cir = new Circle();
        Line line = new Line();
    }
}

三、管理文件系统

许多Java平台的实现依赖于文件系统的等级制度 来管理源文件和class文件。我们一般把类、接口、枚举、注释类型放在可以反映包名的目录中,比如,Rectangle.java属于graphics类,我们就放在.....\graphics\Rectangle.java的路径上。同样,我们对其进行编译产生的class文件也要放在类似的目录上(这个目录最好不要和源文件放在一起),这样的好处是当我们要复用某个类时,就知道到哪去找了,JVM在运行程序时也知道去哪里找类。

比如,源文件放在:86a15073ee07a5288ef78984c38cc44e\sources\com\example\graphics\Rectangle.java

class文件放在:1c88c48f018631bbf99e30d7795bbcba\classes\com\example\graphics\Rectangle.class,其中,1c88c48f018631bbf99e30d7795bbcba\classes是类路径(class path),由CLASSPATH系统变量进行设置,而包名是com.example.graphics。编译器、JVM通过将包名称添加到类路径来构造.class文件的路径。

所以编译器、JVM在路径1c88c48f018631bbf99e30d7795bbcba\classes\com\example\graphics中查找类文件。class path可以有好几条,由分号(Windows)或冒号(UNIX)分隔。 默认情况下,编译器、JVM搜索当前目录和包含Java平台类的JAR文件,所以这些目录自动位于类路径中。

CLASSPATH是JVM或Java编译器中的一个参数,它指定用户定义的类和包的位置。 可以在命令行上或通过环境变量设置。默认情况下,我们访问JDK标准API和扩展包时,无需设置查找位置。 而用户自定义的包和库,则必须设置。由于JVM会在当前目录下搜索,所以当我们的文件都在运行目录下时,也可以不设置CLASSPATH。

有关CLASSPATH可以参考:

https://en.wikipedia.org/wiki/Classpath_%28Java%29

https://en.wikipedia.org/wiki/Java_Classloader

关于Import

关于import,有三个注意的地方。

1、

首先是,Java的包表面上的等级问题。从路径上看,包似乎是分层的,但它们不是。 例如,Java API包括java.awt包,java.awt.color包,java.awt.font包等等。但是,java.awt.color包、java.awt.font包和其他java.awt.xxxx包并不属于java.awt。 前缀java.awt(The Java abstract window toolkit)的作用只是告诉开发者——和窗口有关的包都在这里面。但是包和包之间并不是包含关系。

当你导入java.awt.*时,会导入java.awt包中的所有类型,但它不会导入java.awt.color,java.awt.font或任何其他java.awt.xxxx包的所有类型。 如果你要使用java.awt.color中的类以及java.awt中的类,则必须同时导入导入这两个包:

import java.awt.*;
import java.awt.color.*;

2、

其次是名字含糊不清的问题。当你导入的两个包中有一个类名字相同时,如果你继续采用缩写,就会出现一些问题。这时,你就要使用这个类的全名。比如,java.util、java.sql包中都有Date类,程序又同时导入了这两个包中的Date类。

import java.sql.*;
import java.date.*;

3、static import

当我们需要频繁访问某个类的常量和静态方法,反复写它们的前缀(全名)可能不利于代码阅读。 静态import语句就提供了一种导入要使用的常量和静态方法的方法,这样您就不需要为其名称添加前缀。比如java.lang.Math类定义PI常量和许多静态方法,包括计算正弦,余弦,切线,平方根,最大值,最小值,指数等。

import static java.lang.Math.PI;
import static java.lang.Math.cos;

public class ImportTest {
    public static void main(String[] args) {
        double r = Math.cos(Math.PI * 2);
		double r1 = Math.cos(PI * 2);
		double r2 = cos(PI * 2);
		System.out.println(r+" "+r1+" "+r2);    
    }
}

当然,你也可以直接全部导入:

import static java.lang.Math.*;

应该注意的是,使用静态导入时要非常谨慎。 过度使用静态导入会导致代码难以阅读和维护,因为阅读者不知道某个特定的静态对象是哪个类的。 不过,当我们恰当地使用静态导入时,代码可以因为不用繁琐地写全名而更具可读性。

 【推荐课程:Java视频教程】   

위 내용은 Java 패키지 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제