1. Java编程基础
1.1. 基本概念
- 什么是软件
软件是一系列按照特定顺序组织的计算机数据和指令的集合。程序设计的最终结果是软件。
系统软件: 系统软件为计算机使用提供最基本的功能.
例如: DOS, Windows, Linux, Unix, Mac OS, Android, iOS
应用软件: 系统软件并不针对某一特定应用领域。而应用软件则相反,不同的应用软件根据用户和所服务的领域提供不同的功能。
例如: Word, Excel, PPT, QQ, FeiQ, 凌波, UltraEdit, Eclipse
- 什么是计算机语言
计算机语言指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。
为了使电子计算机进行各种工作,就需要有一套用于编写计算机程序的数字、字符和语法规划,由这些组成计算机指令就是计算机语言。
软件就是由若干条计算机语言所组成的。
- 计算机语言分类
机器语言:
机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。
汇编语言:
汇编语言是使用一些特殊的符号来代替机器语言的二进制码,计算机不能直接识别,需要用一种软件将汇编语言翻译成机器语言。
高级语言:
使用普通英语进行编写源代码,通过编译器将源代码翻译成计算机直接识别的机器语言,之后再由计算机执行。
1.2. Java开发环境搭建
- Java平台分类
JavaSE(Java Platform Standard Edition)
Java平台标准版,包含那些构成Java语言核心的类,可以理解为学习Java的基础
JavaEE(Java Platform Enterprise Edition)
Java平台企业版,包含JavaSE,并且还包含用于开发企业级应用的类
准确的说JavaEE是一套用于企业开发的技术规范,包含很多组件,13种核心技术,如:XML、JSP、Servlet、JDBC、Java Mail等
JavaME(Java Platform Micro Edition)
Java平台微型版,包含JavaSE的一部分,另外提供一些用于小型设备上的类,例如:手机、机顶盒、汽车导航仪
- JDK与JRE
JDK(Java Development Kit)
Java开发工具,包含开发Java程序的所有组件,包含JRE
JRE(Java Runtime Environment)
Java运行环境,如果要运行Java程序,就需要JRE的支持
常用组件:
src.zip Java是一门开源的语言,其源代码都在这个压缩包中
rt.jar Java的基础核心类库,我们编写Java程序时使用的class都在这个jar包中
javac.exe 编译器,将.java源代码编译为.class文件
java.exe 虚拟机,运行Java程序的工具
jar.exe 将class文件打成jar包的工具
javadoc.exe 生成帮助文档的工具
- 环境变量
环境变量是指在操作系统中用来指定操作系统运行环境的一些参数
path:
如果想在任意目录下运行一个程序,我们就需要将程序所在的路径配置在path环境变量中。
通常我们会将javac.exe所在目录配置到path中,因为我们需要在任意目录下都能编译Java源文件。
配置完成之后可以在命令行输入javac测试,如果显式帮助信息则是配置成功。
classpath:
Java虚拟机运行时加载类的路径。JDK5之后不配置默认为当前目录“.”。如使用JDK1.4或以下版本时需要人工配置。
暂时不需要配置,默认加载当前目录下的所有class文件。
配置方式:
a. 命令行
点击屏幕左下角开始 – 运行 – 输入cmd – 在命令行中直接输入命令进行修改
查看变量值:set 变量名
设置变量值:set 变量名=变量值,多个值之间使用分号“;”分割,引用变量时使用“%变量名%”形式
注意:此种方式仅适用于当前窗口
b. 我的电脑
鼠标右键点击我的电脑 – 属性 – 高级 – 环境变量
找到要修改的变量将其值修改,此种方式永久有效
注意:
配置环境变量之后可以查看编译器(javac.exe)和虚拟机(java.exe)版本,虚拟机版本不能低于编译器。
使用哪个版本的编译器和虚拟机取决于path环境变量,如果虚拟机版本过低,可以通过环境变量来修改。
编译器版本查看方式:javac –version
虚拟机版本查看方式:java –version
1.3. 第一个Java程序
- 编写源代码
新建文本文档,扩展名改为.java,在文件中写入代码。
注意:
windows操作系统默认是隐藏已知文件扩展名的。
请测试新建一个文本文档,如果看到的文件名是“新建 文本文档”而不是“新建 文本文档.txt”,那么说明你的扩展名被隐藏了。
请选择菜单栏中的 工具 – 文件夹选项 – 查看 – 下拉滚动条找到“隐藏已知文件扩展名” – 取消掉这一项。
- 编译字节码文件
a. 左键单机屏幕左下角开始 – 运行 – 输入cmd启动命令行窗口
b. 使用DOS命令进入源代码所在目录
c. 使用编译器(javac.exe)编译源代码,javac 文件名.java,编译后在该目录中会出现扩展名为class的字节码文件
常用DOS命令:
跳转到指定盘符: 盘符: 例:C: D: E:
跳转到指定目录: cd 目录 例:cd Itcast\day01 cd Tencent\QQ\Bin
显示当前目录下文件: dir
跳转到上级目录: cd…
跳转到根目录: cd\
清屏: cls
- 运行程序
使用虚拟机(java.exe)运行class文件,java 文件名,注意不要加扩展名,因为虚拟机只能运行class文件,扩展名省略不写,如写则报错。
1.5. 进制
- 十进制
由0到9的数字组成,逢十进一
我们最常用的一种进制
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
- 二进制
由0和1组成,逢二进一
计算机中存储任何数据都是以二进制的形式进行存储的
0 1 10 11 100 101 110 111 1000
- 八进制
由0到7的数字组成,逢八进一
八进制在程序中以0开头
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
- 十六进制
由0到9的数字和A-F的字母组成,逢十六进一
十六进制在程序中以0x开头
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
- 进制转换
a. 十进制转二、八、十六进制
除法取余,将要转换的数除以进制数,记住余数,再除以进制数,记住余数,直到这个数等于0为止,将所有余数反转就是对应的二进制表现形式。
b.二、八、十六进制转十进制
乘法,将要转换的数编号,编号从低位开始,从0开始,将每一位上的数乘以进制数的编号次方,最后将所有乘得的结果相加就是十进制表现形式。
c.二进制和八进制互转
八进制的每一位对应二进制的三位。
d. 二进制和十六进制互转
十六进制的每一位对应二进制的四位。
- 二进制负数
一个负数的二进制表现形式就是这个负数忽略符号的正数对应的二进制取反再加一。
计算机中存储的二进制数最高位是0则是正数,是1则是负数。
1.6. 码表
ASCII:英文码表,每个字符占1个字节。A是65,a是97,0是48
GB2312:兼容ASCII,包含中文,每个英文占1个字节(正数),中文占2个字节(2个负数)。
GBK、GB18030:兼容GB2312,包含更多中文,每个英文占1个字节(正数),中文占2个字节(第一个负数、第二个可正可负)。
Unicode:国际码表,每个字符占2个字节。Java中存储字符类型就是使用的Unicode编码。
UTF-8:国际码表,英文占1个字节,中文占3个字节。
2. Java语法
2.1. 基本格式
所有Java代码都应该在一个class中。
Java是严格区分大小写的。
Java是一种自由格式的语言。Java代码分为结构定义语句和功能执行语句,功能执行语句最后必须以分号结束。
2.2. 注释
单行注释和多行注释是在程序用来标记一些特殊的文本,这些文本不参与编译运行。
单行注释: // 注释内容
多行注释: /* 注释内容 */
文档注释是Java中特有的一种注释,它可以通过JDK中的工具(javadoc.exe)解析,生成帮助文档。
文档注释: /** 注释内容 */
2.3. 标识符
- 什么是标识符
标识符可以理解为程序中我们自定义的一些名字,包括:包名、类名、函数名、变量名、常量名。
- 标识符的命名规则
由大小写字母、数字、下划线(_)和美元符号($)组成,开头不能是数字。不能使用关键字。推荐使用全英文。
- 标识符通用规范
类名、接口名:
所有单词首字母大写,驼峰式命名,例如:XxxYyyZzz
变量名、函数名:
第一个单词首字母小写,其他单词首字母大写,驼峰式命名,例如:xxxYyyZzz
常量名:
所有字母都大写,单词之间用下划线分割,例如:XXX_YYY_ZZZ
包名:
全部小写,例如:xxx.yyy.zzz
2.4. 关键字
注:java 无sizeof ,goto, const 关键字,但不能用goto const作为变量名
2.5. 常量
- 整型
整数,4个字节。
- 长整型
整数,8个字节。以L结尾。
- 单精度浮点数
小数,4个字节。以F结尾。
- 双精度浮点数
小数,8个字节。
- 布尔
只有两个值,真(true)或假(false),1个字节。
- 字符
单个字符,2个字节。例如:‘a’, ‘中’, ‘5’, ‘\u0026’ , ‘\u0027’
在字符常量中,斜杠(\)是一个特殊的字符,它的作用是用来转义后面一个字符,这些字符通常是不可见的或者有特殊意义的。
‘\r’ 回车,回到一行的开始
‘\n’ 换行,换到下一行
‘\t’ 制表符,键盘上的Tab
‘\b’ 类似退格,键盘上的Backspace
以上字符都不可见,无法直接表示,所以用斜杠加上另外一个字符来表示。
‘’’ 单引号,Java代码中单引号表示字符的开始和结束,如果直接写程序会认为前两个是一对,报错。
‘"’ 双引号,Java代码中双引号表示字符串的开始和结尾,如果要写一个包含双引号的字符串那么这个双引号也需要转义。
‘\’ 斜杠,Java代码中的斜杠是转义字符,用来和后面一个字符配合使用,在真正需要用斜杠的时候那么就要用另一个斜杠来转义。
以上字符都有特殊意义,无法直接表示,所以用斜杠加上另外一个字符来表示。
- 字符串
由若干个字符组成的一串。可以是一个字符、多个字符、或者一个都没有。字符串没有固定大小。
- 空
null,只有这一个值,用来表示一个引用为空。
2.6. 变量
int x = 5;
System.out.println(x);
x = 1 + 1;
System.out.println(x);
x = x + 1;
System.out.println(x);
上面的x就是一个变量,变量没有固定的值,是在内存中开辟的一片空间。
Java中的变量中只能存储同一种类型的值。
变量在被取值之前必须初始化(第一次给变量赋值)。
- 变量分类
a.基本数据类型: 8种
整数:
byte 1个字节,最小值:-128,最大值:127
short 2个字节,最小值:-32768,最大值:32767
int 4个字节,最小值:-2147483648,最大值:2147483647
long 8个字节,最小值:- 9223372036854775808,最大值:9223372036854775807
浮点数:
float 4个字节,最小值:1.4E-45,最大值:3.4028235E38
double 8个字节,最小值:4.9E-324,最大值:1.7976931348623157E308
字符:
char 2个字节,最小值:0,最大值:65535
布尔:
boolean 1个字节,true或false
b.引用数据类型:
类、接口、数组都是引用数据类型,除了8种基本数据类型,其他所有类型都是引用数据类型。
- 类型转化
a. 自动类型转换
在byte、short、char参与运算的时候会自动提升为int,相当于将一个占空间较小的值放入了一个较大的空间。
b. 强制类型转换
可以将一个占空间较大的值使用(类型)的形式强制放入一个较小的空间,有可能损失精度。
c. 字符串转换
任何值和字符串相加都会得到字符串。
- 变量的作用域与生命周期
作用域:变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
生命周期:变量的生命周期从定义时开始,超出作用域后结束。变量生命周期以外不能使用。
2.7. 函数
- 函数的定义
函数就是一段有名字的代码,可以完成某一特定功能。
如果有一段代码要使用多次,我们可以给它起个名字,每次使用时通过名字调用,这样就不用每次都写一大段代码了。
如果某个函数在执行的时候需要调用者传入数据,那么可以定义参数列表,用于接收数据。
如果函数运行之后需要返回给调用者数据,那么需要指定返回值类型,并且用关键字return返回。
定义函数的3个必要条件:函数名、参数列表、返回值类型。如果不需要参数也要写小括号,如果没有返回值类型要写void。
- 名词解释
形参:在定义函数时小括号中的参数,用来接收数据的参数。
实参:在调用函数时真正传入的参数,传递给函数的数据。
参数类型:函数的参数的类型,一旦定义传入时必须匹配。
返回值:函数运行结束后返回的值,使用return关键字返回。
返回值类型:函数运行结束后返回的值的类型,在类型非void情况下必须返回,而且必须类型匹配。
- 函数的重载
多个函数的函数名相同,参数列表不同(个数、顺序、类型),这就是函数的重载。在调用函数的时候通过传入的实参找到匹配的函数调用。
函数的重载和返回值类型无关。
2.8. 运算符
- 算数运算符
加号:在操作数字、字符、字符串时是不同的,两个字符相加得到的是码表值,两个字符串相加是将字符串连接在一起。
除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)。
取模:模数的符号忽略不计,结果的正负取决于被模数。
自增:符号在前就是先运算后取值,符号在后则是先取值后运算。
习题:
a.System.out.println(3500 / 1000 * 1000);
- 赋值运算符
等于:可以多个连用,例如:x = y = z = 5;
加等于:x += 5; 相当于 x = x + 5;
面试题:
以下代码正确的是? (多选)
a. byte b = 1 + 1;
b. byte b = 1; b = b + 1;
c. byte b = 1; b += 1;
d. byte b = 1; b =