软件开发介绍
软件开发
软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分。
人机交互方式
- 图形化界面(Graphical User Interface GUI),这种方式简单直观,使用者易于接受,容易上手操作。
- 命令行方式(Command Line Interface CLI),需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要清楚一些指令。
做软件开发,需要掌握一些基本的命令行指令。
常用的DOS命令
打开命令行窗口:开始
的搜索
中输入cmd
回车即可,cmd=command
。
d:
:切换到d盘。dir
:列出当前目录下的文件及文件夹。dir=directory
md java
:创建一个名为java的目录。md=make directory
rd java
:删除名为java的目录。rd=remove directory
注意rd
命令删除目录,需要保证删除的目录是空目录。
如果要删除的目录中有文件,那么可以通过两种方式删除该目录:1)先进入到目录中,将其中的文件删除了,再退出该目录,删除该目录。2)使用del
命令,直接一步删除目录中的所有文件,再删除该目录。del java
:删除名为java的目录下的所有文件,注意是所有文件,无法删除目录。cd java
:进入指定的java目录。cd..
:退回到上一级目录。退回到盘符下时就无法再退了,因为已经到了根目录下。cd\
:退回到根目录。不管是反斜杠\
还是斜杠/
都可以。del 1.doc
:删除1.doc
文件。del *.txt
:删除全部以txt
为后缀的文件,*
代表所有,是一个通配符。exit
:退出dos命令行。echo content>1.doc
:将内容为content
写出到1.doc
文件中,相当于创建了一个有内容的名为1的doc文件。
目录删除操作实际上属于递归操作。如果要删除一个目录,需要先进去看里面是否有别的文件或目录,如果还有目录还需要进去看是否还有别的文件或目录,然后一层一层删除,最后才能删除最初要删的最外层目录。这样的操作可以通过java代码实现。
计算机编程语言介绍
软件开发依赖于具体的编程语言,有很多种编程语言。
- 计算机语言:人与计算机交流的方式。
计算机语言有很多种。比如:C, C++, JAVA, PHP, Kotlin, Python等。(Kotlin语言是谷歌开发的,用于安卓开发的语言。) 计算机语言的发展
- 第一代语言:机器语言。指令以二进制代码形式存在。也就是说,写的代码就是0,1组成的。
- 第二代语言:汇编语言。使用助记符表示一条机器指令。比如
add 2,3,result
。相较于机器语言高级一点,但仍然封装性差,学习成本太大。 - 第三代语言:高级语言,有了更高层面的封装。习惯上,高级语言又分了两个阶段,面向过程的阶段和面向对象的阶段。
C、Pascal、Fortran面向过程的语言。
C++面向过程/对象。C++是面向过程到面向对象的过渡,因此兼具面向过程和面向对象的特点。
Java跨平台的纯面向对象的语言。Java之后的语言(下面列举的)都是面向对象的语言。
.NET跨语言的平台
Python...
- 为什么谷歌公司在最初开发安卓操作系统时,将Java语言作为开发语言呢?
谷歌的安卓系统架构:最底层是Linux内核,不论是安卓还是ios都是采用Linux内核与硬件交互。上一层左侧LIBRARIES
的主体都是用C语言开发的,C和C++语言的特点就是其开发效率不高但运行效率很高,因此,凡是和操作系统交互的,底层的,通常都是用C或C++开发;右侧是运行环境,提供了一些Java的类库。再往上就是应用程序框架,都是用Java写的。再上面就是应用,就是Java对应的应用程序。
Java开发效率高,C在底层运行效率高,但毕竟是面向过程的语言,开发效率太低。另一方面,Java社区活跃程度、从业人员都是更占优势的。
Java在Web开发上面是绝对的霸主,实际上Python也可以做Web开发。
JavaScript和Python属于轻量级语言,类库和语言都没那么严格。Java,C,C#属于比较重型的语言,具有严格语法,丰富的类库。
Objective-C或SWIFT语言是主要用于开发苹果的操作系统应用。
Java语言概述
- 是SUN(Stanford University Network, 斯坦福大学网络公司)1995年推出的一门高级编程语言。
- 是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序能够在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。applet内嵌在HTML代码中。
随着Java技术在Web方面的不断成熟,已经成为Web应用程序的首选开发语言。现在是指后台开发的首选语言。
Java简史
- 2004年,发布里程碑式版本:JDK 1.5,为突出此版本的重要性,更名为JDK 5.0。本来JDK的名称版本都是1.几,1.5的时候改成了5.0,因此后续的1.6=6.0,以此类推。之所以是里程碑式的版本,是因为这个版本新添了很多新特性。
- 2014年,发布JDK 8.0,是继JDK 5.0以来变化最大的版本。通常公司装的JDK 1.8。
- 2017年,发布JDK 9.0,最大限度实现模块化。并且9.0之后,发布的新的JDK比如JDK 10.0的版本号改成用时间来命名了,JDK 10.0也称为18.3,18年3月发布。
Java其实是一个地名,有一个岛叫爪洼岛,这个岛是盛产咖啡的,java的标识就是一杯咖啡。
Java技术体系平台
- Java SE(Java Standard Edition)标准版,现在基本没有用Java写桌面级应用了。由于Java SE中除去桌面级应用的那部分与Java EE基础部分是相同的,因此Java SE称为Java基础,实际上就是说的Java SE没有桌面级应用的部分为Java EE的基础。
- Java ME(Java Micro Edition)小型版和Java Card可以合在一起。现在在这块Java体现的就是安卓应用。
Java在各领域的应用
- 企业级应用(Java Web开发):后台开发。
- Android平台应用:客户端开发。
- 大数据平台开发。
Java语言的特点
Java确实是从C语言和C++语言继承了许多成分,甚至可以将Java看成类C语言发展和衍生的产物。比如Java语言的变量声明,操作符形式,参数传递,流程控制等方面和C语言、C++语言完全相同。
但同时,Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代,Java也有指针但封装性很好)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,也就是能够自动回收。
- Java语言的主要特性
学完了用了Java后再回来看,才能理解。这里所提到的特性与后面所提到的相比比较泛泛。
Java语言运行机制及运行过程
Java语言的特点
特点一:面向对象
- 两大基本概念:类、对象。
- 三大特性:封装、继承、多态。
特点二:健壮性
- 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制。
特点三:跨平台性
- 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。Write once, Run anywhere。
- 原理:只需要在运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
跨平台性也就是说用Java写的程序可以在windows本上跑、Mac操作系统本上跑还可以在Linux操作系统上跑等。
前面提到过应用程序都是基于操作系统的,比如说win版的office应用程序,无法装在mac本上,因为不兼容。也就是说应用程序都基于不同的操作系统来编写的。
为什么Java能够做到一个应用程序在不同的操作系统上都跑呢?这就是因为JVM。
因为有了JVM,同一个Java程序在三个不同的操作系统中都可以执行。这样就实现了Java程序的跨平台性。
实际上,就是因为给每个操作系统提供了对应版本的JVM(不同操作系统下的JVM是不一样的),也就是说Java应用程序实际上是跑在JVM上的,JVM装在不同的操作系统上。
Java两种核心机制
Java虚拟机(Java Virtual Machine)
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对于不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的JVM,java程序才可以在此平台上运行。
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行。”
我们写的java程序去执行时就是字节码文件,然后我们把我们的java程序放到JVM上去跑,JVM是跑在具体的操作系统上,操作系统又依赖于具体的硬件,CPU帮我们去运算,就是这样一个过程。
垃圾收集机制(Garbage Collection)
- 不再使用的内存空间应回收——垃圾回收。
- 在C/C++等语言中,由程序员负责回收无用内存。
- Java语言消除了程序员回收无用内存空间的责任:它提供了一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
- 注意:Java程序还是会出现内存泄漏和内存溢出问题。我们写的程序有时会导致垃圾收集器不能识别需要释放的空间。泄露指的是有的空间不用了,但回收不了。
Java语言的环境搭建
本次学习是以8版本为主。Java(实际上说的是JDK)不同版本是包含关系,新的版本是向下兼容的。
什么是JDK,JRE?
JDK(Java Development Kit,Java开发工具包)
- JDK是提供给Java开发人员使用的,其中包含了
java的开发工具
和JRE
。因此,安装了JDK,就不用再单独安装JRE了。 - 其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等。
- JDK是提供给Java开发人员使用的,其中包含了
JRE(Java Runtime Environment,Java运行环境)
- 包括Java虚拟机(JVM)和Java程序所需的核心类库等。如果想运行一个开发好的Java程序,计算机中只需要安装JRE即可。
简单而言,使用JDK的开发工具完成java程序,交给JRE去运行。
JDK、JRE、JVM关系
- JDK = JRE + 开发工具集(如javac编译工具等)
- JRE = JVM + JavaSE标准类库
Java 8.0平台官方图:
因此,开发Java要安装JDK
- 从官网下载对应操作系统的对应版本的JDK。
下载好后,双击。
- 首先注意的点是,不建议装在C盘,并且安装的各种软件都不要装在包含中文和空格的路径下,因为很多开发工具不识别中文。另外,安装时尽可能保留版本号,即用版本号命名。
- 在我们安装时,会弹出一个框让我们再装一个JRE,实际上JDK中包含了JRE。由于Eclipse(之后要装的)它需要识别一个独立的JRE,因此,额外的这个JRE也安装一下。
- 安装好后,安装目录下就是这样:
进入jdk目录下,简单介绍一下各个部分
bin
:开发工具。有几个常用的,javac.exe
编译时会用到,java.exe
解释运行时会用到,还有一个javadoc.exe
生成一个以网页形式存在的文档。db
:Java实现的数据库。include
:涉及到用C语言编写的头文件,就是Java要调C语言一些指令就要用到的结构。jre
:JRE,Java运行环境。lib
:一些相关jar包。src.zip
:存放Java开源的一些代码,常见的一些类库可以从中进行查看。
配置环境变量path
- 前面打开的
bin
目录有几个常见的开发指令,这些开发指令在我们后续写Java程序后需要执行,执行就需要调这些结构。一开始执行,我们都是在命令行中执行,因此,我们希望在命令行中能够调用这几个开发指令。目前,我们打开命令行,需要切换到这些开发指令的目录下,才能成功调用它们,否则无法调用。 我们希望,在任何文件目录下,都能够执行这几个开发指令。这就需要配置环境变量。
- 右键
计算机
-属性
-高级系统设置
-环境变量
。打开后有两部分,用户变量
就是针对当前用户有效的,系统变量
就是针对所有用户都有效的。 - 我们关注的是
path
环境变量,它是windows系统执行命令时要搜寻的路径。我们在命令行执行命令时,它是现在当前路径下找一下看看有没有所要执行的比如说javac.exe
的指令,如果有就执行,如果没有,就会去path中的各个路径去找。 - 因此,我们只需将
jdk
的bin
目录下的路径放到path
下即可。配置好后,重启命令行即可。 - 虽然到上面为止就已经成功了,但开发中都不这样配。通常实际中,会将
bin
所在的目录的路径放到一个新的变量JAVA_HOME
中,这个变量是我们自己新建的,然后将这个变量在path
下通过两个%号,做一个动态的引用,这样来配置。实际上,等同于前面配的那样,只不过是通过了一个中间变量。
具体操作:
之所以需要这样配置,是因为之后搭建Tomcat
服务器,它会识别这个变量,也就是它会找JAVA_HOME
,因此我们提前都这样配置。说白了就是很多工具本身要求这样。
- 右键
- 前面打开的
以上我们就搞定了JDK的安装和配置。
开发体验——HelloWorld
写
HelloWorld
,首先需要一个用来写程序的工具,最简单的就是使用记事本来写。- 先在一个目录下(D盘Java目录下)新建一个
code
目录来存放初学时写的代码,之后用Eclipse就有具体的工作空间了。 - 写代码就是写指令,就是文本嘛,因此新建一个文本文件来写就代码就行。
- 注意,文件名称不用中文,这里就命名为
HelloWorld
,java的代码的文件后缀是java
。 - 打开该文件,打开方式就选择记事本。
- 用小写
class
定义一个名为HelloChina
的类。 就先运行一下这样一个简单的程序。
- 刚刚完成了一个以
.java
为结尾的源文件
,执行它首先需要使用javac.exe
命令对源文件进行编译,编译完成后会生成以.class
为结尾的文件,这样的文件称为字节码文件
,然后再通过java.exe
命令来解释运行这个字节码文件
,得到运行结果。
也就是说,Java程序出结果需要两个过程,一个是javac的过程,一个是java的过程,分别对应于编译和运行两个过程。 - 因此,我们首先编译
HelloWorld
文件:命令行切换到文件所在路径(因为要编译这个文件,因此需要到有这个文件的路径),编译命令为javac HelloWorld.java
。执行完后,可以看到目录中出现了.class
结尾的文件,即字节码文件。字节码文件的文件名与源文件名不一样,字节码文件名是源文件中的类名。实际上,字节码文件就对应于源文件中的类。 - 下一步,解释运行
HelloChina.class
文件,解释运行命令为java HelloChina
,注意这里要解释运行的文件的后缀不需要写。 - 报错,提示我们类
HelloChina
中需要有main方法
。写的时候,不要顶格写,按Tab
键,来加上缩进,使得写的程序有结构,可读性更强。注意,Java代码严格区分大小写,写代码时需要注意。 - 重新编译,会把重新编译的结果覆盖掉之前的结果。重新运行,运行成功。
- 希望有结果显示出来,我们必须再写点东西。
- 再重新编译、解释运行。
- 注意每行程序有分号
;
分隔。
- 刚刚完成了一个以
- 先在一个目录下(D盘Java目录下)新建一个
- Java程序从编写到得到运行结果的步骤:
EditPlus的安装和配置
整一个比记事本稍微高级一点点的工具,EditPlus,其实也是记事本。
注释(Comment)
用于解释说明程序的文字就是注释。
Java中的注释类型:
- 单行注释:
//单行注释
- 多行注释:
/*多行注释*/
单行注释和多行注释,注释了的内容不参与编译。也就是说,编译后生成的字节码文件中不包含注释的信息。 文档注释(Java特有)
格式:
/** @author 指定java程序的作者 @version 指定源文件的版本 */
- 注释内容可以被JDK提供的工具
javadoc
所解析,生成一套以网页文件形式体现的该程序的说明文档。 - 注意点:通常给javadoc解析的类加上一个
public
。 - 解析命令:
javadoc -d myHello -author -version HelloJava.java
,其中myHello
是生成的说明文档目录名称,HelloJava.java
是用来解析生成说明文档的源文件。
打开生成的myHello
目录,点击里面的index.html
即打开生成的该程序的说明文档。
- 单行注释:
注释的作用
- 提高了代码的可读性。
- 调试程序的重要方法。就是通过注释可能出错的语句,来调试出有问题的代码。
- 注释是一个程序员必须要具有的良好编程习惯。
- 将自己的思想通过注释先整理出来,再用代码去体现。
Java API文档
API(Application Programming Interface,应用程序编程接口)是Java提供的基本编程接口。通俗的说,就是Java提供的类库,把类库统称为API。
- Java语言提供了大量的基础类,因此Oracle也为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。
- API文档下载地址,下滑页面到JDK 8,JDK 8板块底部有一个
Documentation Downloads
按钮,点击进入下载页面。
总结
对第一个Java程序进行总结
Java程序编写-编译-运行的过程。
- 编写:将编写的Java程序保存在以
.java
结尾的源文件中。 - 编译:使用
javac.exe
命令编译Java源文件。格式为:javac 源文件名.java
。 - 运行:使用
java.exe
命令解释运行字节码文件。格式为:java 类名
。
- 编写:将编写的Java程序保存在以
- 一个Java源文件中可以声明多个类,但是最多只能有一个类声明为
public
,并且只能声明给与源文件同名的类。 - 程序的入口是
main()
方法,格式是固定的public static void main(String[] args){}
。 - 输出语句:
System.out.println()
:先输出内容,然后换行。如果没有输出的内容,那就是换行。System.out.print()
:仅输出内容。 - 每一行执行语句以分号
;
结束。 - 编译生成的字节码文件就对应源文件中的类,字节码文件的文件名与源文件中类名相同,因此,通过编译,源文件中每个类都对应一个字节码文件。
- 运行只能运行带有
main()
方法的字节码文件。
良好的编程风格
正确的注释和注释风格
- 使用文档注释来注释整个类或方法。
- 如果注释方法中的某一步骤,使用单行或多行注释。
正确的缩进和空白
- 使用一次
tab
操作,实现缩进。 - 运算符两边习惯性各加一个空格,如1 + 2 = 3
- 使用一次
块的风格:行尾风格和次行风格
- Java API源代码是行尾风格,自行选择。
常用的Java开发工具
文本编辑工具
- 记事本
- EditPlus
- TextPad
- NotePad
Java集成开发环境(IDE-Integrated Development Environment)
- Eclipse
- IntelliJ IDEA
IDEA有的实际上Eclipse都有,但IDEA更人性化,好上手。
复习问题
JDK, JRE, JVM三者之间的关系,以及JDK、JRE包含的主要结构有哪些?
JDK是Java开发工具,JRE是Java运行环境,JVM是Java虚拟机。
JDK = JRE + Java开发工具(javac.exe, java.exe, javadoc.exe)
JRE = JVM + Java核心类库
为什么要配置path环境变量?如何配置?
如果不配置path环境变量,要使用JDK中的Java开发工具时必须到其路径下。配置path环境变量使得能够在任何路径下使用Java开发工具。
在系统或用户变量中的path中添加上Java开发工具所在路径即可。但一般通过新建的一个中间变量JAVA_HOME
完成,具体地,将Java开发工具的安装路径存在JAVA_HOME
中,再在path中引用该变量实现添加Java开发工具所在路径。
常见的几个命令行操作有哪些?
dir
:列出当前路径下的文件或目录。md
:创建目录。cd
:切换目录。del
:删除文件。rd
:删除空目录。
创建如下类,使得运行结果为:
编译和运行上述代码的指令
编译:javac DayOne.java
运行:java DayOne