数据和表达式
一. 基本语法元素
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或short int int byte或short或int long long byte或short或int或long float float byte或short或int或long或float double double char int int
-
-