# 变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如 Haskell)中,变量可能是不可变的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在 Java 和 Visual Basic 中);但另外一些语言可能使用其它概念(如 C 的对象)来指称这种抽象,而不严格地定义 “变量” 的准确外延。—— 百度百科

# 标识符的命名规则

  1. 标识符只能由数字、字母、下划线、$ 这四种字符组成。

  2. 标识符的首字符不能是数字。

  3. 标识符区分大小写的。如:变量 a 或变量 A 代表两个不同的变量。

  4. 标识符不能是系统的保留字,如:public void int ... 都不能作为变量名。

    例如: test、$abc01、_name5 等

# 标识符的命名规范

  1. 一般对变量、方法都是用驼峰式命名法(首单词的首字母小写,以后每个单词首字母大写)如:studentId、studentName
  2. 对类名、接口名一般使用 pascal(帕斯卡命名法),每个单词的首字母均大写。
  3. 标识符一般尽量做到望文生义。如: name、age、addr、sex、id 等。

# 变量的声明及赋值

public static void main(String[] args) {
        int a;         // 声明一个变量
        a = 8;         // 给一个变量赋值
        int A = 11;    // 声明一个变量并同时赋值
    }

# 基本数据类型

# 整数类型(byte short int long)

byte: 字节类型,占一个字节,8 位 ,范围:-128 到 127
short: 短整型,占两个字节,范围:-32768 到 32767
int: 整型,占四个字节,范围:-2147483648 到 2147483647?
long: 长整型,占 8 个字节,范围:-9223372036854775808 到 9223372036854775807

# 浮点类型(float double)

float: 单精度度浮点型,占 4 个字节,保留小数点后 7 位
double: 双精度浮点型,占 8 个字节,保留小数点后 15 位
注意: 声明 float 类型时候需要写成 float f = 2.3456f ,因为 java 中小数默认是 double 类型。

# 字符类型(char)

一个字符型对应 ASCII 码的值,因此字符类型可以进行计算和比较大小。

  • ①小写字母 'a' 到 'z' 对应于 97-122
  • ②大写字母 'A' 到 'Z' 对应于 65-90
  • ③字符 '0' 到 '9' 对应于 48-57
char ch = 'a';
System.out.println("ch = " + ch);
char ch1 = (char)(ch - 32);        // 将字符 'a' 转化为 'A'
System.out.println("ch1 = " + ch1);

# 布尔类型(boolean)

布尔类型只能是 true 或者 false

# 运算符

# 算术运算符(单目运算符与双目运算符)

  1. 双目运算符: 就是需要有两个运算数参与的运算符,如:+ - * / %
  2. 单目运算符: 就是只需要有一个运算数就可进行运算的运算符,如:++ - -
    ①在单独使用时,无论是前加还是后加,前减还是后减,最后结果都是其自加 1 或者自减 1。
    ②与表达式一起使用时候,前表示先自加 1 再进行表达式运算,后表示参与运算后再进行自加 1,前后 "- -" 用法与 ++ 相同。
    例如:
int a = 10;
int c ;
c = a++;      //a 的值先赋给 c,然后进行自加 1,所以此时 c = 10,a = 11
c = ++a;	  //a 先自加 1,然后再赋值给 c,此时 c = 12 ,a = 12

# 关系运算符(> >= < <= == !=)

关系运算符主要用于比较,两边可以是具体数据,也可以是表达式,其最终运算结果返回一个布尔类型,即 true 或者 false。

# 逻辑运算符(&& || !)

作用: 用于连接关系表达式
逻辑与(&&): 所有表达式都为 true 时,整个逻辑运算结果才为 true。短路与 参与运算的多个表达式只要有一个为 false,其后的表达式就不再执行了。
逻辑或(||): 参与运算的多个表达式只要有一个为 true, 整个表达式就返回 true。短路或 如果参与运算的多个表达式有一个为 true, 其后的表达式就不会再执行了
逻辑非(!): 可以将一个表达式的布尔结果取反。

# 赋值运算符

  • 简单赋值运算符:=

int a = 10 //将一个值赋给一个变量

  • 复合赋值运算符:+= -= *= /=
int a = 6;      // 简单赋值运算符
 a += 4;         // 相当于:a = a + 5;
 a += 1;         // 相当于:a = a + 1; 即 a++;
 a -= 4;         // 相当于:a = a - 4;
 a *= 7;         // 相当于:a = a * 3;
 a /= 7;         // 相当于:a = a / 3;
 a %= 3;         // 相当于:a = a % 3;

注意: 复合赋值运算符不会改变变量的数据类型,当计算结果大于其数据类型时,会自动强制转换为当前数据类型
如下:

byte a =10     // 当使用 a = a * 250 时程序会报错,因为计算结果 2500 超出了 byte 类型的范围,而使用 a *= 250
a *= 250       // 时程序就不会报错,其实赋值运算的会有一个默认的强制转换。
              // 本程序中 a *= 250 等价于 a = (byte)(a * 250)

# 总结

  • 数据类型: byte < short = char < int < long < float< double 表示了数据类型的强弱,弱数据类型向强数据类型转换时,可以自动完成数据类型的转换,强类型向弱类型转换时,需要加上强制转换符,并且可能丢失精度。
  • 运算符的优先级: 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符

()
++ - - !
*/ %
+ -
\ > >= < <= == !=
&&
||
= += -= *= /= %=