【17-Ⅰ】Head First Java 学习笔记

HeadFirst Java

本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。

第一章 Java入门
第二章 面向对象
第三章 变量
第四章 方法操作实例变量
第五章 程序实战
第六章 Java函数库
第七章 继承与多态
第八章 深入多态
第九章 构造器与垃圾收集器
第十章 数字与静态
第十一章 异常处理
第十二章 GUI(内部类)
第十三章 Swing
第十四章 保存对象
第十五章 网络与线程
第十六章 数据结构
第十七章 程序发布


前言

上一大节,我们着重介绍了ArrayList,以及使用sort方法排序歌单。遇到了编译错误的问题,引入了泛型的介绍,以及comparable与comparator两个接口解决 排序的问题。这一小节继续介绍其他的集合。
之后是对其他集合进行介绍,HashSet,TreeSet,Map
又回到泛型,引入万用字符?,解决多态化集合元素的问题。

我们需要思考如何将写完的程序交给用户手上,具体要给啥呢,是.java和.class文件吗,让客户用IDE去运行??
——最后两章,我们讨论如何组织、包装、部署java程序。具体包括可执行的jar,java Web Start,RMI与Servlets等本机、半本机与远程部署选项。

Java的部署

Java程序由一组类组成,这就是开发过程的输出,问题是开发后这些类怎么弄?
用户的系统与我们并不一样,他们也米有应用程序,我们需要将程序塑造成可部署给外人用的形式。
——本机部署:Executable Jar 与 Java Web Start的半本机半远程技术。
在这里插入图片描述

将源代码与类文件分离

//编译加-d,要求编译输出类文件的存放位置
%cd Project/source
%javac -d ../classes MyApp.java
//执行
%cd Project/classes
%java MyApp(.class)//括号表示可省略

在这里插入图片描述

程序包进JAR(JavaARchive)

JAR是个pkzip格式的文件,其将一组类文件包装起来,交付用户只需JAR文件

JAR表示包装所有类的文件,jar表示整理的工具

用户如何使用JAR?——创建可执行JAR

可执行JAR,用户不需要抽出文件即可运行。程序在JAR下运行,关键在于创建manifest文件,带有JAR信息,告诉JVM哪个类有main()
在这里插入图片描述

执行JAR

在这里插入图片描述

%cd Project/classes //jar最好应在该工作目录下
%java -jar app.jar //JVM检查JAR的manifest寻找main(),否则异常

JVM从JAR中载入类,调用main()方法,一旦执行该方法,涉及的类,JVM查询来源寻找,即查classpath下的所有JAR文件
问题思考:为什么只对classes目录jar
在这里插入图片描述

包(package)

相同名称的类,你可能会与Java API下包的类冲突,所以,前面的内容中,我们应该将自己的类包进包中,再将整个包JAR

包的主要目的就是避免类名冲突,回忆第六章,包名 像是 类的全名

在这里插入图片描述

防止包名冲突

反向加上域名称
在这里插入图片描述

类包在包中

1.包名称,如com.headfirstjava
2.类中加入包指令

package com.headfirstjava;
import ...
public class test {
}

3.设定对应目录结构
在这里插入图片描述

编译与执行包

对于Java API核心类,编译器和JVM都可找到类;关键在于自己写的类,按以上规则包装,是最可靠的
在这里插入图片描述

-d指令

将编译结果输出到指定目录,且可自动建立对应包的输出目录
在这里插入图片描述

一旦类被装进包中,必须在Bash栏指定类的全名。
比如 java com.foo.Book,JVM会先找带有foo目录的com目录,再去查找Book类

以包创建可执行JAR

1.确定所有类文件在class目录下,正确对应包结构
2.创建manifest.txt描述带有main()的类(完整名),放在classes目录下

Main-class: com.headfirstjava.test

3.执行jar工具创建带有目录结构与manifest的JAR文件

%cd Project/classes
%jar -cvmf manifest.txt test.jar  com  //指定com目录即可,其下包的类会包进JAR

在这里插入图片描述

思考:manifest文件在jar中何处?
使用jar工具解压即可知道
在这里插入图片描述

思考:用户尝试执行JAR但没有安装Java?

无JVM,所以不执行
如何让用户安装Java呢?
——提供工具创建installer,检测用户是否安装,无则帮用户安装并设定Java
在这里插入图片描述

练习
如图所示,如何实现编译、执行、创建JAR、执行JAR。

%cd source
%javac -d .../classes javaranch.cows.Foof.java%cd classes
%java javaranch.cows.Foof%jar -cvfm manifest.txt Foof.jar javaranch%java -jar Foof.jar

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

java中的oop(一)、概念

一、三大主线 (非官方) 成员:属性、方法、构造器、(代码块,内部类); 特征:封装、继承、多态、(抽象)——三大特征; 关键字: this、…

如何使用openEuler 22.03 配置mail.rc给邮箱发送邮件

目录 需求环境总体步骤梳理详细步骤1. 安装mailx软件包(centos默认安装,openEuler不默认安装)2. 检查是否能ping得到smtp服务器3. 在qq邮箱开启smtp设置4. 修改/etc/mail.rc文件5. 测试 可能遇到的问题 需求 希望检查每日的备份和系统运行记…

【Vulhub靶场】Nginx 中间件漏洞复现

【Vulhub靶场】Nginx 中间件漏洞复现 一、Nginx 文件名逻辑漏洞(CVE-2013-4547)1. 影响版本2. 漏洞原理3. 漏洞复现 二、Nginx越界读取缓存漏洞(CVE-2017-7529)1. 漏洞详情2. 影响版本3. 漏洞复现 三、Nginx 配置错误导致漏洞&…

1013: 哈希表(开放定址法处理冲突)

解法: 线性探测是一种解决哈希冲突的方法,当发生哈希冲突时,它会依次往后查找空的槽位,直到找到一个空的槽位或者达到数组的末尾。 下面是处理哈希冲突的线性探测的步骤: 创建一个哈希表,里面包含一定数量的…

Oracle数据库如何插入平方(²)立方(³)字符

第一步:创建数据表,字段一定要是NVARCHAR2类型的 第二步,插入数据用 unistr(1\00b3) 形式的写法 00b3 代表m,00b2代表㎡ SELECT * FROM TESTABC; UPDATE TESTABC set NAME1unistr(1\00b3); UPDATE TESTABC set NAME2unistr(2\00b2…

python从0开始学习(五)

目录 前言 1、顺序结构 2、选择结构 2.1双分支结构 2.2多分枝结构 2.3嵌套使用 2.4多个条件的链接 总结 前言 在上篇文章中,我们学习了python中的运算符,本篇文章继续往下讲解。本篇文章主要讲解程序的组织结构。 1、顺序结构 顺序结构是程序按照…

图片转图标(ICO)的工具软件

目前常用的ICO转换方式大多都是网页在线转换,没网就无法使用了。自己编写了一款小软件,可以将各种格式图片转为ICO图标。 目前支持PNG,BMP,JPG,JPEG,GIF等格式的图片转换成ICO,支持的尺寸有常用的16*16,24*24,32*32&am…

【MySQL基本查询(下)】

文章目录 一、update案例 二、Delete案例注意:delete 全表数据的行为慎用!truncate 三、插入查询结果案例 四、了解一些函数1.count函数2.sum函数3. avg函数4.max函数5. min函数 五、group by子句的使用案例having和where 一、update 该关键字的功能就是…

探索 Joomla! CMS:打造个性化网站的利器

上周我们的Hostease客户咨询建站服务。他想要用Joomla建站。Hostease提供免费安装Joomla CMS服务。这可以让客户搭建网站变得更加简单和高效。下面是针对Joomla建站的一些使用心得。 Joomla CMS是一款开放自由的软件,为用户提供了创建和维护网站的自由度。它经过全…

单调栈:(C++)

在题目的要求中,存在先进后出(即在前面的数据需要遍历到后面的某一数据时才能确定计算值)单调栈在一部分解题场景中避免了暴力解法的高时间复杂度问题,但是在做题过程中视情况而定,有些题目的最优解不一定使用单调栈&a…

多维点分布的均匀性评估方法(NDD和Voronoi 图法)

评估多维点分布的均匀性是统计学和数据科学中的一个重要问题,特别是在模拟、空间分析和样本设计等领域。下面,我将详细介绍2种评估多维点分布均匀性的方法,包括它们的数学原理、实现公式以及各自的优缺点。 1. 最近邻距离法(Neare…

复习了好久的软考中项,现在上半年不考了,该怎么办?

如果有更多学习时间的话,可以考虑报考高级职称,因为高级和中级职称的很多知识点有重叠,只需要再复习一下相关论文就可以了。 从2024年下半年开始,集成考试将采用最新版教材和大纲,与高级职称的新版教材内容相似度很高…

深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略

🔥 个人主页:空白诗 文章目录 🔥 引言🧱 原型基础⛓️ 原型链的形成🔄 修改原型的影响🏁 原型链的尽头为什么null标志着结束?实际意义 🌐 🔄 继承的实现方式1. 原型链继承…

海外仓管理系统:为什么推荐基于云的SaaS模式,而不是本地部署

海外仓管理系统 是 海外仓 企业 使用 最多 的 软件 , 根据 公开 的 行业 数据 显示 , 几乎 8 4 % 的 海外仓 企业 都会 通过 海外仓 管理系统 来 管理 仓储 。 然而,市场上存在很多不同类型的海外仓管理系统可以选择,归结起来有两…

【Web】2023浙江大学生省赛初赛 secObj 题解

目录 step 0 step 1 step 2 step 3 题目本身是不难,简单复健一下 step 0 pom依赖就是spring 反序列化入口在./admin/user/readObj 输入流做了黑名单的过滤,TemplatesImpl不能直接打 可以jackson打SignedObject二次反序列化绕过 具体原理看下面这…

哪里有视频素材可以用?全视频素材都在哪里找?

在这个数字化快速发展的世界中,高清和4K视频素材对于提升视觉故事的品质至关重要。以下是一系列全球知名的视频素材网站,它们提供的高质量素材能够满足您从商业广告到个人项目的所有需求。 1. 蛙学府 以其庞大的创意资源库著称,订阅者可以无…

1.基于python的单细胞数据预处理-归一化

目录 归一化的引入移位对数皮尔森近似残差两个归一化方法的总结 参考: [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 归一化的引入 在质量控制中,已经从数据集删除了低质…

百面算法工程师 | 传统图像处理——OpenCV

本文给大家带来的百面算法工程师是传统图像处理的面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们将介绍一些集几何变换和图像平滑处理,并提供参考的回答及其理论基础&…

JAVA 双亲委派之一

JAVA 双亲委派之一 JVM类加载流程 java语言系统内置了众多类加载器,从一定程度上讲,只存在两种不同的类加载器:一种是启动类加载器,此类加载由C实现,是JVM的一部分;另一种就是所有其他的类加载器&#xf…

QT作业5

1、聊天室 服务器端 //头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QListWidget> #include <QMessageBox> #include <QDebug> #includ…