Java的包
Java 包
Java面向对象的核心的概念:类、接口、抽象类、对象;【主体】
包的定义:
指的是一个程序的目录,在最早的时候,如果要开发一个程序,只需要定义一个Java文件,而后在这个文件中编写所需要的类文件。
在编译之后程序直接保存在根目录下,而利用包可以实现同一个程序的拆分 即可以根据需求,把代码程序保存在不同的目录下。
包的定义可以使用关键字:package
package cn.mldn.demo ; // 定义的包 public class Hello { public static void main(String [] args) { System.out.println("Hello,World!") ; } } |
定义的包后有 点 就表示子目录的含义;如果类中有了包的定义,那么就必须让其保存在特定的目录中,但不要自己手工创建目录,应该使用命令行功能自动生成目录:
·打包编译: javac –d .***.java
-d 表示生成目录,根据package的定义生成目录
。 表示保存的路径,如果为‘。’表示在当前所在的路径下生成
--执行完命令后,会在制定的路径下生成package所定义的目录,class文件也会编译在目录下,但代码*.java文件不变位置;且在java解释程序的时候,不要进入包目录中解释class文件,而是在包的外面,输入类的完整名称(包.类名称);
实际开发中,所有的类都定义在包之中。
包的导入:
使用包的定义,可以将一个完整的程序拆分为不同的文件进行分别的保存,如此会导致一个开发问题——不同的包直接可能存在相互的访问,由此就需要使用 包的导入 来操作
包的导入的关键字: import
包 |
包的导入 |
package cn.mldn.util ; class Messages { public void print() { System.out.println("Hello,World!!!") ; } } |
package cn.mldn.test ; import cn.mldn.util.Messages ; // 导入util包中要使用的类 public class TestMessage { public static void main(String [] args) { Messages msg = new Messages() ; msg.print() ; } } |
上述的程序在解释运行的时候会报错,
结合报错内容,对程序做出如下修改:
包 |
包的导入 |
package cn.mldn.util ; public class Messages { public void print() { System.out.println("Hello,World!!!") ; } } //对Messages类进行了public公共类的声明 |
package cn.mldn.test ; import cn.mldn.util.Messages ; // 导入util包中要使用的类 public class TestMessage { public static void main(String [] args) { Messages msg = new Messages() ; msg.print() ; } } |
总结:
文件名称必须与类名称保持一致,在一个*.Java文件中里面只可以有一个public class声明,如果一个类被其他包访问,一定要被定义为public class(公共类);
同理,class文件与类名称可以不一致,但是要求一个*.java文件中可以有多个class定义,编译后会形成多个class文件,如果一个类使用的是class定义,那么表示该类只可以被本包所访问。
实际中,Java编译器考虑多个java文件相互引用的情况的产生,为此Java提供了通配符*的操作,【javac –d . *.java】来解决该问题,即可通过一个命令,同时编译所有的Java文件,不用担心编译的顺序等问题。
但是在进行包的导入的时候也发现了一个局限的问题,如果需要导入一个包中的多个类,非常麻烦;Java提供了通配符功能即【import 包 .*】 实现一次性导入包中所有可访问的类。
开发中,可能会遇到同一个类中导入不同的包,不同的包中可能有同名类;在这种情况下,程序会报错“类的引用不明确”,所以在遇到这个问题的时候,需要在使用类的时候加上类的完整名称(包 . 类);明确类的引用;如果认为程序中的导包操作会出现冲突,那么就在程序的外包类中,写处完成的类名称。
系统常见的包:
Java本身提供了大量的程序开发包,除了官方提供的开发包,还有很多第三方提供的开发包。 基本上所有包都有提供。
在Java-API文档里package目录中:
包 |
包含的类/功能 |
备注 |
Java.lang |
String object Integer等类 |
JDK1.1+ 自动导入 |
Java.lang.reflect |
反射开发包 |
反射开发包 |
Java.util |
链表类等 |
Java的工具包 |
Java.util.regex |
正则工具包 |
|
Java.text |
国际化处理程序包 |
|
Java.io |
进行程序输入、输出处理以及文件操作功能包 |
|
Java.net |
网络编程开发包 |
|
Java.sql |
数据库程序开发包 |
|
Java.applet |
Applet程序开发包(在网页上嵌套的程序) |
淘汰【类似JavaScript】 |
Java.awt |
进行单机版界面编写 |
JDK1.0 |
Javax.swing |
JDK1.2 |
Jar命令:
在任何的项目中一定存在大量的 *.class 文件;在交付用户使用前,会使用jar命令,对class文件进行压缩,并且压缩的都是以包为单位;
定义多个java文件,随后打包编译java文件形成多个class文件;
其后,使用jar文件压缩class包文件,【jar –cvf my.jar cn】
命令剖析:jar命令 -创建文档 输出过程 档案名 压缩名.jar 压缩对象
F:\>jar –help 用法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ... 主操作模式: -c, --create 创建档案 -i, --generate-index=FILE 为指定的 jar 档案生成 索引信息 -t, --list 列出档案的目录 -u, --update 更新现有 jar 档案 -x, --extract 从档案中提取指定的 (或全部) 文件 -d, --describe-module 输出模块描述符或自动模块名称 在任意模式下有效的操作修饰符: -C DIR 更改为指定的目录并包含 以下文件 -f, --file=FILE 档案文件名。省略时, 基于操作 使用 stdin 或 stdout --release VERSION 将下面的所有文件都放在 jar 的版本化目录中 (即 META-INF/versions/VERSION/) -v, --verbose 在标准输出中生成详细输出 在创建和更新模式下有效的操作修饰符: -e, --main-class=CLASSNAME 捆绑到模块化或可执行 jar 档案的独立应用程序 的应用程序入口点 -m, --manifest=FILE 包含指定清单文件中的 清单信息 -M, --no-manifest 不为条目创建清单文件 --module-version=VERSION 创建模块化 jar 或更新 非模块化 jar 时的模块版本 --hash-modules=PATTERN 计算和记录模块的散列, 这些模块按指定模式匹配并直接或 间接依赖于所创建的模块化 jar 或 所更新的非模块化 jar -p, --module-path 模块被依赖对象的位置, 用于生成 散列 只在创建, 更新和生成索引模式下有效的操作修饰符: -0, --no-compress 仅存储; 不使用 ZIP 压缩 其他选项: -?, -h, --help[:compat] 提供此帮助,也可以选择性地提供兼容性帮助 --help-extra 提供额外选项的帮助 --version 输出程序版本 如果模块描述符 'module-info.class' 位于指定目录的 根目录中, 或者位于 jar 档案本身的根目录中, 则 该档案是一个模块化 jar。以下操作只在创建模块化 jar, 或更新现有的非模块化 jar 时有效: '--module-version', '--hash-modules' 和 '--module-path'。 如果为长选项提供了必需参数或可选参数, 则它们对于 任何对应的短选项也是必需或可选的。 |
Jar文件中有一个META-INF/MANIFEST.MF文件,文件中存放文件辅助信息;
Jar文件的使用:
直接压缩生成的jar文件并不可以直接使用,jar文件必须配置 CLASSPATH 才可以加载;
SET CLASSPATH = . ;jar文件位置
同样可以在系统环境变量中配置:
在CLASSPATH中配置,在原有的内容后面加上Jar文件的位置
设置完毕后,即系统就识别jar文件为一个目录文件的存在,即可以看见目录中的包了。
Java包的总结:
开发程序均要求有包的存在
如果不同包之间的类发生了冲突必须写出完整的类名称
使用第三方的jar文件,必须配置classpath系统环境变量【配置jar路径】
Java的包的更多相关文章
- java基础-包
浏览以下内容前,请点击并阅读 声明 为了使类型更容易查找和使用,避免命名冲突,以及可视范围的控制,程序员一般将相关的一些类型组合到一个包中.组合的类型包括类,接口,枚举和注释,枚举是一种特殊的类,而注 ...
- java中包命名常见规则
做java的都知道java的包.类.接口.枚举.方法.常量.变量等等模型都有一套约定的命名规则! 学习每一种语言都应该学习对应语法和命名规则,以保持一个良好的编码风格.一来显示自己的专业.二来方便阅读 ...
- java jar包收集
activation~与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到lib中去,具体负责mail的数据源和类 ...
- java util包概述
util是utiliy的缩写,意为多用途的,工具性质的包这个包中主要存放了:集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类.这些类极大方便了Java编程, ...
- java.io包详细解说
转自:http://hzxdark.iteye.com/blog/40133 hzxdark的博客 我不知道各位是师弟师妹们学java时是怎样的,就我的刚学java时的感觉,java.io包是最让我感 ...
- java.io包中的字节流—— FilterInputStream和FilterOutputStream
接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...
- java jar包解析:打包文件,引入文件
java jar包解析:打包文件,引入文件 cmd下: jar命令:package包打包 javac命令:普通类文件打包 Hello.java: package org.lxh.demo; publi ...
- 如何理解和使用Java package包
Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起.这个名称空间就是包名.可以使用import关键字来导入一个包.例如使用import java.util.* ...
- JAVA导入包
在package **;下面写入 import java.**.**; 1.使用Scanner工具类来获取用户输入的成绩信息 Scanner类位于java.util包中,使用时需要导入此包 1.1. ...
- java类包第十一章
1.同一个包中的类互相访问,不需要制定包名. 2.java中包名的规则是全部使用小写字母 3.final 方法不能被覆盖, public class OuterClass { innerClas ...
随机推荐
- spark log4j 日志配置
现在我们介绍spark (streaming) job独立配置的log4j的方法,通过查看官方文档,要为应用主程序(即driver端)或执行程序使(即executor端)自定义log4j配置,需要两步 ...
- Java操作数据库——使用连接池连接数据库
Java操作数据库——使用连接池连接数据库 摘要:本文主要学习了如何使用JDBC连接池连接数据库. 传统方式和连接池方式 传统方式的步骤 使用传统方式在Java中使用JDBC连接数据库,完成一次数据库 ...
- 平时代码中用不到设计模式?Are you kidding me?
引子 平时我是个反应非常慢的人.有多慢呢?大概是两年前有次团队内部开会时,我听到同学说平时代码中用不到设计模式,我当时没有回答.两年后我终于反应过来了:“Are you kidding me?我每天都 ...
- 剑指offer笔记面试题14----剪绳子
题目:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n > 1 并且m > 1),每段绳子的长度记为k[0], k[1], ...k[m].请问k[0] x k[1] x .. ...
- ie11 SCRIPT5011:不能执行已释放Script的代码
依照我遇到的问题为例: (我的页面结构为:父页面中嵌套有iframe子页面) 1.造成这种情况的原因是:父页面初始化声明变量a为数组(数组对象是引用类型,赋值传递的是地址),创建iframe子页面后给 ...
- Taro自定义Modal对话框组件|taro仿微信、android弹窗
基于Taro多端实践TaroPop:自定义模态框|dialog对话框|msg消息框|Toast提示 taro自定义弹出框支持编译到多端H5/小程序/ReactNative,还可以自定义弹窗类型/弹窗样 ...
- google跟踪代码管理器gtm无法给相同class元素绑定click事件埋点解决
Google 跟踪代码管理器是一个跟踪代码管理系统 (TMS),可以帮助您快速轻松地更新网站或移动应用上的跟踪代码及相关代码段(统称为“代码”).将一小段跟踪代码管理器代码添加到项目后,您可以通过网页 ...
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- Linux相关集合
本篇概述 Linux xshell6 连接 Hadoop 启动关闭 Linux xshell6 连接相关问题 首先,虚拟机 得先能通成网(具体教程可百度) 然后,进行 本机 ip 的查询(xshell ...
- IaaS、PaaS、SaaS介绍(非原创)
文章大纲 一.IaaS.PaaS.SaaS介绍与比较二.参考文章 一.IaaS.PaaS.SaaS介绍与比较 随着云计算.大数据.人工智能等一批新技术的涌入,企业信息化建设速度加快,基于云计算的Iaa ...