1、认识变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。
变量是一种使用方便的占位符,用于引用计算机内存地址,使用变量并不需要了解变量在计算机内存中的地址,只要通过变量名引用变量就可以查看或更改变量的值。
简单使用ppt画笔,画图演示,变量指向值所在的内存空间地址

酒店房间为例:房间对应程序的变量
    房间类型对应变量类型
    房间号对应变量名
    入住客人对应变量值

2、变量的命名规则

变量命名规则:
    首字母:字母,下划线,$符
    其它:数字,字母,下划线,$符
变量命名规范:
   简短且能清楚地表明变量的作用,通常第一个单词的首字母小写,其后单词的首字母大写。例如:myScore,也称为驼峰命名法
变量命名经验:
    实际开发时,为了易于维护,尽量使用有意义的变量名,比如性别,就命名为sex,如果直接命名为a,别人不看代码都不知道具体含义

3、java的8种基本数据类型:

byte(1个字节),
char(2个字节),
short(2个字节),
int(4个字节),
float(4个字节),
long(8个字节),
double(8个字节),
boolean(只占一位,即1/8字节)
    一个字节占八位-bit,范围是-2的八次方到2的八次方-1
    在计算机科学中,bit是表示信息的最小单位,叫做二进制位;一般用0和1表示
注意:String不是基本数据类型

4、变量的声明和使用

第一步:声明变量,根据数据类型在内存申请空间
第二步:赋值,即“将数据存储至对应的内存空间”
第三步:使用变量,即“取出数据使用”
注:
    第一步和第二步可以合并
    数据类型 变量名 = 数值;


示例:
    每种常用数据类型都简单演示一下定义和使用,注意异常赋值的情况            
    public static void main(String[] args) {
        double score = 98.5;
        String name = "张三";
        char sex = '男';

        System.out.println("本次考试成绩最高分: " + score);
        System.out.println("最高分得主: " + name);
        System.out.println("性别: " + sex);
    }
    
注意:局部变量定义后,必须初始化才能使用,否则编译不通过。

5、常量的声明和使用

常量是已经定义,不可变的,注意常量的写法

使用的关键字为final 代表最终不可变的
示例:
public static void main(String[] args) {
    // 计算圆的面积
    final double PI=3.14;
    int r = 2;
    
    // 面积;  
    double area = PI * r * r;
    System.out.println("圆的面积为:" + area);
    
}

优点:比较安全
    推荐做法:
    (1)常量名通常大写
    (2)不同字符使用下划线分隔
    (3)只能被赋值一次,通常定义时即对其初始化

6、接收键盘输入

第一步:导入Scanner类
    import java.util.Scanner;
第二步:创建Scanner对象
    Scanner input = new Scanner(System.in);
第三步:获得键盘输入的数据
    int now = input.nextInt();

示例:
    public static void main(String[] args) {
        // Scanner,系统输入对象,可以在控制台进行输入操作
		Scanner input = new Scanner(System.in);
		System.out.print("请输入姓名:");
		String name = input.next();
		System.out.print("请输入年龄:");
		int age = input.nextInt();
		System.out.print("请输入工资:");
		double salary = input.nextDouble();
        
        System.out.println("您输入的信息为:[" + name + "," + age + "," + salary + "]");
		input.close();
        
    }

7、运算符

赋值运算符:=
    将右侧的值(或者变量)赋给左侧的变量
示例:
    int wangScore = 80;    // 王浩成绩
    int zhangScore;        // 张萌成绩
    // 错误,变量的使用前,必须先赋值
    // wangScore = zhangScore; 
    zhangScore  =  wangScore; //将右边的值给左边的变量
    System.out.println(“张萌成绩是" +zhangScore);

表达式
    算表达式就是符号(如加号、减号)与操作数(如b,3等)的组合

赋值运算符的运用:
    两个值得互换:
    public static void main(String[] args) {
		// 两个值得互换
		int num1 = 8;
		int num2 = 9;

		System.out.println("交换前:num1=" + num1 + ", num2=" + num2);
		int temp = num1;
		num1 = num2;
		num2 = temp;
		System.out.println("交换后:num1=" + num1 + ", num2=" + num2);
		// 两个值得互换
		int num3 = 4;
		int num4 = 5;

		System.out.println("交换前:num3=" + num3 + ", num4=" + num4);
		num3 = num3 + num4;
		num4 = num3 - num4;
		num3 = num3 - num4;
		System.out.println("交换后:num3=" + num3 + ", num4=" + num4);
	}

8、基本算术运算符

+、-、*、/、%、++、--
重点展示求余 %,++,-- 的用法

复合算术运算符
+=、-=、*=、/=、%=
演示一个用法即可,讲解原理

示例:
    public static void main(String[] args) {
        // 算数运算符
        // 加 +
        int num1 = 98;
        int num2 = 89;
        int sum = num1 + num2;
        System.out.println("两个数之和:" + sum);

        // 减 -
        int mut = num1 - num2;
        System.out.println("两个数之差:" + mut);

        // 乘 *
        int cf = num1 * num2;
        System.out.println("两个数之积:" + cf);
        
        // 除 /
        double sub = num1/num2;
        System.out.println("两个数相除:" + sub);
        
        // 求余数
        int num3 = num2 % 2;
        System.out.println("89与2的余数:" + num3);
        
        // ++ --
        int num4 = 10;
        // ++ -- 写在后面,是先使用后加减
        // int temp = num4;
        // num4 = num4 + 1;
        System.out.println(num4++);
        System.out.println(num4--);
        
        int num5 = 10;
        // ++ -- 写在前面,是先加减后使用
        System.out.println(++num5);
        System.out.println(--num5);
        
        // 复合运算 += -= *= /= %=
        int num6 = 20;
        // num6 = num6 + 10;
        num6 += 10;
        System.out.println(num6);
        
        // 例外
		short num5 = 6;
		num5 += num3;
		// num5 = num5 + num3;
		System.out.println(num5);
    }

9、练习:会员卡号数字和

public static void main(String[] args) {
		// 练习:计算会员卡号各个位置上数字之和
		Scanner input = new Scanner(System.in);
		System.out.print("请输入会员卡:");
		int vip = input.nextInt();
		int q = vip / 1000;
		int b = vip % 1000 / 100;
		int s = vip / 10 % 10;
		int g = vip % 10;
		System.out.println("千位:" + q + ",百位:" + b + ",十位:" + s + ",个位:" + g);
		System.out.println("各个位置数字之和为:" + (q + b + s + g));
		input.close();
	}

10、自动、强制类型转换

规则1:如果一个操作数为double型,则整个表达式可提升为double型

规则2:满足自动类型转换的条件
    两种类型要兼容
    数值类型(整型和浮点型)互相兼容
    目标类型大于源类型: 
    例如:double 型大于 int 型

示例:
    public static void main(String[] args) {
       // 类型转换 自动和强制
		double salary = 8234.5;
		// 自动转换
		double avgSalary = 9000;
		System.out.println(avgSalary);
		// 工资提高1000
		int addSalary = 1000;
		// 新的工资
		double newSalary = salary + addSalary;
		System.out.println(newSalary);
		
		// 强制类型转换
		// 计算日薪,高精度到低精度,强制转换后,自动取整
		int daySalary = (int)(salary / 30 + 30);
		System.out.println("日薪:" + daySalary);
    }

11、关系运算符

实例:
	public static void main(String[] args) {
		// 布尔类型变量
		double salary = 8000;
		boolean flag = salary > 6000;
		// 日薪是否等于300
		boolean flag1 = salary / 30 != 300;
		System.out.println("工资是否大于6000?" + flag);
		System.out.println("日薪是否等于300?" + flag1);
	}

注意:
    =为赋值运算符,==为等于运算符
    关系表达式的结果为布尔值
    >、<、>=、<= 运算符的优先级别高于==、!=
    >、<、>=、<=运算符只支持数值类型的数据比较

12、布尔数据类型

boolean (布尔)类型
    boolean类型的值
    真:true
    假:false

示例:
    int liSi = 80;          //学员李四成绩
    boolean isBig ;    
            
    Scanner input = new Scanner(System.in);   
    System.out.print("输入学员张三成绩: ");       
    int zhangSan =  input.nextInt();                     //输入张三的成绩 
            
    isBig = zhangSan > liSi ; 
    System.out.println( "张三成绩比李四高吗 ? "+isBig );    //输出比较结果

13、逻辑运算符

&& 短路与 两个表达式(操作数)都是true,结果才是true,即第一个表达式为false,不看第二个表达式
|| 短路或 两个表达式都是false,结果才是false,即第一个表达式为true,不看第二个表达式
! 非 操作数为true,结果为false 反之亦然

优先级别
     ! > && > ||
注意:
    如果第一个操作数已经能确定表达式的值,第二个操作数就不必计算了;

示例:
    int x=8;
    int y=9;
    System.out.println((++x==y)&&(++x!=y));// true
    System.out.println(x);// 10

    int x=8;
    int y=9;
    System.out.println( (++x!=y)&&(++x==y));// false
    System.out.println(x);// 9

变更为或||运算符,再演示一下,看下处理

扩展:    // 位运算 & 11为1, | 00为0, ^ 同为0异为1
		// 先转为二进制,然后按位运算 
		int x = 2;
		int y = 3;
		System.out.println(x & y); // 2
		System.out.println(x | y); // 3
		System.out.println(x ^ y); // 1
		// 十进制转二进制口诀:除二取余,然后倒序排列,高位补零

14、条件运算符

也称为三目(三元)运算符

语法:
    条件 ? 表达式1 :表达式2;
    表达式1或者2的类型必须跟定义变量类型一致
示例:
    public static void main(String[] args) {
        // 判断是否为偶数
        // 创建Scanner对象
        Scanner input = new Scanner(System.in);

        // 获取系统输入内容
        System.out.print("请输入一个数:");
        int num = input.nextInt();
        
        // 判断是否为偶数
        // boolean flag = (num % 2 == 0) ? true : false;
        String str = (num % 2 == 0) ? "偶数" : "奇数";
		
        System.out.println(str);
        
        // 三元运算符 
		int salary = 6000;
		// 如果工资小于6000,加薪500,否则加薪200
		int newSalay = salary < 6000 ? salary + 500 : salary + 200;
		System.out.println("调薪后工资为:" + newSalay);
        
    }

15、总结

单元运算符包括!   ++  --,优先级别高
优先级别最低的是赋值运算符
可以通过()控制表达式的运算顺序,()优先级最高
从右向左结合性的只有赋值运算符、三目运算符和单目运算符
算术运算符 > 关系运算符 > 逻辑运算符

经验:为了程序容易理解,尽量不要写过于复杂的表达式,不确定优先级灵活使用小括号