Java复习-23-包

包的定义与使用

包的定义

包 = 存放类程序文件的目录,程序类中定义的包名称必须采用小写字母的形式定义。

package com.example.demo ; // 定义包,其中.表示分割子目录 (子包)
public class Hello {public static void main(String args[]) {System.out.println("Hello World !");}
} 

一旦程序开发之中出现有包,此时程序编译后的结果就必须将*.class文件保存在指定的目录之中,但是如果手工建立则非常麻烦,那么此时最好的做法是可以进行打包编译处理:

javac -d . Hello.java
  • “-d”:表示要生成目录,而目录的结构就是package定义的结构com/example/demo
  • “.” :表示在当前所在目录中生成程序文件

有了如上的包后,在程序执行时,必须要带有包

java com.example.demo.Hello

从此之后,完整的类名称应该是“包.类名称”

包的导入

导入

  1. 导入单类
    利用包的定义实际上就可以将不同的功能的类保存在不同的包之中,但是这些类彼此之间也一定会存在有互相调用的关系,那么在这个时候就需要使用import语句来导入其他包中的程序类。
  2. 导入整包
    当遇到要导入同一个包中的许多类时,可使用import 包.* 的导入形式,它会根据自己的需要加载所需要的程序类,不需要的程序类是不会被加载的,所以使用 * 还是使用具体的类,性能上是没有区别的。
  3. 类名冲突(包不重名)
    而当两个包中都包含有名称相同的程序类时,此时在主程序中使用类,必须声明出类的完整名称。

多包编译

若导入的包也未编译的话,且当类的数量很多,彼此之间互相引用严格时,那么这个时候最好的做法不是区分顺序,而是直接交给java自己来完成:javac -d . *.java

public class 和 class 的区别

  • public class:类名称必须与文件名称保持一致,一个 *.java 文件里面只允许有一个 public class,同时如果一个类需要被其他的包所使用,那么这个类一定要定义为 public class;
  • class:类名称可以与文件名称不一致,并且在一个 *.java 文件里面可以提供有多个 class 定义,编译后将形成不同的*.class文件,但是这些类只能够被本包所访问,外包无法访问

静态导入

当使用了静态导入之后,就好比该方法是直接定义在主类中一样,即此时调用该方法时,不需要再添加类名。(有点类似与 C语言的 #include)
但实际运用中较少。

jar文件

定义

对于一个项目工程,到最后会有大量的class文件,这些文件如果散着给用户,不利于维护,因此可以利用一种压缩结构来进行处理,这样的结构再java中被称为jar文件。

打包命令

利用jdk中提供的jar命令来完成:

  1. 对程序进行打包编译:
    java -d . *.java
    最终会形成一个 com 的包,包中有相应的子包和 *.class文件
  2. 将其打包为 test.jar
    jar -cvf test.jar com
  • “-c”:创建一个新的jar文件
  • “-v”:得到一个详细输出
  • “-f”:设置要生成的jar文件名称,本处定义的是“test.jar”

包的使用

  1. 每一个 *.jar 文件都是一个独立的程序路径,如果想在Java程序中使用此路径,则必须通过 CLASSPATH 进行配置。
    Set CLASSPATH=.; 盘符:\前置路径\test.jar (多个路径,使用分号分隔)
  2. 正常编译那个调用了jar包中的类的主java程序,并使用
编译程序类:javac -d . testDemo.java 
解释程序:  java testDemo
  1. 其他情况
    当程序编译通过后,若由于CLASSPATH发生了改变,类无法加载到testDemo类的时候会出现如下的错误提示:

Exception in thread “main” java.lang.NoClassDefFoundError: testDemo
出现该报错,只有一个情况:*.jar包没有配置正确。

JDK1.9之后出现的模块化操作

  • JDK1.9之前实际上提供的是一个所有类的 *.jar 文件(rt.jar,tools.jar),此时开发中,只要启动了java虚拟机,那么就需要加载这几十M的类文件。
  • 在 JDK 1.9之后提供了一个模块化的设计,将原本很大的要加载的一个*jar文件变成了若干个模块文件,这样启动的时候可以根据程序加载指定的模块(模块中有包),以加快启动速度。

系统常用包

  • java.lang:像 String、Number、Object 等类都在这个包里面,这个包在JDK1.1之后自动默认导入;
  • java.lang.reflect: 反射机制处理包,所有的设计从此开始;
  • java.util:工具类的定义,包括数据结构的定义;
  • lava.1o:进行输入与输出流操作的程序包;
  • lava.net:网络程序开发的程序包;
  • lava.sql:进行数据库编程的开发包;
  • java.applet: Java 的最原始的使用形式,直接嵌套在网页上执行的程序
    • 现在的程序已经以 Application 为主了 (有主方法的程序);
  • java.awt、javax.swing: Java 的图形界面开发包(GUI)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录--移动端的双击事件好不好用?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 2023年了,我不允许还有人不会自己实现移动端的双击事件。 过来,看这里,不足 50 行的代码实现的双击事件。 听笔者娓娓道来。 dblclick js原生有个dblclick双击…

UDP的可靠性传输

UDP系列文章目录 第一章 UDP的可靠性传输-理论篇(一) 第二章 UDP的可靠性传输-理论篇(二) 文章目录 UDP系列文章目录前言1.TCP 和UDP格式对比2.UDP分片原理3.UDP 传输层应该注意问题4.MTU5.UDP 分片机制设计重点 一、ARQ协议什么…

Python基础知识详解:数据类型、对象结构、运算符完整分析

文章目录 python基础知识数据类型类型检查对象(object)对象的结构变量和对象类型转换运算符(操作符)1. 算术运算符2. 赋值运算符3. 比较运算符(关系运算符)4. 逻辑运算符5. 条件运算符(三元运算符) 总结 py…

【PowerQuery】PowerQuery导入JSON数据

Json数据是目前使用的最为频繁和广泛的一种数据交换格式,JSON的全称为JavaScript Object Notation。Json 主要用于在互联网的消息的数据交换信息传递,他的格式与XML有什么区别呢?为什么不用XML,用Json有啥好处呢?我们接下来讨论下Json相比XML的优势: XML传递的数据过多服…

git回退到某个提交

git是一个分布式版本控制软件,分布式版本库的做法使源代码的发布和交流都极为方便,因此有不少用户都在使用git。最近小编也正在学习git这款软件,发现要想熟练运用git,学会git中的一些命令是很重要的,如果我们要回滚到某…

手写RPC框架--2.介绍Zookeeper

RPC框架-Gitee代码(麻烦点个Starred, 支持一下吧) RPC框架-GitHub代码(麻烦点个Starred, 支持一下吧) 该项目的RPC通信将采用NettyZookeeper,所以会在前两章介绍使用方法 介绍Zookeeper Zookeepera.概述1) 数据模型2) Watcher机制 b.安装和基本操作1) Java操作zooke…

16字节协议的串口通信

1.协议要求 协议为帧传输,一共16字节。主要是2字节的固定帧头 EB 90,2字节的帧计数(用来计数发出的帧),10字节的数据和2字节的校验位 帧头:2字节,固定值 8’HEB、8’H90 帧计数:2字节,用来说明发出去帧是…

Netty服务端启动的整体流程-基于源码4.1.96Final分析

Netty采用的是主从Reactor多线程的模型,参考Scalable IO in Java,但netty的subReactor为一个组 一、从FileServer服务器示例入手 public final class FileServer {static final boolean SSL System.getProperty("ssl") ! null;// Use the …

【笔记】软件测试的艺术

软件测试的心理学和经济学 测试是为发现错误而执行程序的过程,所以它是一个破坏性的过程,测试是一个“施虐”的过程。 软件测试的10大原则 1、测试用例需要对预期输出的结果有明确的定义 做这件事的前提是能够提前知晓需求和效果图,如果不…

ChatGPT是否可以协助人们提高公共演讲和表达能力?

ChatGPT作为一种自然语言处理的AI技术,具有潜在的能力协助人们提高公共演讲和表达能力。公共演讲和表达是重要的沟通技能,对于职业和个人发展都具有关键性的作用。本文将探讨ChatGPT如何在这方面发挥作用,包括以下几个方面: 1. *…

Linux 操作系统实战视频课 - GPIO 基础介绍

文章目录 一、GPIO 概念说明二、视频讲解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 GPIO 。 一、GPIO 概念说明 ARM 平台中的 GPIO(通用输入/输出)是用于与外部设备进行数字输入和输出通信的重要硬件接口。ARM 平台的 GPIO 特性可以根据具体的芯…

C++11新特性① | C++11 常用关键字实战详解

目录 1、引言 2、C11 新增关键字详解 2.1、auto 2.2、override 2.3、final 2.4、nullptr 2.5、使用delete阻止拷贝类对象 2.6、decltype 2.7、noexcept 2.8、constexpr 2.9、static_assert VC常用功能开发汇总(专栏文章列表,欢迎订阅&#xf…

LeetCode 剑指 Offer 10- I. 斐波那契数列

LeetCode 剑指 Offer 10- I. 斐波那契数列 题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) 0, F(1) 1 F(N) F(N - 1) F(N - …

Unity项目包体优化经验方法论(Android平台)

前言 本篇文章主要讲解对于Unity Android平台也就是APK包体的优化经验,使用哪些工具能够更加便利的定位资源重灾区。本篇讲解的方法中对于Unity资源使用的AssetBundle的方式,如果使用addressable或其他资源管理方式,我还不是很清楚是否适用&…

使用pyenv安装python缓慢或无法安装

使用pyenv安装python缓慢或无法安装 这一定程度上和网络情况有关,下面提供几个常见方法: 关闭 VPN 后重新安装使用管理员权限打开命令窗口后安装如下 手动安装 pyenv 在执行 pyenv install --- 命令的时候,会连接远程库,将要安…

matlab使用教程(28)—微分方程(ODE)求解常见问题

1.非负 ODE 解 本博客说明如何将 ODE 解约束为非负解。施加非负约束不一定总是可有可无,在某些情况下,由于方程的物理解释或解性质的原因,可能有必要施加非负约束。仅在必要时对解施加此约束,例如不这样做积分就会失败或者解将不…

springboot项目中application.properties无法变成小树叶问题解决

1.检查我们的resources目录的状态,看看是不是处在普通文件夹的状态,如果是的话,我们需要重新mark一下 右键点击文件夹,选择mark directory as → resources root 此时我们发现配置文件变成了小树叶 2.如果执行了上述方法还是不行…

Golang web 项目中实现自定义 recovery 中间件

为什么需要实现自定义 recovery 中间件? 在 Golang 的 Web 项目中,自定义 recovery 中间件是一种常见的做法,用于捕获并处理应用程序的运行时错误,以避免整个应用程序崩溃并返回对应格式的响应数据。 很多三方 web 框架&#xf…

智能手机收入和出货量双双下滑,造车成本不断增长,小米集团仍面临风险

来源:猛兽财经 作者:猛兽财经 华尔街分析师对小米集团第二季度的业绩预测 在8月29日小米集团(01810)公布其2023年第二季度财报之前,华尔街分析师曾预测该公司第二季度的业绩将超出2023年第一季度的业绩。 根据S&P …

uniapp点击事件在小程序中无法传参

这个问题很是神奇,第一次遇到。在h5中,点击事件可以正常传参,打包小程序后确失效了。 修改:for循环中的key,使用 index就好了