javaSE
基础程序设计总结,不管学什么编程语言都会遇到的基础知识
基础路线总结图
关键字(KeyWord)
关键字中所有字母都是小写
标识符
凡是可以自己起名字的地方都叫标识符
- 26个字母和下划线和$组成
- 数字不可以开头
- 不可以使用关键字和保留字
- java区分大小写,不限制长度
命名规范
-
类名,接口名:
- 每一个单词首字母都大写(大驼峰式)
-
变量名,方法名
- 第一个单词小写,第二个单词开始首字母大写(小驼峰式)
-
包名全小写
-
常量名所有字母大写
数据类型
变量
-
在代码的运行过程中,值会发生改变的数据,叫变量
-
变量是程序中最基本的存储单元: 变量类型.变量名 ,存储的值
注意:
- 变量必须先声明,后使用
- 变量定义在作用域内,大括号里{}
数据类型分类
- 基本数据类型 八种
- 数值型
- 整数类型
- byte
- 占一个字节
- 范围是 -128 ~ 127
- short
- 占两个字节
- 范围: -2^15 ~ 2^15-1
- int
- 占四个字节
- 范围: -2^31 ~ 2^31-1 大概是21亿
- long
- 占八个字节
- 范围: -2^63 ~ 2^63-1
- 必须以 L结尾
- byte
- 浮点类型
- float
- 占四个字节
- 范围: 可以精确到七位有效数字,满足不了精度需求
- 必须以 F结尾
- double
- 占八个字节
- 双精度
- float
- 字符型
- char
- 两个字节
- 只能写一个字符
- 定义的时候使用单引号 ' '
- 可以放转义字符
- 直接使用Unicode值表示字符
- char
- 布尔型
- boolean
- 一个字节
- true
- false
- 通常在条件判断,循环结构中使用
- boolean
- 整数类型
- 引用数据类型
- 类
- class
- 接口
- interface
- 数组
- []
- 类
- 数值型
所有变量
- 成员变量
- 实例变量 普通变量属性
- 类变量 (静态) static修饰
- 局部变量
- 形参 方法,构造器定义的变量
- 方法局部变量 在方法内定义
- 代码块局部变量 代码块定义
- 相同点
- 都有生命周期
- 不同点
- 局部变量除了形参外,需要初始化
- 静态变量有初始值
数据类型转换
不包含boolean
- 自动类型提升
- 范围小的数据类型和大的数据类型做运算,结果自动提升为容量大的范围
- byte,char,short做运算都会提升为int类型,包括同等类型之间
- byte,char,short -> int -> long ->float ->double
- 强制类型转换(自动类型提升逆运算)
- 使用强转符 (强转类型)
- boolean不可以强转
字符串类型String
- 使用双引号定义 " "
- 加号,连接操作
运算符
运算符分类
-
算术运算符
- +(加法)
- -(减法)
- *(乘法)
- /(除法)
- %(模->取余)
- 经常用来判断能否被除尽
- ++
- 只能和变量一起使用 i++ ++i
- 符号在前在后都是先运算,再使用运算后的值
- 符号在前: 先运算,然后再使用运算后的值
- 符号在后: 先用原来的值,使用完毕自身再计算
-
赋值运算符
- = 支持连续赋值
- int a,b;a=b=10; 同一个值
- int a=10,a = 20; 不同的值,逗号隔开
- +=
- -=
- *=
- /= : 如果是两个整数,取整数部分,如果有一个为小数,结果就带小数点
- %= : 取余数
- byte short 如果是复合赋值运算,不需要手动强转(jvm自动转了)
- = 支持连续赋值
-
比较运算符
- == :判断符号前后的数据是否相等,如果相等返回true,否则返回false
- >: 判断符号前面的是否比符号后面的大,如果大,返回true,否则返回false
- <: 判断符号前面的是否比符号后面的小,如果小,返回true,否则返回false
- >=:判断符号前面的是否大于或者等于符号后面的,如果大于或者等于返回true,否则返回false
- <=:判断符号前面的是否小于或者等于符号后面的,如果小于或者等于返回true,否则返回false
- !=:判断符号前后的数据是否不等,如果不等返回true,否则返回false
- instanceof
-
逻辑运算符
- &&(与):有假则假 符号前后有一个结果为false,结果就是false
- ||(或):有真则真 符号前后有一个结果为true,结果就是true
- ^(异或):符号前后结果相同为false,结果不同为true
- false^false false
- true^true false
- false^true true
- true^false true
- !(非):非true就是false 非false就是true
-
三元运算符
- boolean表达式 ? 表达式1 : 表达式2
- 先走boolean表达式,如果是true,走?后面的表达式1,否则走:后面的表达式2
- 如果程序可以使用三元又可以使用if-else,优先三元运算符,简洁高效
- 表达式1和表达式2类型要统一
- true ? 1 : 2.0 返回1.0 类型自动提升
流程控制
流程控制分类
-
顺序结构
- 程序重上到下,顺序执行,中间没有任何判断和跳转
-
分支结构
-
根据条件,选择执行某段代码
-
if-else
- 第一种格式-----------------
- if(boolean表达式){
- 执行语句
- }
- 如果boolean表达式为true,执行if后面的执行语句,如果是false,就不执行
- 第二种格式-------------
- if(boolean表达式){
- 执行语句1
- }else{
- 执行语句2
- }
- 先走if后面的boolean表达式,如果是true,就走if后面的执行语句1
- 否则就走else后面的执行语句2
- 第三种格式--------------
- if(boolean表达式){
- 执行语句1
- }else if(boolean表达式){
- 执行语句2
- }else if(boolean表达式){
- 执行语句3
- }...else{
- 执行语句n
- }
- 执行流程:
- 走if后面的boolean表达式,如果是true,就走if的执行语句1
- 否则,走下面的else if,继续判断,如果是true,就走else if对应的执行语句2
- 否则,继续往下走else if判断
- 如果上面所有的判断都没有成立,就走else对应的执行语句n
- 第一种格式-----------------
-
switch-case 括号变量技巧,自动类型提升前几个
-
switch(变量){
-
case 目标值1:
-
执行语句1;
-
break;
-
case 目标值2:
-
执行语句2;
-
break;
-
case 目标值3:
-
执行语句3;
-
break;
-
...
-
default:
-
执行语句n;
-
break;
-
}
-
匹配上哪个case对应的目标值,就执行哪个case对应的执行语句
-
break:代表的是结束switch语句
-
可以填入的类型
-
byte short int char 枚举类型(jdk5是新增),String类型(jdk7新增)
-
不能填入long ,boolean
-
case的穿透性,可以做累加操作(比如月份累加)
-
switch中没有break时,case会一直往下穿透执行,直到遇到了break或者switch代码结束了
-
可选结构
-
break,default
-
-
-
-
循环结构
- 根据循环条件,重复性的执行某段代码
- while
- 初始化变量 循环条件必须是boolean类型
- while(比较){
- 循环语句
- 步进表达式
- }
- 执行流程:
- 初始化变量
- 比较,如果是true,执行循环语句,步进表达式
- 再比较,如果还是true,继续循环,步进表达式
- 再比较,直到比较为false,循环结束了
- do-while
- for
- for(初始化变量;比较;步进表达式){
- 循环语句
- }
- 执行流程:
- 初始化变量 可以省略
- 比较,如果是true,进入循环体,执行循环语句 可以省略
- 走步进表达式(初始化的这个变量的值发生改变) 可以省略
- 继续比较,如果还是true,继续走循环语句,走步进表达式
- 再比较,直到比较为false,循环结束
- 中间的循环条件必须是boolean类型 如果省略则是死循环
- 三个都可以省略,但是分号不能省略
- jdk1.5提供了foreach循环,便利集合,数组
数组(Array)
一维数组要掌握
-
多个相同类型数据按一定顺序排列的集合,并命名通过编号方式对这些数据统一进行管理
-
数组名
-
元素
-
角标,下标,索引
- 从0开始,到数组的长度-1结束
-
数组长度(length)
- 数组名.length 获得数组的长度
-
数组默认初始化值
- 整型数组: 0
- 浮点型数组: 0.0
- char类型: 0或 '\u0000'
- boolean : false
- 引用数据类型: null
-
特点
- 数组的元素可以是基本数据类型,还可以是引用数据类型
- 定长(数组定义的时候规定多长,后续不能改变)
- 数组是有序排列的
- 数组本身是引用类型变量
- 创建数组对象会在内存中开辟一整块连续存储的空间
-
定义
-
动态初始化:
-
数据类型[] 数组名 = new 数据类型[数组的长度]
-
数据类型:规定数组中能存什么类型的数据
-
[]:代表的是数组,一维数组
-
数组名:见名知意
-
new:代表的是将数组创建出来
-
数据类型:要和等号前面的数据类型保持一致
-
[数组的长度]:数组的最大容量,规定数组最多能存多少个数据
-
-
静态初始化
- 数组的初始化和数组元素的赋值同时进行
- 数据类型[] 数组名 = {元素1,元素2,元素3...}
-
区别:
- 动态初始化:创建的时候只给了长度,但是没有往里面存我们想要存的元素
- 数组的初始化和数组元素的赋值分开进行
- String[] arrs = new String[6];
- 静态初始化:创建的时候就直接往里存了我们想要存的元素,根据存的元素个数可以推算出来数组的长度
- 使用哪个:
- 动态初始化:当我们定义的时候只知道元素的类型和个数,但是不知道要存什么元素
- 静态初始化:当我们定义的时候已经知道了存什么元素了,就可以用静态初始化了
- 动态初始化:创建的时候只给了长度,但是没有往里面存我们想要存的元素
-
二维数组
- 一维数组元素引用另一个数组地址
- 数组长度
- arrs.length 获取的是一维数组元素长度
- arrs[0].length 获取的是索引0元素的二维数组长度
初始值
int[][] arr = new int[4][5]
外层元素初始值: 二维元素的内存地址
内层元素的初始值: 和一维一样
int[][] arr = new int[4][]
外层元素初始值为null
内层元素初始值:不能调用,因为二维没有赋值
动态初始化:
数据类型[][] 数组名 = new 数据类型[m][n];
m:代表的是二维数组的长度(二维数组中最多能有多少个一维数组)
n:代表的是每一个一维数组的长度
int[][] arr2 = new int[3][]; //代表每一个一维数组没有真正创建出来 所以每一个一维数组都是null
静态初始化:
数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}}
便利二维数组
for(int i =0 ; i< arr.length ; i++){ //先循环一维元素
for(int j = 0; j< arr[i].length; j++){ //在循环二维元素
System.out.println(arr[i][j]);
}
}