Java基础07 包(转载)
包的建立
public class Human{
/**
* constructor
*/
public Human(int h){
this.height = h;
System.out.println("I'm born");
}
/**
* accessor
*/
public int getHeight(){
return this.height;
}
/**
* accessor
*/
public void growHeight(int h){
this.height = this.height + h;
}
private int height;
}
上面的第一行语句
package com.vamei.society;
表示该程序在com.vamei.society包中。com.vamei(vamei.com的反写)表示包作者的域名 (很可惜,这个域名已经被别人注册了,所以只起演示作用)。Java要求包要有域名前缀,以便区分不同作者。society为进一步的本地路径名。com.vamei.society共同构成了包的名字。
包为Java程序提供了一个命名空间(name space)。 一个Java类的完整路径由它的包和类名共同构成,比如com.vamei.society.Human。相应的Human.java程序要放在 com/vamei/society/下。类是由完整的路径识别的,所以不同的包中可以有同名的类,Java不会混淆。比如 com.vamei.society.Human和com.vamei.creature.Human是两个不同的类。
再看一个细节。Human类是public 的,其构造方法也是public的,所以任意其他对象都可以调用该类。我们之前说过,一个Java程序中只能有一个public的类,该类要去.java 文件同名。一个类可以没有public关键字,它实际上也表示一种权限: 该类在它所在的包中可见。也就是说,包中的其他Java程序可以访问该类。这是Java中的默认访问权限。
同样,对象的成员也可以是默认权限(包中可见)。比如我们去掉getHeight()方法前面的public关键字。
包的调用
我们只需要将Human.java编译的Human.class放入相应的文件夹就可以了。比如,我将Human.class放入com/vamei/society/中。实际上,你也可以把.java文件放入相应路径,Java会在使用时自动编译。
import com.vamei.society.*;
public class TestAgain{
public static void main(String[] args){
Human aPerson = new Human(180);
System.out.println(aPerson.getHeight());
}
}
import用于识别路径。利用import语句,我们可以引入相应路径下的类。*表示引入society文件夹下的所有类。在TestAgain中,我们直接使用了Human类。
我们也可以提供类的完整的路径。这可以区分同名但不同路径的类,比如:
public static void main(String[] args){
com.vamei.society.Human aPerson =
new com.vamei.society.Human(180);
System.out.println(aPerson.getHeight());
}
}
由于我们提供了完整的类路径,所以不需要使用import语句。
如果包没有放在当前工作路径下, 我们在使用包时,需要通知Java。比如,我们将包放在/home/vamei/javapackage中,这样Human.class位于/home /vamei/javapackage/com/vamei/society/Human.class,而我们的工作路径为/home/vamei。这样,包就无法被找到。一个方法是在使用javac和java时,用-classpath说明包所在的文件夹路径,比如:
$javac -classpath /home/vamei/javapackage:. TestAgain.java
$java -classpath /home/vamei/javapackage:. TestAgain
就是从/home/vamei/javapackage和工作路径(.)中寻找包。Java可以从/home/vamei/javapackage中可以找到Human类,从.中可以找到TestAgain类。
另外也可以设置系统的CLASSPATH环境变量,将上述路径加入到该变量中,而不用每次都键入-classpath选项。
类似于包的机制在其他语言中也很常见,比如Python中的import机制。它们都是为了更好的组织和使用已有的程序。利用包,我们可以比较容易的拓展Java程序,使用已有的Java程序库。注意到,包管理的是.class文件。Java号称"一次编译,处处运行" (Compile Once, run anywhere)。.class文件可以在任意装有Java虚拟机(JVM, Java Virtual Machine)的平台上运行,这帮助我们克服了系统差异造成的程序移植困难。
系统之间的差异可以非常大。如果我们用C语言编写程序,需要将源程序在各个平台上重新编译,以适应不同的硬件条件。 Java虚拟机衔接了平台和Java宇宙,它构成了硬件和编程逻辑的中间层。JVM隐藏了硬件差异,提供给程序员一个“标准”的Java宇宙。 而.class文件可以看做这个Java宇宙中流通的通货。在JVM的基础设施下,加上包的管理辅助,Java程序实现了良好的可移植性 (portability)。
Java基础07 包(转载)的更多相关文章
- Java基础07 包
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经写了一些Java程序.之前的每个Java程序都被保存为一个文件,比如Tes ...
- build path libraries java基础--Jar包添加到build path方式说明--01
摘自: http://blog.csdn.net/haolongabc/article/details/7007701 java基础--Jar包添加到build path方式说明--01 前言:这段短 ...
- java基础 lang包 详细介绍
Java.javax和org.其中以java开头的包名是JDK的基础语言包,以javax开头的属 (org是organization的简写).而在JDK API中还包含了一些以com.sun开头的包名 ...
- Java基础--定时任务Timer(转载)
Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...
- Java基础—反射(转载)
转载自: JAVA反射与注解 JAVA反射 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射机制是什么 反射 ...
- JAVA基础知识点(转载的)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/8846697 1.使用浮点型数值时,默认的类型是double,后面加上f或F才被识别为flo ...
- Java基础—注解(转载)
概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...
- Java基础—内部类(转载)
转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...
- 黑马程序员——JAVA基础之包,权限
------- android培训.java培训.期待与您交流! ---------- 包(package) 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是:包 ...
随机推荐
- 使用openssl生成密钥、加密和签名
openssl genrsa -out rsakey.pem 1024 //生成1024bit的RSA密钥,并保存到rsakey.pem,此处未对密钥进行加密 openssl genrsa -aes ...
- Cesium 事件
1.相机事件(移动开始.移动结束等等) viewer.scene.camera.moveEnd.addEventListener(function(){ }): 2.鼠标事件(单击.移动.右键等) v ...
- python之pack布局
#Pack为一布局管理器,可将它视为一个弹性的容器 '''1.一个空的widget'''#不使用pack # -*- coding: cp936 -*- from Tkinter imp ort * ...
- install libiconv libraries
#下载地址: https://ftp.gnu.org/pub/gnu/libiconv/ #编译安装 ./configure --prefix=/usr/local make make install ...
- Java练习:tips.Print
在学习Java时和<编程导论(Java)>中,大量使用了重载的System.out.println()等类似的输出语句.特别是书籍中,一行语句中包括System.out.println会显 ...
- 【codeforces #282(div 1)】AB题解
A. Treasure time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- ITFriend站点内測公測感悟
4月份做出站点Demo.就開始让用户使用了. 最初的黄色版界面.被吐槽得比較厉害. 关于界面.每一个人都有自己的看法,仅仅是喜欢和不喜欢的人比例不一样. 后来.花3400元请了个设计师,设计了一套界面 ...
- Java 9的14个新特性总结
Java 9 包含了丰富的特性集.虽然Java 9没有新的语言概念,但是有开发者感兴趣的新的API和诊断命令. 我们将快速的,着重的浏览其中的几个新特性: 模块化系统–Jigsaw 项目 模块化是一 ...
- HTML5 Canvas 绘制库存变化折线 计算出库存周转率
<!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...
- seo关键字优化条例
SEO 第一: 标题关键字分析 分析和选择行业热门的关键字,并合理的应用于网站标题内及分布到各栏目页面和内页. 其实个人觉得标题.内容.以及与内容相关性链接必须要足.还有就是出现的层次感,例如: a) ...