丁劲宸的个人博客 Memento Mori.

JAVA学习笔记(二)

2020-12-15


第二章:JAVA基本语法

关键字与保留字

 关键字的定义和特点:

  • 定义:被Java语言赋予了特殊含义,用作专门用途的字符串
  • 特点:关键字中的所有字母都为小写。

 Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用。

标识符

  • Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
  • 凡是自己可以起名字的地方都叫标识符
  • 定义合法标识符的规则:
    • 由26个字母大小写,0-9,_或$组成
    • 不可以用数字开头
    • 不可以使用关键字与保留字,但可以包含
    • Java中严格区分大小写,长度无限制
    • 标识符不能包含空格
  • Java中的名称命名规范:
    • 包名:多单词组成时所有字母都小写:xxxyyyzzz
    • 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
    • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz(驼峰命名法)
    • 常量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ

变量

  • 变量的概念:
    • 内存中的一个存储区域
    • 该区域有自己的名称(变量名)和类型(数据类型)
    • Java中每个变量必须先声明,后使用
    • 该区域的数据可以在同一类型范围内不断变化
  • 使用变量注意:
    • 变量的作用域,在一对{}之间有效
    • 初始化值
  • 定义变量的格式:数据类型 变量名 = 初始化值
  • 变量是通过变量名来访问这块区域的
  • 变量的分类

      java_study_2_1.png

    • Java的整型常量默认为int型,声明long类型时,值的后面需要加上字母lLlong L = 3L;
    • Java的浮点型常量默认为double型,声明float类型时,值的后面需要加上字母fF
    • Boolean类型只允许取值true和false,无null,且不可以用0或非0的整数来替代false和true
    • 引用类型:String类
      • 值null可以赋值给任何引用类型(类、接口、数组)的变量,用以表示这个引用类型变量中保存的地址为空
      • String类属于引用类型,可以用null赋值
      • String类是一个典型的不可变类,String对象创建出来就不可能被改变。创建出的字符串将存放在数据区,保证每个字符串常量只有一个,不会产生多个副本。
        String s0 = "hello";  
        String s1 = "hello";
        String s2 = "hel"+"leo";
        // 此时,s0、s1、s2均指向“hello"的存放地址,而不会产生多个“hello”
        
    类型 占用存储空间 表数范围   类型 占用存储空间 表数范围
    byte 1字节=8bit -128 ~ 127   short 2字节 -215 ~ 215-1
    int 4字节 -231 ~ 231-1   long 8字节 -263 ~ 263-1
    单精度float 4字节 -2128 ~ 2128
    7位有效数字
      双精度double 8字节 -21024 ~ 21024
    16位有效数字


  • 基本数据类型转换
    • 自动类型转换:容量小的类型自动转换为容量大的数据类型
    • 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
    • byte、short、char之间不会相互转换,他们三者在计算时首先转换为int类型
    • 当把任何基本类型的值和字符串值进行连接运算时(+),基本类型的值将自动转化为字符串类型,String str0 = 1+2+"a"+3+4;的打印结果为3a34

运算符

  • 算术运算符:+-*/%++--
  • 赋值运算符:=
    • =两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
    • 支持连续赋值i0 = i1 = i2 = 1;
    • 扩展赋值运算符:+=-=*=/=%=,字符串仅支持+=
      short s = 2;
      s = s + 3;  //会报错,更改为 s = (short)(s+3) 后可以运行
      s += 3;     //会自动把结果强制转换为当前变量的类型
      
  • 比较运算符:==!=<><=>=
  • 逻辑运算符:&|!&&||^
    • &&(短路与):使用&时,左边无论真假,右边始终参与运算,而使用&&时,若左边为假,则右边不参与运算
    • ||(短路或):使用|时,左边无论真假,右边始终参与运算,而使用||时,若左边为真,则右边不参与运算
    • 在不需要逻辑运算两边都参与运算时,尽量使用&&||
a b a&b a|b !a a^b a&&b a||b
true true true true false false true true
true false false true false true false true
false true false true true true false true
false false false false true false false false

  • 位运算符:直接对二进制进行运算
    • 无符号右移时,左侧补0,而正常的负数右移时左侧应该补1
      -32>>2=-8,-32>>>2=1073741816
    • 正数二进制 → 反码 → 加1(补码) → 负数二进制
运算符 运算 范例
<< 左移 3<<2=123*2*2=12 , m<<n -> m*2^n
>> 右移 3>>1=13/2=1 , m>>n -> m*2^-n
>>> 无符号右移 3>>>1=13/2=1
& 与运算 6 & 3 = 20110 & 0011 = 0010
| 或运算 6 | 3 = 70110 | 0011 = 0111
^ 异或运算 6 ^ 3 = 50110 ^ 0011 = 0101
~ 反码 ~6 = -7~0110 = 1001

  • 三元(目)运算符:(条件表达式)? 表达式1 : 表达式2

数组

  • 一维数组:type var[];或者type[] var;
    • 动态初始化:int[] arr = new int[3];arr[0]=0;arr[1]=1;arr[2]=2;
    • 静态初始化:int[] arr = {0,1,2};int a[] = new int[] {0,1,2};
    • arr.length得到数组的长度
    • 使用动态初始化时,数组元素会有默认值,数字类型为0,对象类型为null
  • 多维数组:
    • 动态初始化:int[][] arr = new int[3][2];int[][] arr = new int[3][];,再分别初始化arr[0]array[1]array[2]
    • 静态初始化:int[][] arr = new int[][]{ {1,2},{3,4,5} };
    • 注意,int[] x,y[];中,x为一维数组,y为二维数组

程序流程控制

  • 顺序结构:程序从上到下逐行地执行,中间没有任何判断和跳转
  • 分支结构:根据条件,选择性地执行某段代码
    • if-else语句的三种格式
      if(条件表达式){
          执行代码块;
      }
      


      if(条件表达式){
          执行代码块;
      }
      else{
          执行代码块;
      }
      


      if(条件表达式){
          执行代码块;
      }
      else if(条件表达式){
          执行代码块;
      }
      ······
      else{
          执行代码块;
      }
      
    • switch语句:变量仅支持byteshortcharintString和枚举
          switch(变量){
              case 常量1:{
                  语句1;
                  break;
              }
              case 常量2:{
                  语句2;
                  break;
              }
              ······
              default:{
                  语句;
                  break;
              }
          }
      
  • 循环结构:根据循环条件,重复性的执行某段代码
    • 循环语句的四个组成部分
      1. 初始化部分:init_statement
      2. 循环条件部分:test_exp
      3. 循环体部分:body_statement
      4. 迭代部分:alter_statement
    • 循环语句的分类
      1. for循环
             for(int i=0 ; i<10 ; i++)
             {
                 System.out.println(i);
             }
        
      2. while循环
             while(i<100){
                 resulr += i;
                 i++;
             }
        
      3. do-while循环
             do{
                 resulr += i;
                 i++;
             }while(i<100);
        
    • 嵌套循环时,尽量保证外层循环次数小于内层循环次数
  • 特殊流程控制语句:breakcontinuereturn

Similar Posts

Comments