理解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的理解和 ...
随机推荐
- C#中的String.Format方法
定义String.Format是将指定的String类型的数据中的每个格式项替换为相应对象的值的文本等效项.(1)string p1="xiaomeng";string p2=&q ...
- 2017 Multi-University Training Contest - Team 2 TrickGCD(组合数学)
题目大意: 给你一个序列An,然后求有多少个序列Bn 满足Bi<=Ai,且这个序列的gcd不为1 题解: 考虑这样做 枚举一个因子k,然后求出有多少个序列的gcd包含这个因子k 然后把结果容斥一 ...
- [bzoj5285] [HNOI2018]寻宝游戏
Description 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生的你,对这个活动非常感兴趣. ...
- 【BZOJ 1724】[Usaco2006 Nov]Fence Repair 切割木板 堆+贪心
堆对于stl priority_queue ,我们自己定义的类自己重载<,对于非自定义类我们默认大根堆,如若改成小根堆则写成std::priority<int,vector<int& ...
- COGS 930. [河南省队2012] 找第k小的数 主席树
主席树裸板子 #include<cstdio> #include<iostream> #include<algorithm> #define MAXN 100005 ...
- Android tips tool 发现的性能问题(转载翻译)
先翻译刚好在研究到的一段,其余的无限期待续. 1.ObsoleteLayoutParam不起作用的标签 Invalid layout param in a LinearLayout: layout_c ...
- Why is the ibdata1 file continuously growing in MySQL?
We receive this question about the ibdata1 file in MySQL very often in Percona Support. The panic st ...
- HDU2157 How many ways??---(邻接矩阵,图论,矩阵快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=2157 How many ways?? Time Limit: 2000/1000 MS (Java/Others ...
- 如何让 linux unzip 命令 不输出结果
unzip xx.zip > /dev/null 2>&1 unzip xx.zip > /dev/null前半部分是将标准输出重定向到空设备, 后面的2>&1 ...
- SELinux 案例 1
deamon 进程的权限白名单 Generate Policy for Internet Services Daemon,生成一个模板: sepolicy generate --inetd [-n N ...