目录
第一章概述
1.1计算机组成部分
计算机包括硬件(hardware)和软件(software)两部分。一般来说,硬件包括计算机中可以看得见的物理部分,而软件提供看不见的指令,这些指令控制硬件并且使得硬件完成特定的任务。
一台计算机是由一下几个主要的硬件组成构成的:
-
中央处理器( Center Processing Unit,CPU)
-
内存
-
存储设备
-
输入设备
-
输出设备
-
通信设备
这些组件通过一个称为总线(bus)的子系统链接。你可以将总线想象成一个连接计算机组件的道路系统,数据和电信号通过总线在计算机的各个部分之间传输。在个人计算机中,总线搭建在主板上,主板是一个连接计算机各个部分的电路板。
中央处理器
中央处理器是计算机的大脑。它从内存中获取指令,然后执行这些指令。CPU通常由两部分组成:控制单元(control unit)和算术/逻辑单元(arithmetic/logic unit)。控制单元用于控制和协调其他组件的动作。算术/逻辑单元用于完成数值运算法、减法、乘法、除法)和逻辑运算(比较)。
比特和字节
计算机就是一些列的电路开关。每个开关存在两种状态:关(off)和开(on)。简单而言,在计算机中存储信息就是将一系列的开关设置为开或者关。如果电路是开的,它的值是1。如果电路是关的,它的值是0。这些0和1被解释为二进制数字系统中的数,并且将它们成为比特(bit,二进制数)。
计算机中字节(byte)是最小的存储单元。每个字节由8个比特构成。像3这样的小数字就可以存储在单个字节中。为了存储单个字节放不下的大数字,计算机需要使用几个字节。
内存
计算机的内存由一个有序的字节序列组成,用于存储程序及程序需要的数据。你可以将内存想象成计算机执行程序的工作区域。一个程序和它的数据在被CPU执行前必须移到计算机的内存中。每个字节都有一个唯一的地址,使用这个地址确定字节的位置,以便于存储和获取数据。因为可以按任意顺序存取字节,所以内存也被称为随机访问存储器(Randorn-Access Memory,RAM)。内存中字节的内容永远非空,但是它的原始内容可能对于你的程序来说是毫无意义的。一旦新的信息被放入内存,该字节的当前内容就会丢失。
存储设备
计算机的内存是一种易失的数据保存形式:断电时存储在内存中的信息就会丢失。程序和数据被永久地存放在存储设备上,当计算机确实使用它们时再移入内存,因为从内存读取比从存储设备读取要快得多。
存储设备主要有以下三种类型:
-
磁盘驱动器
-
光盘驱动器
-
USB闪存驱动器
输入和输出设备
输入设备和输出设备让用户可以和计算机进行通信。最常用的输入设备是键盘和鼠标,而最常用的输出设备是显示器和打印机。
通信设备
计算机可以通过通信设备进行联网,例如,拨号调制解调器、DSL、电缆调制解调器、有线网络接口卡、或者无线适配器。
1.2人机交互方式
用户和计算机交互("打交道")的方式有两种:
-
图形化界面方式(Graphical User Interface,GUl)︰这种方式简单直观,使用者易于接受,易上手操作
-
命令行方式(Command Line Interface,CLI)∶需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记住一些命令。主要是以字符为形式的一种交互方式,最早期的形式,在Linux中是最主要的一种操作方式。Windows中的终端 win+R 输入cmd 回车
通过命令行可以和计算机进行相应的沟通,也就是说只要我们输入命令即可完成和计算机沟通的目的。
什么是命令?所谓的命令其实就是OS平台下的可执行程序->就是已经被编译好的代码->已经写好并编译程序
一些常用的dos命令:
-
dir:列出当前目录下的文件以及文件夹
-
md:创建目录
-
rd:删除目录
-
cd:进入指定目录
-
cd..:退回到上一级目录
-
cd\:退回到根目录
-
del:删除文件
-
exit:退出dos命令行
-
help:帮助命令
-
cls: 清屏
powershell
-
既遵循cmd下的命令也遵循Linux下的命令。
早期操作电脑常用dos命令,为需要记住很多命令,不利于普及,后期发展成图形界面,通过鼠标点击界面的形式完成对电脑的操作,其实内部运行的还是这些命令。
前期在进行Java代码编译和运行的时候,我们主要是以命令行的形式操作,可以看到一些集成环境中看不到的知识。
1.3计算机语言
计算机不理解人类的语言,所以,计算机程序必须使用计算机可以使用的语言编写。现在有数百种编程语言,对于人们来说,开发它们是编程过程更容易。但是,所有的程序都必须转换成计算机可以执行的指令。
机器语言
计算机的原生语言因计算机类型的不同而有差异,计算机的原生语言就是机器语言(machinelanguage),即一套内嵌的原子指令集。因为这些指令都是以二进制代码的形式存在,所以,为了以机器原生语言的形式给计算机指令,必须以二进制代码输入指令。例如,为进行两个数的相加,可能必须写成如下的二进制形式:
101101810818010181010181118
汇编语言
用机器语言进行程序设计是非常单调乏味的过程,而且,所编写的程序也非常难以读懂和修改。为此,在计算机的早期就创建了汇编语言,作为机器语言的替代品。汇编语言(assembly language)使用短的描述性单词(称为助记符)来表示每一条机器语言指令。例如助记符add一般表示数字相加,sub表示数字相减。将数字2和数字3相加得到结果,可以编写如下汇编代码:
add2,3,result
汇编语言的出现降低了程序设计的难度。然而,由于计算机不理解汇编语言,所以需要使用一种称为汇编器的程序将汇编语言程序转为机器代码。
使用汇编语言编写代码比使用机器语言容易。然而,用汇编语言编写代码依然很不方便。汇编语言中的每一条指令对应机器代码中的一条指令。用汇编语言写代码需要知道CPU是如何工作的。汇编语言被认为是低级语言,因为汇编语言本质上非常接近机器语言,并且是机器相关的。
高级语言
20世纪50年代,新一代编程语言即众所周知的高级语言出现了。它们是平台独立的,这意味着可以使用高级语言编程,然后在各种不同类型的机器上运行。高级语言很像英语,易于学习和使用。高级语言中的指令称为语句。例如,下面是计算半径为5的圆面积的高级语言语句:
area = 5 * 5* 3.1415926;
有许多高级编程语言,每种都为特定目的而设计。
用高级语言编写的程序称为源程序(source program)或源代码(source code)。由于计算机不能运行源程序,源程序必须被翻译成可执行的机器代码。翻译可以由另外一种称为解释器或者编译器的编程工具来完成.
-
解释器:从源代码中读取一条语句,将其翻译为机器代码或者虚拟机器代码,然后立刻运行。
-
编译器:将整个源代码翻译为机器代码文件,然后执行该机器代码文件。
对于高级编程语言又分为了两大类:
-
静态编译型(C、C++、Java)
-
静态:变量有严格的数据类型之分(数据直接存在变量空间中的)
-
编译型:先将源代码全部进行编译,生成一个二进制文件,最后运行该二进制文件即可。翻译一本中文书。
-
-
动态解释型(Python、JS、Go)
-
动态:变量没有严格的数据类型之分(数据存在堆内存中,然而变量空间中存储的是数据在堆内存中的地址!)
-
解释型:读取一行源代码,进行编译,生成一段二进制代码(可以存在于内存 存在于硬盘),在运行,以此类推。同声传译。
-
1.4软件与软件开发
软件的定义,是指一系列按照特定顺序组织的计算机数据与指令的集合。
软件的分类:
-
·操作系统软件:操作系统主要任务是控制和监视系统的活动、分配和调配系统资源和调度系统。为用户提供最基本的计算机功能。
-
·应用软件:处理特殊领域问题的软件。扩展了计算机的功能,为用户提供更加丰富的计算机操作方式。
软件开发,是指一系列的流程,并不单单虫编写代码,主要有一下几个流程:
-
需求分析
-
系统分析
-
编码
-
测试
-
上线运营
-
后期运营
-
下线
1.5Java语言介绍
Java是一种功能强大和多用途的编程语言,面用于开发运行在移动设备、台式计算机以及服务端的软件。
Java是由James Gosling在Sun公司领导的小组开发的(2010年Sun公司被Oracle收购)。Java最初被称为Oak (橡树),是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Web应用程序。
现今,Java广泛用于开发服务端的应用程序。这些应用程序处理数据、执行计算,并生成动态网页。许多商用网站后端都是采用Java进行开发的。
技术架构
Java语言分为三种技术架构:
-
JavaEnterprise Edition,JavaEE企业版:可帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。JavaEE是在Java SE的基础上构建的,它提供web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web 2.0应用程序。
-
Java Standard Edition,Java SE标准版:它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序,能为Java EE提供开发基础。比如Java版的扫雷。
-
Java MicroEdition,Java ME微型版:用来开发移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)。现在使用的越少用了,Android会逐渐的取代J2ME的市场份额。
跨平台
跨平台就是说同一个软件可以在不同的操作系统上执行,而不需要对软件做任务处理。即通过Java语言编写的应用程序在不同的系统平台上都可以运行。
Java应用程序为什么可以跨平台呢?其实只要在需要运行Java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
因为有了JVM,所以同一个Java程序在三个不同的操作系统中都可以执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。
Java程序之所以能够实现跨平台运行,是因为它根本就不直接运行在任何底层平台上,而是需要在哪里运行,就在哪里(如windows平台)事先准备好自己的Java平台,而这只是仅仅是安装和配置一个软件而已!
Java虚拟机(Java Virtual Machine,JVM)︰它是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java最具吸引力的特性之一,JVM读取并处理编译过的与平台无关的字节码(class)文件。
1.6Java开发环境搭建
JRE与JDK
JRE (Java Runtime Environment Java运行环境)︰包括Java虚拟机和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDk (Java Development Kit Java开发工具包)︰JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE,所以安装了JDK,就不用在单独安装JRE了。
简单而言:使用JDK开发完成的java程序,交给JRE去运行。
为什么JDK中包含一个JRE呢?
-
其一,开发完的程序,总需要运行一下看看效果。
-
其二,也是最重要的,JDK中的开发工具其实都是Java语言编写的应用程序,为了方便使用才打包成exe文件,如果没有JRE,那么这些工具是运行不了的。
-
JDK下载安装
登录Oracle官网(先去注册账号)https:/ /www.oracle.com
vsCode编辑器安装
-
2展开下载列表,按需下载,建议Stable稳定版
-
path(路径)环境变量配置
需要设置的内容:
-
文件编码 左下角管理-设置-文本编辑器-文件-Encoding-UTF-8
-
字体大小 左下角管理-设置-文本编辑器-字体-FontFamliy字体样式-Consolas-FontSize字体大小
-
主题颜色 左下角管理-颜色主题
-
中文设置 左下角管理-扩展-搜索Chinese
-
计算机图标右键属性
-
高级系统设置
-
环境变量
-
系统变量找path
在配置环境变量过程中发现, path环境变量中还有很多其他与系统相关的配置,若JDK目录更改了,这时就要再次修改path置的值,很容易造成误操作
为了不因为jdk的目录或者目录名称的改变,而不断更改path的值,而导致对path变量值的误操作,可以通过以下技巧完成:
-
新创建一个环境变量JAVA_HOME记录住jdk的目录。
-
在path中通过%%动态的获取JAVA_HOME的值即可。
-
JAVA_HOME=C:\mysoft\Java\jdk1.7.0_21
-
path=%JAVA_HOME%\ bin;%path%
-
%path%:动态获取path环境变量的值。
-
%JAVA_HOME%:动态获取名称为JAVA_HOME环境变量的值
classpath配置
既然class文件(字节码文件)是java的运行文件,可不可以实现,在任意目录下都可以执行某一目录下的class文件呢?
根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中
例: set classpath=c :\
classpath变量值是java类文件的目录
path变量是windows程序文件的目录
JVM查找类文件的顺序
-
如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件。
-
如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件。
-
值的结尾处如果加上分号,那么jvm在类路径目录下没有找到要指定的类文件,会在当前目录下在查找一次。
-
值的结尾出如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目录下有,也不会运行。
-
建议:配置classpath环境变量时,值的结尾处不要加分号,如果需要访问当前目录可以用"."
注意:
-
Java语言拼写上严格区分大小写
-
一个Java源文件里可以定义多个Java类,但其中最多只能有一个类被定义成public类
-
若源文件中包括了public类,源文件必须和该public类同名
-
一个源文件中包含N个Java类时,编译后会生成N份字节码文件,即每个类都会生成一份单独的class文件,且字节码文件名和其对应的类名相同
检查版本号
JDK的目录:
-
bin目录:binary 二进制-可执行程序 都是Java在Windows平台上的开发工具
-
javac:编译工具
-
java:运行工具
-
-
include目录:存放的都是C语言的头文件 JVM需要将字节码的内容转换为本地平台的具体执行指令,用于转换字节码指令的。
-
src.zip压缩文件包:Java的源代码-核心类库
C:\Users\HENG>cd / C:\>cd "Program Files" C:\Program Files>cd Java C:\Program Files\Java>cd jdk1.8.0_77 C:\Program Files\Java\jdk1.8.0_77>cd bin C:\Program Files\Java\jdk1.8.0_77\bin> C:\Program Files\Java\jdk1.8.0_77\bin>javac 用法: javac <options> <source files> //javac 源代码文件xxx.java C:\Program Files\Java\jdk1.8.0_77\bin>java 用法: java [-options] class [args...] //java 字节码文件xxx [参数列表] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件)
1.7运行Java程序
步骤一:编写
选择记事本或编辑器,敲入代码:
public class Demo{
}
将文件保存成Demo. java,这个文件是存放Java代码的文件,称为源文件,扩展名必须是.java
步骤二:编译
有了Java源文件,将其编译成JVM可以识别的文件。在该源文件目录下,通过javac. exe 编译工具对Demo . java 文件进行编译。如果程序没有错误,没有任何提示,但在当前目录下会出现一个Demo.class文件,该文件称为字节码文件,也是可以执行的Java的程序。
步骤三:运行
有了可执行的Java程序( Demo.class字节码文件)通过运行工具 java.exe对字节码文件进行执行。出现提示:缺少一个名称为main的方法。因为一个程序的执行需要一个起始点或者入口,所以在Demo类中的加入
public static void main(String[ ] args) {}
对修改后的 Demo . java源文件需要重新编译,生成新的class文件后,在进行执行。发现没有编译失败,但也没有任何效果,因为并没有告诉JVM要帮我们做什么事情,也就是没有可以具体执行的语句。想要和JVM来个互动,只要在main方法中加入一句
system.out.printin( he1io java );
因为程序进行改动,所以再重新编译,运行即可。
完整的程序如下:
public class Demo{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
第二章基本数据与运算
2.1关键字
关键字是被Java语言赋予了特定含义的一些字符,关键字中所有字母都为小写。好比汉字中的专有名词,例如:中国、北京、上海等。一般我们不能将这些词用在其他地方,改变其含义。
2.2标识符
标志符就是由一些字符、符号组合起来的名称,用于给类,方法,变量等起名字的规矩。
标识符必须遵守以下规则:
-
标识符是由字母、数字、下划线–和美元符$构成的字符序列
-
标识符必须以字母、下划线–或美元符$开头,不能以数字开头
-
标识符不能是关键字
-
标识符不能是Java内置关键字数据( this , true , false , null , super等)。
-
标识符不能是API里面的已知类的名称
-
标识符可以为任意长度,但必须是一个连续的字符序列
-
标识符严格区分大小写
标识符是用于命名程序中的变量、方法、类和其他项。具有描述性的标识符可提高程序的可读性。避免采用缩写作为标识符,使用完整的词汇会更具有描述性。然而,为了简明,我们也会偶尔在一些代码片段中采用诸如i、j、k、x和y之类的变量名。这样的命名在代码片段中也是有一定普遍性的做法。
不要用字符命名标识符。习惯上,字符只用在机器自动产生的源代码中。
标识符命名规范:
-
小驼峰命名法:方法、变量 约定1:标识符是一个单词的时候,首字母小写 范例1:name 约定2:标识符由多个单词组成的时候,第一个单词首字母小写,其它单词首字母大写 范例2:firstName
-
大驼峰命名法:类 约定1:标识符是一个单词的时候,首字母大写 范例1:Student 约定2:标识符由多个单词组成的时候,每个单词的首字母大写 范例2:GoodStudent
-
常量规范:所有单词大写,单词之间用下划线―分隔
-
包名规范:所有单词小写,单词之间用点﹒分隔
2.3注释
------写注释是一个利人利己的好习惯
注释用于解释说明程序的文字就是注释。有利于提高了代码的阅读性。
注释分类:
-
单行注释 // :
//后到本行结束的所有字符会被编译器忽略;
-
多行注释 /* */
/* */之间的所有字符会被编译器忽略;
-
文档注释 /** */
/** */之间的所有字符会被编译器忽略,java特有的(用于生成文档)
注意:多行和文档注释都不能嵌套使用
对于单行和多行注释,被注释的文字,不会被JVM解释执行。对于文档注释,是Java特有的注释,其中注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文
查看class文件的步骤
xyc\xyc\out\production\xyc1\com\xyc
直接拖过来
快捷键
Ctrl + / 单行注释(对当前行进行注释)
Ctrl + Shift + / 对选中的代码进行多行注释