【问题标题】:Package in Java用 Java 封装
【发布时间】:2011-03-20 12:10:35
【问题描述】:

我们什么时候真正使用 package 关键字?什么意思?

假设我写了以下代码:

package masnun;    
public class masnun{
    public static void main(String args[]) {
            System.out.println("Hello maSnun!");
        }


}

这个包的作用是什么?我得到一个不运行的 masnun.class 文件。我是 Java 新手。谁能解释一下?

谢谢

【问题讨论】:

标签: java


【解决方案1】:

由于我不喜欢这些其他答案,所以我会自己写。


现实世界的例子:

将“包”视为 java 类引用另一个类的简单方法。

假设我的阁楼上有这个大盒子。我有计算器、指南针、量角器等。我可以给这个盒子贴上标签MathTools

另一个例子是拍摄所有照片并将它们放在文档中的Pictures 文件夹中。从那里,您可以将它们拆分为 Spring Break 2009[Insert Name Here]'s Party

这与 Java 有什么关系?好吧,让我们看看java.util 包(你可以用import java.util.*; 引用它。你有ArrayLists、Strings、Random 等,它们在大多数Java 程序中都使用(如果你愿意,可以使用常见的“实用程序”)。还有所有这些都整齐地组织在同一个包中,以便程序员可以轻松引用它们 (import java.util.*;)。


轻松申请:

假设我们可以在C:/Program Files/Java Project/my/proj/找到一个小骰子模拟器的所有文件(这个文件很可能在你的电脑上不存在,只是假装一会儿)。

您有 3 个文件:Main.javaDice.javaDiceRoller.java。如下图所示:

.

"C:/ProgramFiles/Java Project/my/proj/main/Main.java":

package my.proj.main;

import my.proj.sims.Dice;

public class Main
{
    public static void main(String[] args)
    {
        DiceRoller roller = new DiceRoller();
        roller.rollAndShow(4);
    }
}

"C:/ProgramFiles/Java Project/my/proj/sims/Dice.java":

package my.proj.sims;

import java.util.Random; // I used the Random class, but you can also use the Math class if you prefer (java.lang.Math)

public class Dice
{
    public Dice()
    {
    }

    public int roll()
    {
        Random rand = new Random();    
        return rand.nextInt(6) + 1; // Rolls a random number 1-6
    }
}

"C:/ProgramFiles/Java Project/my/proj/sims/DiceRoller.java":

package my.proj.sims;

public class DiceRoller
{ 
    public DiceRoller ()
    {
    }

    // Rolls and prints the result of 'n' number of rolls
    public void rollAndShow(int n)
    {
        Dice dice = new Dice();

        for (int i = 0; i < n; i++)
        {
            System.out.println(dice.roll()); // You should never use S.o.p in a method - it's bad practice, but it's easier this way if you don't yet understand the concept of objects
        }
    }
}

.

注意事项:

  • Main.java被打包成my.proj.main
  • Dice.java被打包成my.proj.sims
  • Main.java 需要导入 my.proj.sims.Dice 以创建 Dice 对象并使用其方法,因为它与 Dice.java 位于不同的包中。
  • DiceRoller.java 不需要导入my.proj.sims.Dice,因为它与Dice.java 在同一个包中,编译器会自动将两者关联起来。

.

Import 是将类的功能加载到当前文件的命令。以Dice.java 为例。为了创建一个Random对象,它有nextInt()方法,它需要从java.util.*包中导入Random类。

.

您可能会注意到有些人更喜欢使用java.util.* 而不是java.util.Randomjava.util.ArrayList 等。* 本质上的意思是java.util 中的任何类。运行import java.util.*会导入Random、String、ArrayList等类。

.

希望这可以解决问题。如果这对您有帮助,请考虑投票:)

【讨论】:

  • 嘿,太棒了!你吃完了吗?我在等待! :) 感谢您的时间和努力。
  • 感谢您的努力和时间。如何编译它?
  • @maSnun:嘿。对不起,我昨天没时间了。您在使用 IDE(Eclipse、JCreator、NetBeans 等)吗?是否安装了最新的 JDK(java 开发包 - java.sun.com/javase/downloads/widget/jdk6.jsp)?
  • @maSnun:那么还有很多东西要学,我可以在一篇文章中告诉你。现在您了解了包,您可以通过 Google 找到大量 java/command 帮助页面。
【解决方案2】:

软件很可能具有名为 Logger、Database、Connection、Table 等的类。 包将这些类的范围分开,这样您就不会遇到重复的问题 类名。

几个例子:

  • java.*
  • org.apache.**
  • com.yourcompany.yourproject.

如果您不想使用 destinct 包中的类,则需要导入它们 .i.g.

import java.util.Date 

import java.sql.Date

【讨论】:

    【解决方案3】:

    这是一种组织源文件的方式。一个包包含多个类文件,一个类文件只包含一个公共类,一个类包含多个方法和变量。

    【讨论】:

      【解决方案4】:

      Java 中的 package 语句用于对几个相关的类进行分组。如果您有专门处理数据库交互的类,将它们全部放在下面是合乎逻辑的

      com.example.myapp.persistence
      

      这也提供了名称间隔的好处,记住在运行时java类标识的一部分是它的完全限定名,即类名前面是它的包名,就像在

      com.example.myapp.persistence.UserDAO
      

      当您的应用程序增长到容纳多个类时,将它们组织在包中既实用又是一种好习惯

      【讨论】:

        【解决方案5】:

        “包只不过是我们根据文件的功能、可用性以及它们应该属于的类别将文件组织到不同目录中的方式。”来自:http://www.jarticles.com/package/package_eng.html

        基本上,在您的示例中,您是在说类 masnun 是包 masnun 的包。所以基本上在其他类中你可以通过 import masnun 来引用这个类;它导入了 masnun 包中的 masnun 类。

        【讨论】:

        • 需要把class文件安排在特定的组吗?也许就像将 masnun.class 放入名为 masnun 的目录中?我还是不明白。当我使用该命令时 - import masnun; ,究竟会发生什么? JVM 在哪里寻找包?还是它在寻找班级?我的意思是什么可以让我使用命令“java masnun”运行该文件?
        • @maSnum:是的,标准 Java 类加载器在与包层次结构相对应的目录层次结构中查找类。基本上,import masnum.MyClass 在任何类路径根目录(通常包括当前目录)的目录 masnum 中查找文件 MyClass.class。
        • 我本来打算回答这个问题的,但是:这些都是Java的基础知识,我们以问答的形式做一个完整的Java教程是没有意义的。阅读(和工作)一两个Java tutorial 会更好。
        • 我知道这是非常基本的,在我在这里发布之前我做了很多谷歌搜索。没有得到我的问题的答案。
        【解决方案6】:

        在外行术语中,假设一所大学有多个部门,如科学、艺术等。现在每个部门都有一些员工。在对象方面可以有多个Employee类,所以在java中有一个限制,我们不能把两个类同名。所以程序员应该制作不同的包来存储应用程序中不同的同名类。

        【讨论】:

          猜你喜欢
          • 2016-11-03
          • 1970-01-01
          • 2012-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-11
          • 1970-01-01
          相关资源
          最近更新 更多