Java中用package关键字定义一个包,下面通过几个实验,理解Java中的包的概念和作用。

实验1:先看一个无包的情形

在G盘下新建一个Test.java,如图1:

写下面这些代码

<span style="font-size:24px;">public class PackageTest{

    public static void main(String args[]){

	System.out.println("Hello World!");    

    }
}</span>

然后保存,然后打开控制台(win+R--输入cmd--回车即可),输入  G:--回车  进入G盘,输入  javac PackageTest.java  编译PackageTest.java,具体如下图:

编译成功之后,会发现与PackageTest.java同目录下多了一个文---PackageTest.class,运行的时候执行的就是该文件,如下图:

运行这个程序,在控制台输入 java PackageTest ,运行结果如下:

这是没有包的情形,下面看看有包的情形。

实验2:

将实验1中的G盘下的PackageTest.class文件删除,打开PackageTest.java,在前面加上这些内容:

<span style="font-size:24px;">package p1.p2.p3;
</span>

再在控制台输入javac PackageTest.java编译程序,如果没有其他提示证明编译成功,编译结果如下:

同样可以查看G盘下又多了一个PackageTest.class文件,用同样的方法运行程序,在控制台输入java PackageTest,结果是这样的:

意思就是找不到PackageTest这个类,为什么呢?因为在PackageTest.java中定义了包。如何解决这个问题呢?

接下来,我们在G盘下新建一个文件夹p1,在p1下新建一个文件夹p2,在p2下新建一个文件p3,再把G盘下的PackageTest.class文件放到文件夹p3中,如下图:

再在控制台运行这个程序,输入java PackageTest,结果如下:

还是找不到这个类,为什么呢?因为这个类的名字不是PackageTest了,而是p1.p2.p3.PackageTest了,所以正确运行这个程序的方法是:

在控制台输入 java p1.p2.p3.PackageTest 就能得到想要的结果了:

从上面的实验可以看出:

1.包对.java源文件没有作用,只对.class字节码文件起作用。

2.包相当于一个字节码的相对路径。例如上例中PackageTest.class的绝对路径就是:

G:\p1\p2\p3

引入包可以防止文件名之间的冲突(例如一个公司的网站域名为:www.abc.def.cn,则这个公司的程序员可以将所有的包设置为cn.def.abc)。

理解Java中【包】的概念的更多相关文章

  1. java 中包的概念,常量,静态与继承

    一.包的概念:创建,使用. 1.新建包: 最上面一行,之前不能再有其它代码了. package 包名; 注意:包名一般都有命名的规范.例如:com.itnba.maya.zy(从大到小). 2.使用包 ...

  2. 深入理解Java中的IO

    深入理解Java中的IO 引言:     对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java >   本文的目录视图如下: ...

  3. 理解Java中的弱引用(Weak Reference)

    本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出, ...

  4. 深入理解Java中的不可变对象

    深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...

  5. 【Java】深入理解Java中的spi机制

    深入理解Java中的spi机制 SPI全名为Service Provider Interface是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用 ...

  6. 深入理解Java 中SPI 制

    深入理解Java 中SPI 制 概述 SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比 ...

  7. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  8. [译]线程生命周期-理解Java中的线程状态

    线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...

  9. 理解Java中的ThreadLocal

    提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和 ...

随机推荐

  1. D - 小木棒

    D - 小木棒 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Descri ...

  2. POJ3984(迷宫问题)

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...

  3. 基于log4j的消息流的实现之一消息获取

    需求: 目前的程序中都是基于log4j来实现日志的管理,想要获取日志中的一部分消息,展示给用户. 约束: 由于程序中除了自己开发的代码,还会有层层依赖的第三方jar中的日志输出.需要展示给用户的消息, ...

  4. 转:maven常用命令介绍

    mvn 3.0.4 创建maven项目命令  mvn  archetype:generate   -DgroupId=damocles-autocredit -DartifactId=damocles ...

  5. Leader Election

    Leader Election Zookeeper的基本操作 Zookeeper虽然是分布式系统,但它并不是为文件存储而设计的,Zookeeper里存储的一般是配置信息和源信息.实际上,Zookeep ...

  6. 【题解】HAOI2011Problem b

    第一次接触莫比乌斯反演,总之脑子都快要炸掉了……好难啊!本蒟蒻表示根本无法理解呜呜呜呜呜……不过在机房DL的帮助下总算是磕磕绊绊的A掉了这一题: 这道题目要我们的求的是:(1)ΣiΣj [gcd(i, ...

  7. [链接] Linux下常见的~/.bashrc、/etc/profile、/etc/ld.so.config小科普以及caffe编译遇到的相关问题解决

    由于博主设置禁止转载,这里贴一个链接,http://blog.csdn.net/u014266895/article/details/61928602,内容很有用,linux下很多软件问题都是各种路径 ...

  8. 关于session variables 和 global variables

    背景 有同学问到这样一个问题:原来的binlog格式是statement,为什么执行了 set global binlog_format='row' 和 set binlog_format='row' ...

  9. 存储过程-----DECLARE---实用注意事项

    定义与使用变量时需要注意以下几点: ◆ DECLARE语句必须用在DEGIN…END语句块中,并且必须出现在DEGIN…END语句块的最前面,即出现在其他语句之前. ◆ DECLARE定义的变量的作用 ...

  10. 搭建jfinal+maven框架

    1.创建一个maven web项目. 2.添加引用包         <dependency>             <groupId>com.jfinal</grou ...