理解Java中【包】的概念
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中【包】的概念的更多相关文章
- java 中包的概念,常量,静态与继承
一.包的概念:创建,使用. 1.新建包: 最上面一行,之前不能再有其它代码了. package 包名; 注意:包名一般都有命名的规范.例如:com.itnba.maya.zy(从大到小). 2.使用包 ...
- 深入理解Java中的IO
深入理解Java中的IO 引言: 对程序语言的设计者来说,创建一个好的输入/输出(I/O)系统是一项艰难的任务 < Thinking in Java > 本文的目录视图如下: ...
- 理解Java中的弱引用(Weak Reference)
本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出, ...
- 深入理解Java中的不可变对象
深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象.包装器对象等,那么到底为何Java语言要这么设计,真 ...
- 【Java】深入理解Java中的spi机制
深入理解Java中的spi机制 SPI全名为Service Provider Interface是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用 ...
- 深入理解Java 中SPI 制
深入理解Java 中SPI 制 概述 SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比 ...
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...
- [译]线程生命周期-理解Java中的线程状态
线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...
- 理解Java中的ThreadLocal
提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和 ...
随机推荐
- pta指针作业
#PTA实验作业 6-1 本题pta提交列表 设计思路 本题是一道简单的指针程序题,两个数已经分别被指针定义,只要把用其指针把二者加在一起和减去即可 调试过程 本题无调试过程 代码截图 6-2 1. ...
- 【转】如何解决每次打开office2010都会出现正在配置以及使用KMS
转自:http://jingyan.baidu.com/article/90895e0fb1525964ec6b0bb5.html 一.使用mini-KMS_Activator_v1.2_Office ...
- timeSetEvent()函数
原文链接地址:http://www.cnblogs.com/kangwang1988/archive/2010/09/16/1827872.html 微软公司在其多媒体Windows中提供了精确定时器 ...
- HTML5用canvas绘制五星红旗
在HTML5一览中,我们提到html 5被冠以很多高帽,其中最高的一顶.备受争议的就是"Flash杀手".IT评论界老喜欢用这个词了,杀手无处不在.不管是不是杀手,HTML 5引进 ...
- Educational Codeforces Round 56 (Rated for Div. 2) ABCD
题目链接:https://codeforces.com/contest/1093 A. Dice Rolling 题意: 有一个号数为2-7的骰子,现在有一个人他想扔到几就能扔到几,现在问需要扔多少次 ...
- mycat 管理MySQL5.7主从搭建
1.首先安装MySQL ab: 192.168.6.163 master 192.168.6.167 slave master: vi /etc/opt/rh/rh-mysql57/my.cnf.d/ ...
- oracle数据库cmd导出数据和导入数据
一:前言 每次我自己来导出oracle数据的数据进行备份的时候都是要看一遍记载的语句,还别说自己敲多了,也熟练了,但是还是不是很放心,所以就记载下来吧. 二:内容 (1).最简单,最直接的导入方式(这 ...
- L2-002. 链表去重---模拟
https://www.patest.cn/contests/gplt/L2-002 L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 ...
- 【poj3415-Common Substrings】sam子串计数
题意: 给出两个串,问这两个串的所有的子串中(重复出现的,只要是位置不同就算两个子串),长度大于等于k的公共子串有多少个. 题解: 这题好像大神们都用后缀数组做..然而我在sam的题表上看到这题,做 ...
- 【BZOJ】1692: [Usaco2007 Dec]队列变换
[算法]字符串hash [题解] 显然如果字母互不相同,贪心取是正确的. 如果存在字母相同,那么就换成比较后缀和前缀嘛. 但是要注意,不是后缀和前缀相同就能直接跳跃,每次必须只推一位. 取模的哈希比自 ...