04-变量+运算符+流程控制语句

 

一、常量和变量

1、标识符可以由字母、数字、下划线(_)、美元符号($)组成,不能以数字开头,不能是Java关键字和保留字。

2、命名尽量简短,且能清楚的表达其作用,做到见名知意

3、Java中有三种注释类型:

     (1)单行注释

     (2)多行注释

     (3)文档注释(Java特有,通过javadoc.exe命令从文档注释中提取内容,生成程序的 API 帮助文档 -- javadoc  -d  doc  xxx.java)

     单行注释中可以嵌套 单行注释/多行注释,多行注释中可以嵌套单行注释,但不可以嵌套多行注释

     注释不会被编译到字节码文件(.class)中去,所以加了注释之后字节码文件不会变大

     PS:使用文档注释时还可以使用 javadoc 标记生成更详细的文档信息:

             @author 标明开发该类模块的作者

             @version 标明该类模块的版本

             @see 参考转向,也就是相关主题

             @param 对方法中某参数的说明

             @return 对方法返回值的说明

             @exception 对方法可能抛出的异常进行说明

4、常量:声明常量必须使用 final 关键字,常量名所有字母都大写,用下划线连接。常量的值不能是默认初始值,且常量值被设定后,在程序运行过程中不允许改变。

     常量的分类:整数常量(有四种表现形式:二/八/十/十六进制)、小数常量、布尔常量(只有true和false两个值,通常用于判断)、字符常量(将一个数字、字母或符号用单引号标识,字符中所能表示的数字只有0--9)、字符串常量(将一个或多个字符用双引号标识)、null常量(只有null一个数值)

5、1 byte(字节) = 8 bit(比特位/二进制位)

     字节(byte)是数据的最小单元。无论数据大或小,都至少用一个字节表示。一个中文在内存中用2个字节存放

6、变量:变量的三要素:变量类型、变量名、变量值。变量名的长度没有限制,但区分大小写。

     Java中变量的使用规则:

     (1)变量必须先声明,后使用 -- 必须先初始化才能使用

     (2)变量可以声明时初始化,也可以使用时赋值;

     (3)变量每次只能赋一个值,但可以多次修改;

     (4)变量必须有自己的作用范围

7、数据类型

     基本数据类型

             数值型

                     整数类型(byte、short、int、long):1、2、4、8

                     浮点类型(float、double):4、8

             字符型(char):2字节

             布尔型(boolean)

    引用数据类型

             类(class)

             接口(interface)

             数组( [ ] )

注意:

     (1)整数默认为int类型,小数默认为double类型。所以,为long型变量赋值时在数值后添加字母L,为float型变量赋值时在数值后添加字母f。为char型变量赋值时使用单引号(')引起来

     (2)在 Java 的领域里,基本数据类型变量存的是数据本身,而引用数据类型变量存的是保存数据的空间地址

8、null

    null:空类型,不会应用在基本数据类型

    引用数据类型只能指向实体,或者什么都不指向--为空null

    null可以取消引用型变量的指向(引用型变量不做任何实际指向时,可将其置为null)

9、类型转换:一般情况下,运算的两端是同类型或者都是数值类型(数值类型可以做自动类型提升)才可以,因为类型不一致,存储空间也不一致。

     强制类型转换可能会造成数据的丢失/精度丢失,因为强制转换不是四舍五入,而是直接将小数位截断

     char类型也可以进行运算,字符在ASCII表中有对应的数字     'a'+1 --> 98

     boolean类型不可以做运算,也不可以进行类型转换

eg: byte b = 4;

         byte b1 = 3;

         byte b2 = 7;

         b = b1 + b2;    //编译时报错,因为b1、b2是变量,其值会变

         //若上述三个变量都是int类型,则不会报错。因为int是默认类型。处理为:舍弃高位

10、运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元运算符。实际开发中,一般会使用小括号辅助进行运算符的优先级顺序管理。

     算术运算符

     (1)两个整数做运算,结果还是整数。如果涉及到负数运算时,符号只参考被运算的数

     (2)取模运算的用处:任何数%2其结果不是0就是1--开关算法的定义

     (3)加号(+):加法运算、连接符(任何数据,只要和字符串进行相加,都是相连接,拼成一个更大的字符串)

     (4)自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量

     (5)b = a ++;    a自增的先增和后增是有区别的,后增要先预存a的原值,运算完(a自增)之后再将原值赋给b(最后才将右边赋值给左边)

     赋值运算符

     (1)+=、-=、*=、/=、%=:将左右两边运算的结果赋给左边

     (2)short s = 3;

              s = s +4;    //编译报错,可能损失精度。不做自动转换,需要强转

              s += 4;      //在内存中是: s = (short)(s+4),有自动强转动作(多使用此种方式)

     (3)a *= b + 6;    //a = a * (b + 6)

     比较运算符

     (1)比较运算符运算完一定有结果,且结果只有两种:true、false

     (2)> 、 < 、 >= 、 <=只支持左右两边操作数是数值类型== 、 !=两边的操作数既可以是数值类型,也可以是引用类型(比地址)。且 == 和 != 比其他关系运算符的优先级低

     (3)比较运算表达式不能连接,eg:2 < x < 5 错误

     (4)double a = 1.0;

              double b = 0.1 + 0.1 + ... + 0.1;    //10个0.1相加

              a == b;    //false.    因为 a=1.0,  b=0.99...9 (16个9)

             比较a和b是否相等: Math.abs(a - b) < 1e-6    //1e-6:1 * 10的-6次方 = 0.000001

     逻辑运算符

     (1)逻辑运算符用于连接两个boolean类型的表达式,优先级:! > && > ||

     (2)一般情况下,连接boolean型表达式,&& 和 || 使用较多(左边可以确定结果时右边不再参与运算),& 和 | 不仅可以连接boolean型(无论左边的运算结果是什么,右边都参与运算),还可以做移位运算

     (3)异或(^)运算:两边相同结果为false,两边不同结果为true

     位运算符

     (1)<< 、 >> 、 >>> (无符号右移) 、 & 、 | 、 ^ 、 ~

     (2)左移几位就是乘以2的几次方。在进行除2次幂运算时,用 >> 保证符号位

     (3)移位运算不会改变操作数本身,只是得到了一个新的运算结果,而原来的操作数本身是不会改变的

     (4)&的特点:取某个二进制数中的某一段,用 1 & 数( 1 的特点:凡是有效位全保留)

     (5)一个数异或(^)同一个数两次,结果还是这个数 -- 加密、解密

     三元运算符

     条件表达式 ? 表达式1 : 表达式2;

11、流程控制语句

     判断结构(if语句)

     (1)三元运算符必须得有运算结果,if...else...可以有结果,也可以没有结果。所以,当if...else...运算后有一个具体的结果时,可以简写成三元运算符

     (2)多重 if 语句的最后一个else可以省略,且每一个if条件中都增加了else隐含条件(对前面条件取反)。所以,使用多重 if 语句时,要先处理包含范围更小的情况

     (3)多条件对应相同内容时,应将多条件进行合并 -- 提高代码的复用性

     (4)多重 if 语句:if...else if...else...整个是一条语句,只运行一个代码块(程序的单一出口原则)

     (5)直接定义在主函数中的未命名的代码块叫局部代码块,局部代码块可以定义局部变量的生命周期 -- 可以节省内存空间

     (6)if 和 switch 的区别之 if:a.对具体的值进行判断; b.对区间进行判断; c.对运算结果是 boolean 类型的表达式进行判断

     (7)if 和 while 的区别:if 对条件只判断一次,而 while 可以对条件进行多次判断

     选择结构(switch)

     (1)switch(表达式) 一执行,各个case都已加载进内存,所以,各case的备选答案是无序的。先读第一个case,依次往下,哪个case的值匹配,才读里面的具体内容,直到遇到break或大括号结束。无论default放在哪里,有效答案都不匹配时,最后才读default中的内容。default 可以出现在任意位置,也可以省略

     说明:case匹配后,读该case中的内容。后面如果没有break或大括号结束,则继续读下一个case中的内容(不读下一个case判断),直到遇到break或大括号结束  -- 只要有一个case匹配,就不再读后面的case了(程序的单一出口原则)

     (2)switch(表达式) 可选择的数据是有限的,表达式的值必须是整型或字符型,可选的值有:byte、short、int、char、String、枚举

     (3)case 后面的值可以是常量数值,也可以是一个常量表达式,但不能是变量或带有变量的表达式

     (4)可以把功能相同的 case 语句合并起来

     (5)if 和 switch 的区别之 switch:a.对具体的值进行判断; b.值的个数通常是固定的; c.功能性较差,书写麻烦易出错

     (6)对于几个固定值的判断,建议使用switch语句。因为switch语句会将具体的答案一次性加载进内存,效率相对较高

     循环结构(while、do...while、for)
     (1)Java 常用的 3 种循环: while 、do...while、for

     (2)while特点:先判断,后执行,do...while特点: 先执行,后判断(do...while语句保证循环至少被执行一次)

     (3)if 和 while 的区别:if 对条件只判断一次,而 while 可以对条件进行多次判断

     (4)for 循环(有固定次数):

执行过程:

        a. 执行循环变量初始化部分,设置循环的初始状态,此部分在整个循环中只执行一次

        b. 进行循环条件的判断,如果条件为 true ,则执行循环体内代码;如果为 false ,则直接退出循环

        c. 执行循环变量变化部分,改变循环变量的值(控制循环次数),以便进行下一次条件判断

        d. 依次重新执行 b、c 步骤,直到退出循环
注意:
        a. for 关键字后面括号中的三个表达式必须用 “;” 隔开,三个表达式都可以省略,但 “;” 不能省略

              省略 “循环变量初始化”,可以在 for 语句之前由赋值语句进行变量初始化操作

              省略 “循环条件”,循环可能会一直执行下去(死循环),要避免

              省略 “循环变量变化”,可以在循环体中进行循环变量的变化

        b. "循环变量初始化" 和 "循环变量变化" 部分,可以使用 “,” 同时初始化或改变多个循环变量的值    

              eg: for (int i=1, j=5; i<=5 && j>=1; i++, j--){ ... }

        c. ”循环条件“ 部分结果为 true 或 false,可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级。其他表达式只要合法即可

        d. for 和while 可以互换

            如果需要通过变量来对循环进行控制,且该变量只作为循环增量存在时,用 for 更节约空间。

            如果要通过一个循环操作变量,该变量操作完之后还需要进一步的运算,此时要使用while。如果使用for,建议在for之前额外定义一个变量来保存循环变量的值,责任明确

        e. 循环通常情况下,需要定义条件,需要控制次数

        f. 用到while循环,就要考虑到不满足while循环条件的情况可用return结束函数

     其他流程控制语句(break、continue)

     break:

        a. 作用:跳出当前循环,执行循环后的代码。也可跳出指定循环,用法:在需要跳出的循环前指定 标号+冒号(:),使用时,break 标号; 即可

        b. 作用范围:switch语句 或 循环(loop)语句内使用    (无限循环用break停止)

        c. 当 break 语句单独存在时,下面不要定义其他语句,因为执行不到

     continue:

        a. 结束本次循环,继续下次循环。也可以结束指定循环,继续下次循环。用法:在需要结束的循环前指定 标号+冒号(:),使用时,continue 标号; 即可

        b. 作用范围:循环(loop)语句内使用

        c. 当 continue 语句单独存在时,下面不要定义其他语句,因为执行不到

     多重循环:

        循环体中包含循环语句的结构称为多重循环,最常见的就是二重循环:外层循环控制打印的行数,内层循环控制每行打印的个数

12、foreach

     foreach是for语句的特殊简化版本,在遍历数组、集合时,foreach更简单便捷

     语法: for(元素类型  元素变量 : 遍历对象) {

                     //执行的代码

                }

     如果想在foreach语句中获取数组元素的下标,在外部定义一个变量,在foreach循环中自增,但不建议使用这种做法

13、while或for循环,可将其定义成死循环,然后在循环内部通过continue和break控制循环结束

        while (true) {
            //......此处省略部分代码
            if (true) {
                continue;
            }
            //......此处省略部分代码
            break;
        }

        for (int i = 0; ; i++) {
            //......此处省略部分代码
            if (true) {
                break;
            }
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值