第二章数据和表达式(暑假啃书提升计划)

数据和表达式

一. 基本语法元素

1.空白 注释以及语句

  • 使用适当的空白和缩进,可以增加程序的易读性
  • 语句是Java程序的最小执行单位,大括号包含的可以称为语句块,可以嵌套。
  • 编译器会自动忽略注释
    • // 在一行里的注释
      • 一般对变量,一行程序的作用简短说明
    • / 一行或多行的注释 /
      • 说明方法的功能,设计逻辑以及基本思想等
    • */ * * 文档注释 /
    • 公有类或者公有方法会使用

2. 关键字

  • 关键字又称为保留字,不可以当作普通的标识符使用

3. 标识符

  • 标识符可用作变量名,方法名,接口名,类名

  • 由字母,数字,下划线,$组成的字符串

  • 数字不能作为开头,区分大小写,长度无限制

  • Java源代码使用的是Unicode码

4. Java编程风格

  • 类和接口名:见名知意,首字母小写,其余各单词首字母大写,不要使用下划线
  • 常量名:全部大写,单词与单词之间用下划线分开
  • 变量名:可以使用驼峰命名,不要使用下划线。

二. 基本数据类型

基本数据类型整数类型byte short int long
浮点数类型float double
字符类型char
布尔类型boolean
复合数据类型类类型class
数组
接口类型interface
  • Java不允许数值类型和布尔类型之间进行转换

  • 浮点数类型有两种

    • 单精度浮点数:float 浮点数长度32位

    • 双精度浮点数:double 长度64位

三. 表达式

1.操作数

  • 表达式由运算符和操作数组成,对操作数进行运算符指定的操作,得出运算结果。
  • 只有简单数据类型和String类型才有相应的常量形式
  • 变量是存储数据的基本单元,用作表达式中的操作数
  • 方法中声明的叫做局部(自动/临时/栈)变量
    • 在使用之前必须赋值,否则无法过编译
    • 作用域是该变量的声明处到结束处
  • 类中定义的就是成员变量
    • 可以手动的进行初始化,也可以由系统自动进行初始化
    • 作用域是整个类
  • 变量在声明后,系统自动在内存中分配引用空间,要通过new创建对象实例,才分配相应的存储空间
  • 如果使用具有null值的引用,会导致编译错误。不指向任何对象
  • 当成员变量和局部变量,引用名冲突时,会就近原则

2.运算符

  • 其他运算符

    • 实例运算符 instanceceof

    • new 运算符以及数组下标运算符

    • 扩展赋值运算符

    • 条件运算符 ?:

      • 三元运算符一般形式是:逻辑表达式? 语句1:语句2
      • 逻辑表达式得到一个逻辑值,如果为真,则执行语句1
      • 语句1和语句2 需要返回相同类型的值,并不能是void
  • 位运算符:按位取反~ 按位与& 按位或| 异或^ 右移>> 左移<< 无符号右移>>>

    • 只能对整数型和字符型数据进行操作
  • 逻辑运算符: &&与 ||或 !非

    • && 和 || 提供短路功能

      • 进行运算时,先计算左侧表达式的值,如果能满足则跳过右侧的计算

      • 下面的例子中,unset是空串,无法满足第二个条件,但他第一个子表达式结果为假,导致整个表达式为假,从而跳过了第二个子表达式的运算,避免了空指针。

      • public static void main(String[] args) {
            String unset = null;
            if ((unset != null) && (unset.length()>5)){
                System.out.println(unset);
            }
        }
        
  • 关系运算符:> >= < <= == !=

    • 运算的结果是一个逻辑值,也就是true或者false
    • == 和 !=可以用于任何数据类型
  • 算数运算符:+ — * 除/ 取模%

    • Java取模还可以用于浮点数 15.2 % 5 = 0.2
    • 用于负数 5 % 3 = 0.2
    • ++ 和 --,分别称为 加1 和 减1
      • ++i 和 i++ 的执行顺序时不一样
      • ++i 在i使用之前先加1,i++相反

3.表达式的提升和转换

  • 强制类型转换

    • 当位数多的与位数少的转换时,需要在程序中指明
    • 转换时,目标类型用括号括起来放到要修改的表达式前面。
  • 自动类型转换

    • 位数少的转换为位数多的类型,保证转换时不丢失有用信息

      • 可以看出 intValue中数的位数超出了float的有效位数,但是没有超出double的,所以在转换为float时,损失了精度。

      • longtValue 中的位数既超出了float ,又超出了 double,所以精度都有损失。

      • 示例:

        public class Test {
        
            public static void main(String[] args) {
                int intValue = 1234567892;
                long longValue = 12345678921345678L;
                float floatValue= intValue;
                double doubleValue = intValue;
                System.out.println("整型变量:"+intValue);
                System.out.println("浮点型变量:"+floatValue);
                System.out.println("双精度变量:"+doubleValue);
        
                System.out.println("========================================");
        
                floatValue = longValue;
                doubleValue = longValue;
                System.out.println("长整型变量:"+longValue);
                System.out.println("浮点型变量:"+floatValue);
                System.out.println("双精度变量:"+doubleValue);
        
            }
        
        }
        
        控制台:
            
        整型变量:1234567892
        浮点型变量:1.23456794E9
        双精度变量:1.234567892E9
        ========================================
        长整型变量:12345678921345678
        浮点型变量:1.23456784E16
        双精度变量:1.2345678921345678E16
        
        
    • 能够自动进行类型转换的类型:按序

      • byte short char int long float double

      • 转换规则

      • 由于浮点数的范围远远大于整数型,所以int long向float double是可以进行自动转换的,但是可能会损失精度。

      • 操作数之一类型操作数之二类型转换后的类型
        byte或shortintint
        byte或short或intlonglong
        byte或short或int或longfloatfloat
        byte或short或int或long或floatdoubledouble
        charintint
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值