总结笔记二

01-标识符

  • 概念 : 就是自己给类, 方法, 变量..起名字的符号

    • 大白化理解 : 自己起的名字都是标识符

  • 规则 :

    • 26个英文字母, 数字0-9, _ $

    • 数字不能开头

    • 不能是Java中的关键字

    • 严格区分大小写

  • 规范 :

    • 小驼峰命名法 : 变量

      • 如果是一个单词, 所有单词小写 age

      • 如果是多个单词, 从第二个单词开始首字母大写 maxAge

    • 大驼峰命名法 : 类

      • 如果是一个单词, 首字母大写 Student

      • 如果是多个单词, 每个单词首字母大写 GoodStudent

今天的规范如果不能完全掌握, 最起码要做到一点

起名字的时候, 一定要见名之意

int age = 10;
int score = 100;
String name = "张三";

02-数据类型

  • 基本数据类型

    • 整数

      • byte 1个字节 -128~127

      • short 2个字节

      • int 4个字节

      • long 8个字节

    • 小数

      • float 4个字节

      • double 8个字节

    • 字符

      • char 2个字节

    • 布尔

      • boolean 1个字节

  • 引用数据类型

今后定义变量的使用选择:

1. 如果要定义的是整数类型变量, 首选int, 发现int装不下了, 换成long(定义long类型变量需要加入L的标识)

2. 如果要定义的是小数类型变量, 首选double, 非要定义float类型的变量(需要加入F的标识)
  • 细节

所有整数默认int类型

System.out.println(10);

所有小数默认double类型

System.out.println(10.0);

03-键盘录入

  • 介绍 : 可以让程序中所使用的变量更加灵活

  • 步骤 :

    • 找符咒 (导包)

    import java.util.Scanner;

    注意 : 这句代码一定要写在类定义的上方位置
    • 召唤精灵 (创建对象)

    Scanner sc = new Scanner(System.in);

    注意 : sc是变量名, 可以直接改变, 其他的都不允许改变
    • 指挥精灵干活

    // 录入整数
    int num = sc.nextInt();

    // 录入字符串
    String name = sc.next();

    // 录入小数
    double a = sc.nextDouble();

    // 录入布尔
    boolean b = sc.nextBoolean();

     

04-算数运算符

+ - * 
---------------------------------
/ : 整数相除结果只能得到整数, 如果想要得到小数, 需要有小数参与运算
%(取模) : 得到的是除法之后剩下的余数

05-字符串的拼接操作

当 + 号操作过程中, 如果遇到了字符串, 这时就是字符串连接符, 而不是算数运算符了

System.out.println("年龄为" + 23 + 1);     // 年龄为231
System.out.println("年龄为" + (23 + 1) ); // 年龄为24
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个整数:");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
// 3 + 4 = 7
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2) );

06-自增自减运算符

  • ++ , --

  • 让变量自身的值 + 1

  • 让变量自身的值 - 1

  • 注意 : 这两个符号只能操作变量, 不能操作常量

1. 单独使用(推荐)
        ++,-- 在前在后没有区别

        int a = 10;
        a++;
        ++a;

2. 参与运算使用
        ++在前: 让变量先自增, 再参与运算.
            		
            		int a = 10;
					int b = ++a;
					sout(a);  // 11
					sout(b);  // 11
            
        ++在后: 会先将该变量原本记录的值, 提取出来参与运算, 然后再自增
            
            		int a = 10;
					int b = a++;
					sout(a);  // 11
					sout(b);  // 10
  • 任务 :

public class OperatorTest2 {
    /*
        看程序说结果
     */
    public static void main(String[] args) {
        int a = 10;
        int b = ++a;
        int c = b++;

        System.out.println("a=" + a);
        System.out.println("b=" + b);
        System.out.println("c=" + c);

        System.out.println("---------------------");

        int x = 3;
        int y = (++x) + (x++) + (x * 10);
        System.out.println("x=" + x);
        System.out.println("y=" + y);
    }
}

07-类型转换 - 隐式转换

  • 基本的隐式转换 :

    • 取值范围小的数据, 给取值范围大的数据赋值, 可以直接赋值

      • 简单理解 : 小的给大的, 可以直接给.

    • 取值范围从小到大 :

      • byte short int long float double

      • 注意 : 虽然float占用4个字节, 但是取值范围要比8个字节的long更大一些

        • 小数的二进制存储比较节省空间

  • 运算过程中的隐式转换 :

    • 取值范围小的数据, 和取值范围大的数据在一起运算, 小的会先将自己提升为大的, 保证数据类型统一, 然后再进行运算

    • byte short char 在运算的时候, 都会直接提升为int类型进行运算.

08-类型转换 - 强制转换

  • 将取值范围大的数据, 给取值范围小的变量赋值, 不能直接赋值, 需要强制转换

    • 简单理解 : 大的给小的, 不能直接给, 需要强转

  • 注意 :

    • 今后尽量减少强转的使用, 因为[有可能]会出现精度的损失

    double a = 12.3;
    int b = (int)a;
    
    System.out.println(b);  // 12

     

09-类型转换的面试题

public class ChangeTypeTest1 {
    /*
        byte b1 = 3;
        byte b2 = 4;
        byte b3 = b1 + b2;

        问题: 以上代码是否存在错误, 如果有, 请指出并改正.

        问题的原因: b1 和 b2 是两个byte类型, 在运算的时候会先提升为int
                    提升之后, 就是两个int在一起运算了, 运算的结果还是int
                    将int结果赋值给byte, 大的给小的, 需要强制转换.

        byte b = 3 + 4;

        问题: 以上代码是否存在错误, 如果有, 请指出并改正.

        疑惑: 所有整数默认都是int, 这里属于两个int相加, 相加之后, 结果还是int
                    将int结果赋值给byte, 大的给小的, 需要强制转换.

        原因: Java中存在常量优化机制, 上述代码在编译期间(javac的时候)
                    就会自动将3和4进行运算, 算出一个7的结果.
                    会检查该数据是否在byte的取值范围内
                                在: 编译通过
                                不在: 编译失败

                    .class字节码文件

                    byte b = 7;
     */
    public static void main(String[] args) {
        byte b1 = 3;
        byte b2 = 4;
        byte b3 = (byte)(b1 + b2);
        System.out.println(b3);

        byte b = 3 + 4;
    }
}