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