首页 > 编程语言 >Java【包】

Java【包】

时间:2024-10-20 12:53:05浏览次数:3  
标签:包中 java package class import Java public

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用

  • 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
  • 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的。当同时调用两个不同包中相同类名的类时,应该加上包名加以区别,防止命名冲突
  • 包限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

创建包

  • 一个包可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。由于包创建了新的命名空间,所以不会跟其他包中的任何名字产生命名冲突。
  • 创建包的时候,为这个包取名,使用小写的字母来命名避免与类、接口名字的冲突。如果之后其他源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头
  • 包声明应该在源文件的第一行每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
  • 如果源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包中。

使用包语句

语法格式

package pkg1[.pkg2[.pkg3…]];

一个Something.java 文件内容:它的保存路径应该是 net/java/util/Something.java 。 

package net.java.util;

public class Something{ ... }

在 animals 包中加入一个接口(interface):

* 文件名: Animal.java */
package animals; 
interface Animal { 
    public void eat(); 
    public void travel(); 
}

 接下来,在同一个包中加入该接口的实现:

/* 文件名 : MammalInt.java */
package animals;
public class MammalInt implements Animal{ 
    public void eat(){ 
        System.out.println("Mammal eats"); 
    } 
    public void travel(){ 
        System.out.println("Mammal travels"); 
    } 
    public int noOfLegs(){ 
        return 0; 
    } 
    public static void main(String args[]){ 
        MammalInt m = new MammalInt(); 
        m.eat(); 
        m.travel(); 
    } 
}

编译这两个文件,并把他们放在一个叫做 animals 的子目录中。 用下面的命令来运行:

$ mkdir animals
$ cp Animal.class  MammalInt.class animals
$ java animals/MammalInt
Mammal eats
Mammal travel

 


import 关键字

  • 使用某一个包的成员时,需要在程序中用 import 关键字用于导入其他类或包中定义的类型。
  • 在导入类或包时,需要提供类或包的完全限定名。完全限定名包括包名和类名的组合
  • import 关键字用于引入其他包中的类、接口或静态成员,它允许你在代码中直接使用其他包中的类,而不需要完整地指定类的包名。在同一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。

在类文件中可以包含任意数量的 import 声明。import 声明必须在包声明之后,类声明之前

语法格式

import package1[.package2…].(classname|*);

// 第一行非注释行是 package 语句
package com.example; 
// import 语句引入其他包中的类
import java.util.ArrayList;
import java.util.List; 
// 类的定义
public class MyClass { 
    // 类的成员和方法 
}

可以使用 import语句来引入一个特定的类:

import com.example.MyClass;

也可以使用通配符 * 来引入整个包或包的子包:

import com.example.mypackage.*;

下面的 payroll 包已经包含了 Employee 类,接下来向 payroll 包中添加一个 Boss 类。Boss 类引用 Employee 类的时候可以不用使用 payroll 前缀

package payroll;
public class Boss { 
    public void payEmployee(Employee e) { 
        e.mailCheck(); 
    } 
}

如果 Boss 类不在 payroll 包中,Boss 类必须使用下面几种方法之一来引用其他包中的类:

// 使用类全名描述:
payroll.Employee

// 用 import 关键字引入,使用通配符 *:
import payroll.*;

// 使用 import 关键字引入 Employee 类:
import payroll.Employee;


package 的目录结构

类放在包中:

  • 包名成为类名的一部分
  • 包名必须与相应的字节码所在的目录结构相吻合。

将类、接口等类型的源码放在一个文本中,文件的名字就是这个类型的名字,并以.java作为扩展名。

// 文件名:Car.java
package vehicle; 
public class Car { 
    // 类实现 
}

接下来,把源文件放在一个目录中,这个目录要对应类所在包的名字。

....\vehicle\Car.java

现在,正确的类名和路径是:

  • 类名 -> vehicle.Car

  • 路径名 -> vehicle\Car.java (windows)

编译时,编译器为包中定义的每个类、接口等类型各创建一个不同的输出文件,输出文件的名字就是这个类型的名字,并加上 .class 作为扩展后缀。 

// 文件名: Car.java
package com.car.test;
public class BYD { }
class NIO { }

用 -d 选项来编译这个文件:

$javac -d . Car.java

这样会像下面这样放置编译了的文件:

.\com\car\test\BYD.class
.\com\car\test\NIO.class

编译之后的 .class 文件应该和 .java 源文件一样,它们放置的目录应该跟包的名字对应起来。但是,并不要求 .class 文件的路径跟相应的 .java 的路径一样;可以分开来安排源码和类的目录。

<path-one>\sources\com\car\test\BYD.java
<path-two>\classes\com\car\test\NIO.class

类目录绝对路径叫做 class path,设置在系统变量 CLASSPATH 中。编译器和 java 虚拟机通过将 package 名字加到 class path 后来构造 .class 文件的路径。

一个 class path 可能会包含好几个路径,多路径应该用分隔符分开。默认情况下,编译器和 JVM 查找当前目录JAR 文件按包含 Java 平台相关的类,所以目录默认放在了 class path 中。

标签:包中,java,package,class,import,Java,public
From: https://blog.csdn.net/weixin_74417251/article/details/143090330

相关文章

  • 16.java面向对象:面向对象的三大特征总结
    java面向对象:面向对象的三大特征面向对象的三大特征1.封装get和set规范属性的合法化2.继承类继承子类调用父类方法super的用法通过super调用父类public的属性super注意点super对比this方法重写静态方法中奇怪的现象非静态方法3.多态多态存在的条件多态中成员访问特点......
  • 14.java面向对象:继承
    继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。extands的意思是“扩展”。子类是父类的扩展。JAVA中类只有单继承,没有多继承!继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。继承关系的俩个类,一个为子类(派生类),一......
  • JavaScript 的基础语法和数据类型的概述
    JavaScript是一种广泛使用的编程语言,主要用于Web开发。它拥有简洁的语法和丰富的功能。以下是JavaScript的基础语法和数据类型的概述。基础语法变量声明使用var、let或const关键字声明变量。varname="Alice";letage=25;constpi=3.14;数据类型J......
  • Java继承机制深度解析:细探private与protected权限控制
    private和protected是Java中的两种访问修饰符,用于控制类成员(字段和方法)的访问权限。它们在设计类和实现封装、继承多态性方面具有重要作用。下面详细说明它们的区别和含义。1.private修饰符含义:被private修饰的成员(字段或方法)只能在定义它们的类内部访问。其他......
  • 码城|挑战中,Java面试题复习第3天,坚持就是胜利【悟空非空也】
     ......
  • java计算机毕业设计在线学习系统设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的迅猛发展,互联网已经深入到社会的各个角落。在教育领域,传统的教学模式受到了前所未有的挑战与机遇。传统教学往往受限于时间和空间......
  • java计算机毕业设计基于JavaEE的空竹传统文化交流平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着现代社会的快速发展,传统文化的传承面临着诸多挑战。在全球化和现代化的进程中,传统文化逐渐被边缘化,部分传统文化甚至面临失传的危险。空竹作......
  • Java之集合介绍
    一、Java集合概述Java集合框架(JavaCollectionsFramework)是Java提供的一套用于存储和操作数据的接口、实现类和算法的统一架构。它大大简化了数据处理的复杂性,提高了代码的可重用性和效率。集合框架主要由几个核心接口组成,每个接口定义了一组操作和行为,具体实现类则提供了......
  • [Java基础] 集合框架
    往期回顾[Java基础]基本数据类型[Java基础]运算符[Java基础]流程控制[Java基础]面向对象编程[Java基础]集合框架[Java基础]输入输出流[Java基础]异常处理机制[Java基础]Lambda表达式目录List接口数据结构最佳实践实战代码Set接口数据结构最佳实践......
  • Java中的锁 -- 开篇
    Java中的锁1.顶级接口LockJavaSE5之后并发包中新增了Lock接口,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关......