一、计算机基础知识
- 二进制
- 计算机内部全部采用二进制数表示,只包含0、1两个数,逢二进一。每个0或1叫做一个 bit (比特)。
- 进制之间的转换
- 十进制转换成二进制数据:使用除以2获取余数的方式。
- 进制之间的转换
-
-
-
- 二进制转换成十进制数据:使用8421编码方式。
-
-
- 字节
- 字节是计算机中最小的存储单元,计算机储存任何数据,都是以字节的形式储存。
- 8个 bit 表示为1个字节,写成1 byte 或1 B。
- 1 B = 1024 bit
- 1 KB = 1024 B
- 1 MB = 1024 KB
- 1 GB = 1024 MB
- 1 TB = 1024 GB
- 常用 DOS 命令
- 进入 DOS 操作窗口
- 按下 WIN + R 键,打开运行窗口,输入 cmd 回车,进入 DOS 操作窗口。
- 常用命令
- 进入 DOS 操作窗口
二、Java 语言开发环境搭建
- Java 虚拟机——JVM
- JVM (Java Virtul Machine) :Java 虚拟机,简称 JVM ,是运行所有 Java 程序的假想计算机,是 Java 程序的运行环境,是 Java 最具吸引力的特性之一。我们编写的 Java 代码,都运行在 JVM 之上。
- 跨平台:
- JRE 和 JDK
- JRE (Java Runtime Environment) :是 Java 程序的运行时环境,包含 JVM 和运行时所需要的核心类库。
- JDK (Java Development Kit):是 Java 程序开发工具包,包含 JRE 和开发人员使用的工具。
- 关系图
- JDK 9 安装
- 安装路径不要包含中文和空格。
- 公共JRE可以不装。
- 配置环境变量
- 计算机——属性——高级系统设置——高级——环境变量
- JAVA_HOME:JDK 9的安装目录
- 配置path:%JAVA_HOME%\bin;
- 计算机——属性——高级系统设置——高级——环境变量
三、HelloWorld 入门程序
- 开发步骤
- 三步:编写、编译、运行。
- 编写
- 使用 notepad++ 软件编写
- notepad++ 初始化设置(两处)
- 使用 notepad++ 软件编写
-
- 编写
-
-
- 注意事项
- 文件名必须是 HelloWorld ,保证文件名和类名一致。
- 注意事项
- 编译
-
在 DOS 命令行中,进入 Java 源文件的目录,使用 javac 命令进行编译。
- 命令:javac Java源文件名.后缀名
-
- 运行
- 在 DOS 命令行中,进入 Java 源文件的目录,使用 java 命令进行运行。
- 命令:java 类文件名
- 在 DOS 命令行中,进入 Java 源文件的目录,使用 java 命令进行运行。
-
四、常量
- 概述
- 常量是指在 Java 程序中固定不变的数据。
- 分类
五、变量和数据类型
- 概述
- 在程序中可以变化的量成为变量。
- Java 中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。
- 在程序中可以变化的量成为变量。
- 数据类型
- 分类
- 基本数据类型:整数、浮点数、字符、布尔
- 引用数据类型:字符串、数组、类、接口、Lambda
- 注意事项
- 字符串是引用数据类型
- 浮点型可能只是一个近似值,并非精确的值。
- 数据范围与字节数不一定相关,例如 float 取值范围比 long 大,但 float 是4个字节,而 long 是8个字节。
- 浮点数中默认类型是 double。如果一定要使用 float 类型,需要加上后缀 F 。
- 整数默认是 int 类型,如果一定要使用 long 类型,需要加上后缀 L 。
- 基本数据类型
- 四类八种
- Java 中的默认数据类型:整数类型是int,浮点类型是double。
- 分类
- 变量的定义
- 格式:数据类型 变量名 = 数据值;
- long 类型:建议数据后加 L 表示。
- float 类型:建议数据后加 F 表示。
- 注意事项
- 变量名称:在同一个大括号范围内,变量的名字不可以相同。
- 变量赋值:定义的变量,不赋值不能使用。
- 对于 float 和 long 类型,字母后缀 F 和 L 不要丢掉。
- 如果使用 byte 和 short 类型的变量,右侧的数据值不能操作左侧类型的范围。
- 变量使用不能超过作用域的范围。
- 作用域:从定义变量的一行开始,一直到所属的大括号结束为止。
- 格式:数据类型 变量名 = 数据值;
六、数据类型转换
- 概述
- Java 程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
- 自动转换
- 将取值范围小的类型自动提升为取值范围大的类型。
- 转换规则
- 范围小的类型向范围大的类型提升,byte 、short、char 运算时直接提升为 int
- 转换规则
- 将取值范围小的类型自动提升为取值范围大的类型。
- 强制转换
- 将取值范围大的类型强制转换成取值范围小的类型。
- 格式
- 范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据
- 格式
- 将取值范围大的类型强制转换成取值范围小的类型。
- 注意事项
- 强制类型转换可能会发生精度损失,数据溢出。
- 精度损失:浮点数转成整数,直接取消小数点。
- 数据溢出:满了。
- byte / short / char 这三种类型都可以发生数学运算(ASCII编码表)。
- byte / short / char 这三种类型在运算的时候,会先自动提升为 int 类型,然后再计算。
- boolean 类型不能发生数据类型转换。
- 强制类型转换可能会发生精度损失,数据溢出。
- ASCII码表
- 概念:将人类的文字和一个十进制的数字对应起来组成的一张表。
- 字符 数值
- 0 48
- ‘A’ 65
- 'a' 97
- 概念:将人类的文字和一个十进制的数字对应起来组成的一张表。
七、运算符
- 算数运算符
-
- 四则运算中 “+” 的三种常见用法
- 对于数值来说,就是加法
- 对于字符 char 来说,在计算之前,char 会提升为 int ,然后在计算。
- 对付字符串 String 来说,加号代表字符串的连接。
- 任何数据类型和字符串进行连接的时候,结果都会是字符串。
- 自增运算符:++
- 自减运算符:--
- 含义:让一个变量涨一个数字1,或者减一个数字1。
- 使用格式:写在变量名之前(前 ++),或者写在变量名之后(后 ++)。
- 使用方式
- 单独使用:不和其他任何操作混合,自己独立成一个步骤。
- 混合使用:和其他操作混合,例如与赋值混合、与打印操作混合等。
- 使用区别
- 在单独使用时,前 ++ 和后 ++ 没有任何区别。
- 在混合的时候,有【重大区别】
- 如果是【前 ++】,那么变量【立刻马上+1】,然后拿着结果进行使用。【先加后用】
- 如果是【后 ++】,那么首先使用变量本来的数值,【然后再让比那辆+1】。【先用后加】
- 注意事项
- 只有变量才能使用自增、自减运算符,常量不可发生改变,所以不能用。
- 四则运算中 “+” 的三种常见用法
- 赋值运算符
-
- 注意事项
- 只有变量才能使用赋值运算符,常量不能使用。
- 复合赋值运算符隐含了一个强制类型转换。
- 注意事项
- 比较运算符
-
- 运算结果都是布尔值。
- 逻辑运算符
-
- “&&” 和 “||” ,具有短路效果:如果根据左边已经可以判断得到最终结果,那么右边的代码将不再运行,从而提高性能。
- 注意事项
- 逻辑运算符只能用于布尔值。
- 与、或需要左右各自有一个布尔值,但是入返只要有唯一的一个布尔值即可。
- 与、或两种运算符,如果有多个条件,可以连续写。
- 两个条件:条件 A && 条件 B
- 多个条件:条件 A && 条件 B && 条件 C ...
- 三元运算符
- 格式
- 数据类型 变量名称 = 条件判断 ? 表达式 A : 表达式 B ;
- 首先判断条件是否成立:
- 如果成立,将表达式 A 的值赋值给左边的变量。
- 不成立,将表达式 B 的值赋值给左边的变量。
- 注意事项
- 必须同时保证表达式 A 和表达式 B 的值都符合左侧数据类型的要求。
- 三元运算符的结果必须被使用。
- 格式
八、方法入门
- 概述
- 将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能,需要时再去调用。
- 定义格式
- 修饰符 返回值类型 方法名(参数列表){
- 代码...
- return;
- }
- 修饰符 返回值类型 方法名(参数列表){
- 注意事项
- 方法定义的先后顺序无所谓。
- 方法的定义不能产生嵌套包含关系。
- 方法定义好了之后,不会执行的。如果要想执行,一定要进行方法的【调用】。
九、流程控制
- 判断语句
- if
-
- if...else
-
- if...else if...else
- 选择语句
- switch 语句格式
-
- switch语句中,表达式的数据类型,可以是 byte,short,int,char,enum(枚举),JDK7 后可以接收字符串。
- case的穿透性
- 在switch语句中,如果 case 的后面不写 break ,将出现穿透现象,也就是不会在判断下一个 case 的值,直接向后运行,直到遇到 break,或者整体 switch 结束。
- 循环语句
- for 循环语句格式
-
- while 循环语句格式
-
- do...while循环格式
-
- 三种循环的区别
- 如果条件判断从来没有满足过,那么 for 循环和 while 循环将会执行0次,但是 do-while 循环会执行至少一次。
- for 循环的变量在小括号当中定义,只有循环内部才可以使用。while 循环和 do-while 循环初始化语句本来就在外面,所以出来循环之后还可以继续使用。
- break 关键字的两种常见用法
- 可以用在switch语句当中,一旦执行,整个switch语句立刻结束。
- 可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。
- continue
- 一旦执行,立刻跳过当前次循环剩余内容,马上开始下一次循环。
- 嵌套循环
- 格式
- 三种循环的区别
-
-
- 举例:打印时分秒。
-
十、方法复习
- 方法定义的完整格式
修饰符 返回值类型 方法名称(参数类型 参数名称, ...) {
方法体
return 返回值;
}
-
- 修饰符:现阶段的固定写法,public static
- 返回值类型:也就是方法最终产生的数据结果是什么类型
- 方法名称:方法的名字,规则和变量一样,小驼峰
- 参数类型:进入方法的数据是什么类型
- 参数名称:进入方法的数据对应的变量名称
- PS:
- return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处。
- PS:
- 方法调用的三种格式
- 单独调用:方法名称(参数);
- 打印调用:System.out.println(方法名称(参数));
- 赋值调用:数据类型 变量名称 = 方法名称(参数);
- PS
- 返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或者赋值调用。
- PS
- 方法注意事项
- 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
- 方法定义的前后顺序无所谓。
- 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
- 如果方法有返回值,那么必须写上“ return 返回值;”,不能没有。
- return后面的返回值数据,必须和方法的返回值类型,对应起来。
- 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
- 对于void方法当中最后一行的return可以省略不写。
- 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。
- 方法重载(Overload)
- 概述
- 多个方法的名称一样,但是参数列表不一样。
- 方法重载与下列因素相关
- 参数个数不同
- 参数类型不同
- 参数的多类型顺序不同
- 方法重载与下列因素无关
- 与参数的名称无关
- 与方法的返回值类型无关
- 在调用输出语句的时候,println 方法其实就是进行了多种数据类型的重载形式。
- 概述
十一、数组
- 概念
- 是一种容器,可以同时存放多个数据值。
- 特点
- 数组是一种引用数据类型。
- 数组当中的多个数据,类型必须统一。
- 数组的长度在程序运行期间不可改变。
- 数组的初始化
- 在内存当中创建一个数组,并且向其中赋予一些默认值。
- 两种常见的初始化方式
- 动态初始化(指定长度)
- 静态初始化(指定内容)
- 初始化格式
- 动态初始化:在创建数组的时候,直接指定数组当中的数据元素个数。
- 数据类型 [] 数组名称 = new 数据类型 [数组长度];
- 初始化默认值
- 整数类型,那么默认为 0;
- 浮点类型,那么默认为 0.0;
- 字符类型,那么默认为 '\u0000';
- 布尔类型,那么默认为 false;
- 引用类型,那么默认为 null 。
- 静态初始化:在创建数组的时候,直接指定数组当中的数据元素个数。
- 数据类型 [] 数组名称 = new 数据类型 [] { 元素1 , 元素2 , ... };
- 省略格式
- 数据类型 [] 数组名称 = { 元素1 , 元素2 , ... } ;
- 省略格式
- 初始化默认值
- 静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
- 数据类型 [] 数组名称 = new 数据类型 [] { 元素1 , 元素2 , ... };
- 动态初始化:在创建数组的时候,直接指定数组当中的数据元素个数。
-
- 注意事项
- 静态初始化没有直接指定长度,但是仍然会自动推算得到长度。
- 静态初始化标准格式可以拆分成为两个步骤。
- 动态初始化也可以拆分成为两个步骤。
- 静态初始化一旦使用省略格式,就不能拆分成为两个步骤了。
- 使用建议
- 如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
- 注意事项
- 数组的访问
- 索引:每一个存储到数组的元素,都会自动的拥有一个编号,从 0 开始,这个自动编号称为数组索引 ( index ),可以通过数组的索引访问到数组中的元素。
- 数组名称[索引值]
- 索引值从 0 开始。
- 数组名称[索引值]
- 数组的长度属性
- 数组名.length
- 索引:每一个存储到数组的元素,都会自动的拥有一个编号,从 0 开始,这个自动编号称为数组索引 ( index ),可以通过数组的索引访问到数组中的元素。
- 数组的遍历
- 通过for循环
十二、Java基础语法完结