Java-package

产生原因

  1. 避免 .java 文件中类/接口/静态方法/静态成员变量的同名冲突
  2. 便于对 .class文件分类管理

含义

package(包)起限定和管理功能:

  1. 逻辑上名称限定: 在本 .java 文件外使用类、接口、静态方法、静态成员变量时,相应类、接口、静态方法、静态成员变量的名字必须使用完全限定名。
  2. 物理上位置限定: 执行 java 命令时 .class 所在且必须在的文件夹(或文件夹路径) 。由于 javac 的查找路径为当前文件夹和classpath文件夹,所以包限定了 .class 文件相对于当前文件夹和 classpath 文件夹的文件路径。

特别地:

  • 没声明包时,.class文件必须在当前文件夹下或者classpath文件夹内。即类名的完全限定名称为包名.类名
  • 同一个包中的两个类,不必要在相同路径下,只需要在当前文件夹或 classpath 文件夹下的包对应路径下即可。如 test.test1.DemoA.class 和 test.test1.DemoB.class,可以分别在C盘和D盘某个位置下的test\test1文件夹下,只要这两个位置在 classpath 或是当前文件夹中
  • 包只是对 .java 文件中名称的限定,对 .class 位置的限定,和继承等逻辑关系没有关系

语法

// 示例
package test.test1; 
class DemoA {}
  1. 声明:
    package 包名;

    • 一个源文件中只能有一个包声明语句,且其必须是源文件的第一条非注释性语句
    • 包名可以使多级路径,如 package test.test1; 为二级路径
    • 从可读性规范角度来看,包名应全部为小写字母。且建议公司使用其域名倒写作为包名。
  2. 编译:

    javac [-d 任意路径] 类名.java

    • 无需指定包名,自动生成包对应文件夹

    示例如下:

    • javac -d e:java a.java,会在e:java目录下自动生成test\test1文件路径,并将.class存放在其中
    • javac DemoA.java ,会在当前文件夹下生成 DemoA.class ,而没有相应的包路径生成,需手动将 .class 文件放在相应包对应的路径下
  3. 运行:

    java 包名.类名.class

    • 需要显示指定包名

    示例:java test.test1.DemoA.class

  4. 外部文件使用:

    1. 直接使用

      需要使用连带报名的完全限定名

    2. 用import简化名称

      import 包名.类名/接口名;

      import static 包名.类名.静态方法/静态变量;

      • 功能: 给对应的类、接口、静态方法或者静态成员变量自动加上包名,从而在编写程序时,可以省略包名,简化名称书写。

      • 位置: 出现在package声明之后,类定义之前,可以有多个import语句

      • 示例:

         import test.test1.DemoA;//简化test\test1中的DemoA类
         import test.test.*; //简化test\test1中的所有类,不包括子文件夹中的类,即*只代表类,不代表包
         import static test.DemoA.class.num;   //简化类中的静态成员变量
         import static test.DemoA.class.show();//简化类中的静态方法
         import static test.DemoA.class.*;     //简化中所有静态成员
        
      • 注意事项:

        • Java 默认:import java.lang.*

        • 不能有同名类被简化名称。当出现这种情况时,必须使用一个类使用带有包名的类的全名

        • 存在包含关系的包,使用时名称也不能简化。

          import test.test1.DemoA; //不能简化为 import test1.DemoA; 
          package test; 
          class Demo {}
          

常见问题

为什么不能import非static方法和成员变量

因为非static方法或成员变量必须建立对象后,通过特定对象调用,没法像static方法一样,直接通过类就可以调用,所以无法实现import直接简化名称

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值