javaSE

Author Avatar
kevin
发表:2019-02-12 23:02:00
修改:2024-10-13 20:22:10

基础程序设计总结,不管学什么编程语言都会遇到的基础知识

基础路线总结图

javaseNote-2024-10-13-20-19-38.jpg

关键字(KeyWord)

关键字中所有字母都是小写

标识符

凡是可以自己起名字的地方都叫标识符

  • 26个字母和下划线和$组成
  • 数字不可以开头
  • 不可以使用关键字和保留字
  • java区分大小写,不限制长度

命名规范

  • 类名,接口名:

    • 每一个单词首字母都大写(大驼峰式)
  • 变量名,方法名

    • 第一个单词小写,第二个单词开始首字母大写(小驼峰式)
  • 包名全小写

  • 常量名所有字母大写

数据类型

变量

  1. 在代码的运行过程中,值会发生改变的数据,叫变量

  2. 变量是程序中最基本的存储单元: 变量类型.变量名 ,存储的值

注意:

  1. 变量必须先声明,后使用
  2. 变量定义在作用域内,大括号里{}

数据类型分类

  1. 基本数据类型 八种
    • 数值型
      • 整数类型
        • byte
          • 占一个字节
          • 范围是 -128 ~ 127
        • short
          • 占两个字节
          • 范围: -2^15 ~ 2^15-1
        • int
          • 占四个字节
          • 范围: -2^31 ~ 2^31-1 大概是21亿
        • long
          • 占八个字节
          • 范围: -2^63 ~ 2^63-1
          • 必须以 L结尾
      • 浮点类型
        • float
          • 占四个字节
          • 范围: 可以精确到七位有效数字,满足不了精度需求
          • 必须以 F结尾
        • double
          • 占八个字节
          • 双精度
      • 字符型
        • char
          • 两个字节
          • 只能写一个字符
          • 定义的时候使用单引号 ' '
          • 可以放转义字符
          • 直接使用Unicode值表示字符
      • 布尔型
        • boolean
          • 一个字节
          • true
          • false
          • 通常在条件判断,循环结构中使用
    • 引用数据类型
        • 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]);
        }

}


评论