Java 17 package 包的使用 java类的定义和使用
lipiwang 2024-10-25 15:55 5 浏览 0 评论
Java 17 package 包
思维导图
package 在 Java 中就是包的意思, 为什么会出现这个知识点, 主要的原因是因为避免类的重复。
任何真实的项目都会有对应的项目名以及开发过程中需要用到的类文件(对于 Java 来说),这些一个一个业务功能的封装成了一个又一个的项目基石。 但是对于类来说, 操作文件可能都叫做 FileUtils.java 也可能所有的主函数都叫做 Application.java。但又怎么能区分这个类是谁写的, 而不会因为类名一样调用的时候不知道应该是使用谁呢?
成百万的开发人员都写 Hello World 程序, 类名都叫做 Hello.java 怎么区分?
既然张三写 Hello.java, 李四也写 Hello.java,那我让你们前面加上你们的标识, 张三.Hello.java 和 李四.Hello.java。这样就可以区分是张三还是李四写的了。 但是张三和李四也有可能重复, 怎么保证这个不重复呢, 在定义 package 的时候一般使用域名的反向编写。 比方说, 你有一个域名 xymiao.com。你的包就可以使用 com.xymiao 进行填写。 可以看现在以后的开源程序大多都是用这个方式进行命名的。这个在其他的语言中也有叫做命名空间的,比方说 .net 体系。 这就是包的机制的由来。
基本上现有的语言都是从一代又一代的迭代而来的,跟得上时代的语言都在一代有一代的版本中加入了新的特性。 那些没有跟上步伐的, 也都被企业开发所放弃, 注意这里是企业放弃, 并不是说那些已经被淘汰的语言就不能学习和使用了。 每个语言都有其特点和思想。 主要的学习语法的同时也要学习思想。
package 格式
package 包名;
package 只能定义在最上层。也就是 calss 之前。
在编译的时候, 会生成 package 的目录 xymiao ,并且把 .class 的文件放到 xymiao 目录中。
在上面的 javac 命令前面详细的讲解了使用方法。 这里直接使用 -d .其中的“.” 代表了当前目录。
从这可以看出来, 对于 package 就是和文件系统中有相同层次的目录结构。
对于执行来说, 有了 package 之后, 就需要理解 classpath 这个知识点。 因为所有的第三方的 jar ,以及自己后续开发中使用的目录结构, 以及当前的开发工具,在进行编译 Java 的时候都是依靠 package 和 classpath 来结合使用。从这个教程之后, 就不需要再使用富文本编辑器, 使用 javac 和 java 进行编译源代码, 可以考虑使用新的更加智能的 IDE 了。
当前章还最好使用手动编译的过程。 这样更容易理解这个构建的过程。易于后续的知识点学习。
如何使用
既然上面生成了 .class 文件, 对于其他的类文件如何使用这个类呢? 这个时候就需要用到 import 关键字了。导入的概念。 import 的让你可以不写代码, 也能生成任何想开发的程序, 只要面向 github 就好了。
import 格式:
import 包名.类名;
import 包名.*;
如果对于只想使用一个类文件引用,可以直接指定类名, 如果想引入该包下的所有类, 就可以使用 .* 的方法。
忽略上面的红色波浪, 因为对于 package 有一个语法检测, package 和 目录不一致会有一个错误提醒, 忽略即可。
一般情况下, 一个项目的目录架构基础就是 项目目录下, 包含一个 src 和 对应的 classes。
对于目录有一个目录结构。 这个是学习过程中不使用构建工具的目录结构。 如果是构建工具有一个固定的目录结构。 这个后续用到构建工具的时候, 再详细分析。我们根据上面的目录结构怎么进行编译运行和代码整理。
定义项目名:mzpdemo
目录结构如下:
在 src/xymiao/ 的目录下新建文件: Demo18Package.java 代码如下:
package xymiao;
public class Demo18Package {
private String hello= "xymiao";
public String getHello(){
return this.hello;
}
public static void main(String[] args) {
Demo18Package demo18Package = new Demo18Package();
System.out.println(demo18Package.getHello());
}
}
然后编译, 这里编译就需要注意了。 因为我们新定义了项目的目录结构。 所以要根据定义的目录结构进行处理。
首先要把 class 文件编译到 classes 中,打开 powershell 并指定编译的目录。
javac -d ./classes src/xymiao/Demo18Package.java
编译之后, 在 mzpdemo/classes/xymiao/Demo18Package.class 就存在编译的字节码文件了。
运行的时候, 就需要指定 class 的路径, 使用 java -cp 指定一个 classpath:
java -cp ./classes xymiao/Demo18Package
效果如下:
对于这个结构要多做尝试和链接, 出现问题也没有关系。 多尝试才能理解里面圈圈绕绕。
除了在 package 下方使用 import 的引用的方式, 还可以显式的指定package,例如:
xymiao.Demo18Package d = new xymiao.Demo18Package();
//xymiao 是 package 。
静态引入 package
从 Java 1.5 之后引入了静态引入的概念。主要是用于导入指定类的某个静态成员变量、方法或者是所有的静态成员变量、方法。
对于静态引入。 格式如下:
import static packageName.className.*;
import static packageName.className.[静态成员变量 | 静态方法]
实例如下:
上面演示的代码, 其中全部引用的方式:
import static xymiao.Demo19ImportStatic.*;
可以替换成:
import static xymiao.Demo19ImportStatic.sayHi;
现在可以考虑一个问题,就是在集成开发环境(IDE)中,是如何进行编译的呢。 不管是 Eclipse 和 Idea,都会有配置 JDK 的 Home 问题, 要让 IDE 知道 JDK 在那, 用的那个版本。 然后需要知道编译的文件是什么字符集。 对于 Eclipse 还是默认 GBK, Idea 已经是使用 UTF-8 作为默认值。 并且会有编译目录。 编译目录, 一般是由“项目目录” + "输出目录" + 编译的 class 类, 组合而成。 自己写个简单的编译器? 先关注我吧。 后续到窗口知识点的时候, 可以来做个简单的编译工具。
Java17 的 package 目录结构
因为从 Java 9 开始就进行了模块化。 所以针对 package 目录之上又多了一层模块化分层。
模块 java.base 的 package 包含。
这只是演示让你看到 Java JDK 的 package 的目录结构,多理解他们这样定义的原因和优缺点。
还有一个知识点就是对于 java.lang 包的内容不需要显式的 import。运行期会自动加载该包下的所有类。
package 知识先到这了, 还有什么有遗漏的吗? 评论让我继续学习完善一下该文档吧。
点赞 + 关注 + 收藏, 我是苗子说全栈之 Java。 感谢你的阅读。
每篇一句:健身和读书,是世界上成本最低的升值方式;而懒,是你通往牛逼的路上最大的敌人。
- 上一篇:密码学4「消息摘要和非对称加密」
- 下一篇:大文件上传:秒传、断点续传、分片上传
相关推荐
- 前端 JavaScript 字符串中提取数字
-
varstr="4500元";varnum=parseInt(str);alert(num);//4500如果字符串前面有非数字字符,上面这种方法就不行了:var...
- 使用JavaScript如何获取网站网址(js如何获取浏览器信息)
-
在做网站开发时,我们有时候会获取当前页面的完整路径。在网页前端如何实现呢?请在网页脚本代码段中粘贴如下代码。functiongetRootPath(){//获取当前网址,...
- java文本对比工具源码8(java比较文本相似度)
-
/***ParseatextualrepresentationofpatchesandreturnaListofPatch*objects.*@paramtextline...
- JavaScript实现的9大排序算法(js排序方法)
-
笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现。1、插入排序1)算法简介插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通...
- 使用函数化的Javascript代码编写方式
-
对于Javascript介绍想必大家都耳熟能详啦,基于函数化的编程语言,基于浏览器运行的编程语言,web开发语言,前端开发必备语言,blablabla...Javascript是一个非常灵...
- Js基础31:内置对象(js内置对象是什么意思)
-
js里面的对象分成三大类:内置对象ArrayDateMath宿主对象浏览器提供的对象(如bom、dom等等)自定义对象开发人员自己定义的对象内置对象——所谓内置对象,就是JavaScript自...
- js获取上传文件类型以及大小的方法
-
前端web上传文件时,需要在上传之前判断一下文件的类型以及文件的大小,HTML为前端的标记语言是无法做到这一点,只能使用javascript动态脚本代码来实现。js获取上传文件大小的方法示例代码:&...
- 黑客入门实践:如何绕过前端过滤上传文件
-
今天开始,我们就要开始学习具体的漏洞了,但是希望大家学完后,不要轻易"入侵"网站哦,当时测试环境下除外。今天的课程是关于“文件上传漏洞”,据安界网的老师介绍,文件上传漏洞仅次于命令执行...
- Java文件上传细讲(java文件夹上传)
-
什么是文件上传?文件上传就是把用户的信息保存起来。为什么需要文件上传?在用户注册的时候,可能需要用户提交照片。那么这张照片就应该要进行保存。免费学习资料获取方式上传组件(工具)为什么我们要使用上传工具...
- 鸿蒙上实现“翻译”功能(鸿蒙宴全文翻译)
-
本章节我们来制作中文翻译成英文的实例(运行在HarmonyOS上),通过HTTP去配合API进行实现。需求分析如下:文字输入HTTP协议使用文字翻译控件介绍①HTTP数据请求官方文档请求...
- JavaScript从入门到精通(javascript 入门教程)
-
前几天,我们学习了JavaScript的入门课程,但是要想做网站,仅仅学会入门是不够的,今后的几天,我将带领大家精通JavaScript,希望大家好好学习!JS内置对象String对象:字符串对象,提...
- 第15天|16天搞定前端,javascript语法篇(干货)
-
JavaScript是互联网上最流行的脚本语言,这门语言可用于HTML和web,可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。它是一个脚本语言,它是一个轻量级,但功能强大的编程...
- 通过js来实现打字效果(js如何输入)
-
有时候浏览网页经常会看见一些页面出现一些打字的效果,那么是怎么实现的呢?逻辑确定目标容器,在哪个容器进行输出确定输出内容,当前直接根据目标容器确定输出内容即可需要控制输出频率,因此需要循环输出完毕代码...
- 手把手教你学会一键还原混淆js原理
-
1.短变量名在以下示例代码中,我们将变量“customerName”替换为“a”:vara="JohnSmith";console.log(a);2.随机变量名在以下示例代码...
- sql中常用的字符串函数详解(sql字符串函数有哪些)
-
在日常开发中遇到处理最多的可能字符串要算其中一个了,什么替换啊截取啊大小写转换啊、删除空格啊等等,这些操作我们可以在前端操作,也可以直接在数据库的sql中操作,那么我们来看一下sql中处理字符串的...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)