package_packages - CSDN
精华内容
参与话题
  • Java中package(包)的总结(一)

    千次阅读 多人点赞 2018-09-10 21:13:09
    概述  Java程序是基于Class,随着Java类越写越多,难免会出现类重名的现象。为了在使用它们的时候不让编译器混淆,我们给类加上一个限定(前缀),即把它们放在不同的包里面,调用时再加上前缀。...

    概述

           Java程序是基于Class,随着Java类越写越多,难免会出现类重名的现象。为了在使用它们的时候不让编译器混淆,我们给类加上一个限定(前缀),即把它们放在不同的包里面,调用时再加上前缀。比如,A班有一个张三,B班也有一个张三,我们要让A班张三做某事时,就把它们分别放到A、B包中,然后调用A.张三即可。这样好处是对同名的类进行了区分;能精确指出我们需要的哪一个;让同名的类在一个程序中共存。

           要把类放到某个包需要用package语句,事实上,当我们没有使用package语句时,我们的类都被放到了一个默认缺省包,这也是为什么我们运行Java程序时,在运行目录下面不能有同名的.class文件。

           此外,一个完整类名是包名+类名,在没有import导入的情况下,使用一个类需要给出完整的类名,如java.util.Date。为了方便,Java自动导入两个包java.lang和现在文件的缺省包,也就是说:(1)Java规定,其他包使用java.lang包中的类时无需给出完整类名;(2)缺省包中的类之间(或者说同一个包下面)互相使用也不需要给出完整类名。

           包,可以理解成文件夹,因为它是一种树形结构的路径,当我们用package把包声明到某个package下面时,我们也要把它的.class放到以该package为名字的目录下,否则将找不到类。

           有包的类和无包的类互相访问有以下规则:(1)无包的类可以访问有包的类, 直接导入即可;(2)有包的类无法访问无包的类, 直接访问是找同一个包中的, 由于不同包需要导入, 而无包的类无法导入;(3)在定义类的时候, 为了让别人都能使用到, 所以一定要定义一个包。

            Java的包表面上看(从路径上看)是有等级的,但实际上并没有,比如java.awt,java.awt.color是两个地位相同的包。java.awt.color并不属于java.awt。

             在采用类名方式使用一个类的时候, 先在当前包中查找是否有这个类, 如果没有才去导入的包中找。

     

    包的成员

    一些相关联的类、接口、枚举、注释类型、包中的类所用到的资源文件如图片等

     

    包的作用

    (1)将相关联的接口和类集合到一块

    比如,package graphics; 就把图形处理相关的模块放到一起

    (2)避免了类型之间命名冲突:包作为一种封装,给类提供多层命名空间。

    (3)实现了外界对包的访问控制

     

    包的使用(包的声明、导入)

    总的来说,包的使用可以总结为三个步骤:如何将类和接口捆绑到包中、如何使用包中的类、以及如何安排文件系统以便编译器找到源文件。

    一、定义包

    1、带包类的声明

    在源代码的第一行使用package关键字定义包. 包名通常全部小写, 用"."分隔。

    包的命名规范见链接:https://segmentfault.com/a/1190000008711718

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

    包的声明有以下原则:(1)package语句必须放在源文件开头;(2)一个源文件只能有一个package语句;(3)包名字全部小写,避免与类、接口的名字冲突。

    2、编译带包的类

    javac -d 目录 源文件名.java

    3、运行带包的类

    java 包名.类名

    二、使用包

    同个包的类之间访问比较简单,在代码中直接以类名使用;而不同包之间的访问则必须满足一个条件:一个类如果希望被其他包中的类访问, 那么必须加上public修饰(注意:用public修饰的类必须和文件名同名)。不同包之间的使用通常有以下3种方法:(1)使用全名访问类;(2)import 该类;(3)import 包含该类的整个包

    1、使用全名

    假设有个graphics包,其中有个Circle类(public修饰),那么外包访问它时如下所示:

    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在运行程序时也知道去哪里找类。

    比如,源文件放在:<path_one>\sources\com\example\graphics\Rectangle.java

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

    所以编译器、JVM在路径<path_two>\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中 package的作用是什么?

    千次阅读 2017-10-30 17:09:16
    package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。如 package aaa.bbb.ccc 编译器就将该 ....

    package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到 ./aaa/bbb/ccc/ 这个目录。

    import 是为了简化使用 package 之后的实例化的代码。假设 ./aaa/bbb/ccc/ 下的 A 类,假如没有 import,实例化A类为:new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直接使用 new A() 了,也就是编译器匹配并扩展了 aaa.bbb.ccc. 这串字符串。

    展开全文
  • package有什么作用

    千次阅读 2018-10-30 16:15:34
    提供多层命名空间,解决命名冲突,通过使用package,使得处于不同package中的类可以存在相同的名字。 2). 对类按功能进行分类,使项目的组织更加清晰。 package的一般用法(源文件所在目录为当前目录): 在每...

    它类似于Linux文件系统,有一个根,从根开始有目录和文件,然后目录中嵌套目录。俗称:文件夹

    1. package主要有两个作用:

    1). 提供多层命名空间,解决命名冲突,通过使用package,使得处于不同package中的类可以存在相同的名字。
    2). 对类按功能进行分类,使项目的组织更加清晰。

    2.package的一般用法(源文件所在目录为当前目录):
    1. 在每个源文件的开头加上“package packagename;”,然后源文件所在目录创建一个新目录,名称为packagename。
    2. 用javac指令编译每个sourcename.java源文件,将生成sourcename.classname文件复制到packagename目录。
    3. 用java指令运行程序:java packagename.sourcename
    package com.pkg;
    public class TestPackage{
    	public static void main(String[] args) {
    	System.out.println("Hello World");
    	}
    }
    

    通过运行指令javac -d.TestPackage.java代码,会在当前目录下自动生成目录com/pkg,然后通过运行指令java com.pkg.TestPackage执行程序。

    3.自动打包编译命令:javac -d ../*.java
    4.系统常用包
    • 【java.lang】:系统常用基础类(Object、String(sb)、包装类),此包在JDK1.1后自动导入
    • 【java.util.java】:Java提供的工具程序包(类集(ArryList、HashMap))

    常考:包由一组类和接口组成。

    展开全文
  • 【初学Java】package

    2020-04-19 09:17:56
    这里是关于java包的一些内容包的作用语法格式import关键字package 的目录结构 包的作用 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用; 同一个包中的类名字是不同的,不同的包中的类的名字是...

    包的作用

    1. 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用;
    2. 同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,包可以避免名字冲突,当同时调用两个不同包中相同类名的类时,加上包名加以区别;
    3. 限定访问权限,拥有包访问权限的类才能访问某个包中的类;
      Java使用package式为了防止命名冲突,进行访问控制,提供搜索和定位类、接口、枚举和注释等

    语法格式

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

    import关键字

    为了能够使用某一个包的成员,需要在Java程序种明确导入该包

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

    在Java源文件种import语句应位于package语句之后,所有类的定义之前,可以没有,也可以有多条。如果在一个包中,一个类想要使用同一包内的另一个类,包名可以省略

    package 的目录结构

    类放在包中会有两种主要的结果:

    1. 包名成为类名的一部分,正如我们前面讨论的一样。
    2. 包名必须与相应的字节码所在的目录结构相吻合。
      特别注意!一个类的全名应该式包名+类名
    展开全文
  • package name") 多个包可以用c()来列出多个包的名字 install.packages(c("package 1","package 2",···)) 2 从CRAN、Bioconductors或其他网站上下载R包的压缩文件后使用命令 install....
  • java中package(包)的使用理解

    万次阅读 多人点赞 2017-03-01 15:58:39
    最近在学习java,在学习到对象和类这一部分时,接触了java中很重要的一个概念:package,也就是包。一开始对于package的使用我产生了许多疑惑,不仅是理论上的,在实际写代码的尝试中也出现了许多意想不到的错误。...
  • 简单的xml文件编写: 参考官方网址:http://wiki.ros.org/ROS/Tutorials/CreatingPackage ... package_name package</description> (package_name 为你的包的名字) e.g. <description> beginner_tutori...
  • find_package与CMake如何查找链接库详解

    万次阅读 多人点赞 2016-02-05 15:05:25
    CMake使用 find_package 命令来解决这个问题。本文讨论了如何在CMake项目中使用外部库,以及如何给没有查找模块的库写一个。 1 使用外部库 为了能支持各种常见的库和包,CMake自带了很多模块。可以通过命令 ...
  • 理解maven命令package、install、deploy的联系与区别

    万次阅读 多人点赞 2019-11-27 13:20:56
    我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的。下面通过分别执行这三个命令...
  • 包(package) 包的定义 包的导入 访问修饰符 private 默认 protected public 一:包(Package) java中的包使对文件夹的一种抽象描述; 1> 包的定义 /* 包的定义 a) package ...必须放在文件第一句...
  • Oracle的Package的作用及用法

    万次阅读 2013-01-16 13:38:30
    Oracle的Package的作用 简化应用设计、提高应用性能、实现信息隐藏、子程序重载。 1、Oracle的Package除 了把存储过程放到一堆儿以外还有没有其他的作用(好处)? 你不觉得把存储过程分门别类是很重要的么,...
  • Eclipse打开Package Explorer

    万次阅读 多人点赞 2013-10-15 17:17:37
    Window > Show View > Other Java > Package Explorer 然后可以将其拖拽到Eclipse的任意区域停泊
  • Package has no installation candidate解决方法

    万次阅读 多人点赞 2015-12-21 18:08:55
    今天在安装软件的时候出现了Package has no installation candidate的问题,如: # apt-get install Reading package lists... Done Building dependency tree... Done Package aptitude is not available, ...
  • Ubuntu 出现apt-get: Package has no installation candidate问题

    万次阅读 热门讨论 2011-12-18 16:11:45
    今天在安装软件的时候出现了Package has no installation candidate的问题,如: # apt-get install Reading package lists... Done Building dependency tree... Done Package aptitude is not available, ...
  • eclipse 导入项目,有时候会出现 java 文件图标由实心J变成空心J的问题,这个时候是不能编辑源文件的,至于解决办法...打开一个 java 文件就会出现首行的包命报错,The declared package does not match the expected
  • 当出现如下警告的时候dpkg: warning: files list file for package 'libpolkit-gobject-1-0:amd64' missing; assuming package has no files currently installed dpkg: warning: files list file for package '...
  • allegro package to package spacing

    千次阅读 2011-09-26 10:50:06
    板子布局和布线都完成了,DRC report时出现package to package spacing error,由于元件密度问题,元件放得比较近,但实际是没有影响的,于是关闭 package to package spacing 检查,设置 setup->constra
  • Unable to locate package错误解决办法

    万次阅读 多人点赞 2012-08-30 15:28:08
    新装了VMWare Player,结果装上Ubuntu12.04后安装软件都提示:Unable to locate package错误,解决方法非常简单,终端输入以下命令即可:sudo apt-get update  究其原因,应该是刚安装,软件源还来不及更新,所以...
  • idea中创建package的问题

    万次阅读 2017-03-08 10:56:22
    在idea中创建package时,会一直往后面累加(原来是com.huayang.action,想在huayang下面创建和action平级的service时,直接new的话,就变成了...于是采用另外一种方法,在创建package的时候,需要到父级packa
  • eclipse设置Package Explorer的显示

    万次阅读 2016-03-01 10:30:36
    一日打开eclipse,Package Explorer的显示变成了下图所示,很不方便: 试了一下发现是设置变了,只需要点Package Explorer右侧小下三角形,在Package Presentation里将Hierarchical点一下即可。 下图...
1 2 3 4 5 ... 20
收藏数 2,345,479
精华内容 938,191
关键字:

package