二. 数据类型、变量、运算符

二. 数据类型、变量、运算符

2.1 标识符 和 关键字

  • 标识符:代码中代表了各种数据的名字。通过标识符来访问操作各种数据。

  • 标识符是有命名规则的:

    • 首字符必须是 大小写字符、_、$。

    • 从第二个字符开始,可以使用数字。

    • 长度没有限制。

    • 大小写敏感。区分大小写。

    • 不能使用java的关键字。

      • class public static void

  • 标识符的命名规范:

    • 见名知意,必须通过名字体现出数据的内容来。

      • age name studentAge studentName

    • 使用驼峰命名法:

      • 多个单词构成的标识符,单词的首字符大写。

    • 不要使用拼音。

    • 不要使用单字符标识符。(个别情况例外)。

2.2 变量(variable)

  • 变量是一种标识符。

  • 变量的概念:变量的本质是一块有名字的内存区域。内存中的数据可以被修改。

  • 定义变量的语法:数据类型 变量名 = 初始值;

    • int age = 21;

    • 数据类型:代表了变量所能保存的数据的种类:整数、浮点数、字符串...

    • 变量名:是一种标识符,要符合标识符的规则规范。

  • 变量的特有的命名规范:首字符小写,多个单词构成,从第二个单词开始,每个单词的首字符大写。

2.3 java支持的数据类型

  • java 程序可以处理的哪些种类的数据。

  • java 支持的数据的类型分为2大类:

    • 基本数据类型|简单数据类型|java的内置类型(模拟表示现实世界中简单的数据)

      • 数值型

        • 整数类型

          • byte 字节型 使用1 byte 表示整数。取值范围[-128~127] 256

          • short 短整型 使用2 bytes 表示整数。取值范围[-2^15~ 2^15-1] 65536

          • int 整型 使用4 bytes 表示整数。取值范围[-2^31~ 2^31-1]

          • long 长整型 使用8 bytes 表示整数。取值范围[-2^63~ 2^63-1]

        • 浮点数类型

          • float 单精度型 使用4 bytes 表示浮点数。小数点后最多保留7位左右。

          • double 双精度 使用8 bytes 表示浮点数。小数点后最多保留16位左右。

        • 字符类型

          • char 占用 2bytes。在java中使用单引号 表示一个字符 'A'; 本质上字符是一个整数。【0-65535】

      • 布尔类型

        • boolean 用来表示现实世界中的真假对错的。true false。 true:真的,对的。false:假的,错的。

        • 官方没有指出 boolean类型变量占用的内存空间。本质上只占用了一个bit,1对应true,0对应false。

    • 引用数据类型|复杂数据类型(模拟表示现实世界中复杂的数据)

      • 数组 []

      • 类 class

      • 接口 interface

  • 数据类型对于变量的意义:

    • 约束了变量的取值范围。

    • 约束了变量的内存空间。

    • 约束了变量底层的存储格式。

    • 最终数据展示的形式。

2.4 字符类型介绍

  • 字符数据 使用 单引号 '字符'。

  • 字符在硬件上存储的时候,保存的是字符对应的一个整数的二进制形式。

  • 字符的使用,任何的字符都依赖于某一个字符集,每个国家都有自己的字符集。

  • 常见的字符集

    • ASCII:美国标准信息交换码。单字节字符集,一共收录了128个字符。

      • 0:48 A:65 a:97

      • 世界上所有的其他的字符集都兼容了ASCII。

    • gb2312:

    • gbk 是 gb2312 的超集。

    • big5:繁体中文字符集。

    • iso8859-1:西欧那边使用的字符集。

    • unicode:utf-8(万国码)

  • class TestChar{
        
        public static void main(String[] args){
            //字符 0
            System.out.println('0'+0);//48
            //
            char ch = 'A';
            ch += 32;
            //ch = ch + 32;
            System.out.println(ch);//a
            
            //int 你好 = 10;
            //System.out.println(你好);//a
            
            //定义字符变量的多种形式。
            char ch1 = 'A';
            char ch2 = 97;
            char ch3 = '\u005a';//Z
            System.out.println(ch2);//a
            System.out.println(ch3);//Z
        }
    }
  • 转义字符:

    • class TestChar1{
          
          public static void main(String[] args){
              //转义字符
              //都是字符,但是主要用于控制其他的内容显示的格式的字符。
              //需要使用特殊的表示形式来表达这些特殊的字符。
              /*
                  \t: tab 键 水平制表符。
                  作用:输出8个半角符号位的倍数。占用的空间大小[1-8]个半角位。补齐8的倍数半角位。
              
                  【\r: 回车符: 让光标回到当前行的行首。】
                  \n: 换行符:让光标回去到下一行。
                  回车键对应着两个转义字符:\r\n  
                  【\b: 对应着backspace 键。】
              
                  \': 代表了单引号 字符。
                  \" : 代表了双引号 字符。
                  \\ : 代表了反斜杠 字符。
                  
              */
              
              System.out.println("123456789");
              System.out.println("\t123456789");
              System.out.println("123\t456789");
              System.out.println("1234567\t89");
              System.out.println("12345678\t9");
              
              System.out.println("123\"456\r789");
              System.out.println("123456\n789");
              
              System.out.println('\'');//
              System.out.println('\\');//
          }
      }

2.5 字符串类型介绍

  • class TestString{
        
        public static void main(String[] args){
            //字符串类型简介
            int age = 10;
            
            //定义字符串类型的变量
            String str = "abc";
            str = "\u005a\u0041";
            System.out.println(str);
            
            //字符串可以和java支持的任意类型做 + 连接,会得到一个新的字符串。
            System.out.println(str + 0);
            System.out.println(str + true);
            System.out.println(str + 1.1111111111111);
        }
        
    }

2.6 变量扩展

  • 变量的声明和定义

    • 定义变量 等价于 声明变量 + 赋值。

    • class Test1{
          
          public static void main(String[] args){
              //变量的定义。
              int num = 10;
              int num1 = 10,num2 = 20,num3 = 30;
              
              //变量的声明
              int num4;
              //赋初始值。变量的初始化
              num4 = 100;
              
              System.out.println(num1+num3);//40
              System.out.println(num4);//100
              
              //一次性声明多个变量
              int num5,num6,num7;
              ;;;;;;;;;;;;;
              num5 = 100;
              num6 = 200;
              num7 = 600;
              
              int num8,num9=100;
              num8=100;
              System.out.println(num8);//100
              System.out.println(num9);//100
              
          }
      }
  • 变量的作用域

    • 变量可以被访问的范围。

    • 变量的作用域从定义的位置开始,到所在的大括号的结尾处。

2.7 运算符

  • java中可以使用哪些符号(运算符)对java支持的数据类型(8+3)进行运算。

  • 概念

    • 运算符:java 中 对数据进行运算的符号。

      • +-*/ ....

    • 操作数:运算符操作的数据。

      • 1+2 1 he 2 就是操作数。

    • 表达式:使用运算符 操作 操作数的整体式子。

      • 1+3 表达式。

    • 一元运算符|单目运算符:只需要一个操作数的。

      • +1 -1

    • 二元运算符|双目运算符:需要两个操作数的运算符

      • 1+1 2*5

    • 三元运算符|三目运算符:需要三个操作数的运算符

    • 表达式的返回值:

      • 表达式计算的结果的值称为 表达式的返回值。

      • 表达式在程序中使用的时候,都是表达式的返回值来参与的。

  • 运算符的分类:

    • 算数运算符

    • class ArthmaticTest{
          //算数运算符学习:对数值型的数据进行算数运算的符号。
          // +   -  * /  %  ++  --
          public static void main(String[] args){
              //+ 一元运算符 ,代表了正数。
              System.out.println(+1);//1
              // + 也是一个二元运算符,对两个操作数进行 加 运算。
              System.out.println(2+1);//3
              //- 一元运算符 ,代表了负数数。
              System.out.println(-1);//-1
              // - 也是一个二元运算符,两个操作数进行 减法 运算。
              System.out.println(2-1);//1
              
              // * 是一个二元运算符,两个操作数进行 乘法 运算。
              System.out.println(2*1);//2
              System.out.println(-2*1);//-2
              System.out.println(2*-1);//-2
              System.out.println(-2*-1);//2
              
              //  / 是一个二元运算符,两个操作数进行 除法 运算。整数除法结果是整数。
              System.out.println(5/2);//2
              System.out.println(5/-2);//-2
              System.out.println(-5/2);//-2
              System.out.println(-5/-2);//2
              
              // %  取余、模运算。是一个二元运算符   a%b:   a除以b 得到的余数。
              //结果的符号位和 左边的操作数一致。
              System.out.println(5%2);//1
              System.out.println(5%-2);//1
              System.out.println(-5%2);//-1
              System.out.println(-5%-2);//-1
              
              // / %  应用:获取一个任意的数字的每个位置上的值。
              int num = 682;
              int unit = num%10;
              int decade = num/10%10;
              int hundred = num /100;
              System.out.println(num + "百位:"+ hundred + " 十位:" + decade + " 个位:"+unit);
              
              //++: 自增运算符。可以实现对一个变量自增1的操作。
              //语法: num ++;(后缀模式)   ++ num;(前缀模式)
              num = 0;
              num ++;
              ++ num;
              System.out.println(num);//2
              // ++ 后缀模式的特点:先返回,后自增。num ++; 返回值是 num 自增之前的值。
              num = 0;
              System.out.println(num++);//0
              System.out.println(num);//1
              
              num = 0;
              num = num ++;
              System.out.println(num);//0
              
              num = 0;
              System.out.println(num++ + num++ + num++);//3
              System.out.println(num);//3
              
              num = 0;
              // ++ 前缀模式的特点:先自增,后返回。num ++; 返回值是 num 自增之前的值。
              System.out.println(++num);//1
              num = 0;
              System.out.println(num++ - ++num + num++);//0
              
              //-- 前缀模式:先自减,后返回。  后缀模式:先返回,后自减。
              num = 0;
              System.out.println(--num + num++ + num-- + ++num);//-2
          }
      }
    • 赋值运算符

    • class TestOperator{
          public static void main(String[] args){
              //赋值运算符  = 
              //二元运算符,作用:将右边表达式的返回值赋值给左边的变量。
              int num = 10;
              num = num * num + num * 10 + 10*100;
              
              num = 10;
              
              //复合赋值运算符 +=  -=  *=  /=  %=
              num = num + 5;
              num += 5;
              
              num = num -5;
              num -= 5;
              
              num = num * 5;
              num *= 5;
              
              num = num / 5;
              num /= 5;
              
              num = num % 5;
              num %= 5;
              
              System.out.println(num);
          }
      }
    • 关系运算符

    • class TestOperator1{
          
          public static void main(String[] args){
              //关系运算符:> <  >=  <=  == !=
              //都是二元运算符
              //作用:用来比较两个操作数的关系是否成立的。
              //关系表达式的返回值是 boolean 类型的:成立true,不成立false。
              //> < >= <= 只能使用 数值型操作数。
              //==  !=  适用于java支持的所有的数据类型。8+3
              
              int num = 0;
              System.out.println(++num > num);//false
              System.out.println(num++ >= num);//false
              System.out.println(++num == num);//true
              System.out.println(num++ != num);//true
              
              System.out.println('A' > 'a');//false
              
              System.out.println(true > false);//报错   
          }
      }
    • 逻辑运算符

      • class TestLogic{
            public static void main(String[] args){
                /*
                逻辑运算符: &  |  ^  !  && ||
                特点:操作数的类型必须是boolean值。逻辑表达式的返回值也是 boolean 值。
                */
                //& 逻辑与: 二元运算符。 a&b 。表达的是现实世界中的并且的关系。
                //规则:有假则假,全真则真。
                System.out.println(true&true);//true
                System.out.println(true&false);//false
                System.out.println(false&true);//false
                System.out.println(false&false);//false
                
                //| 逻辑或: 二元运算符。 a|b 。表达的是现实世界中的或者的关系。
                //规则:有真则真,全假则假
                System.out.println(true|true);//true
                System.out.println(true|false);//true
                System.out.println(false|true);//true
                System.out.println(false|false);//false
                
                // ^ 逻辑异或:a^b 。表达的是现实世界中两者是否相同。
                //规则:相异为真,相同为假。
                System.out.println(true^true);//false
                System.out.println(true^false);//true
                System.out.println(false^true);//true
                System.out.println(false^false);//false
                
                // ! 逻辑非|逻辑取反。 一元运算符。 !a
                System.out.println(!true);//false
                System.out.println(!false);//true
                
                System.out.println(!(Math.random()>0.5));
                
                int num = 0;
                System.out.println(!((num ++ >0) | (num ++ == 1)));//false
                
                //短路与:&& :运算的结果和规则和 & 一致。
                num = 0;
                System.out.println(num<0 & num++>1);//false
                System.out.println(num);//1
                
                //短路与的特点:如果一旦有一个操作数是false,那么后面的操作数将不再被执行,被短路了。直接返回false。
                num = 0;
                System.out.println(num<0 && num++>1);//false
                System.out.println(num);//1
                
                //短路或 ||  特点:如果一旦有一个操作数是true,那么后面的操作数将不再被执行,被短路了。直接返回true。
            }
        }
    • 位运算符

    • class TestBit{
          
          public static void main(String[] args){
              /*
              位运算符:&  |  ^  ~  <<  >>  >>>
              要求掌握的:^ <<  >>。
              特点:可以直接操作数据底层的二进制位,执行效率高于其他的运算符。
              在某些场合下可以使用位运算替代其他的运算,来提高效率。
              
              操作数类型:整型int。
              */
              
              //&:按位与:规则:对应的位按位& 操作,全1则1,有0 则0.
              System.out.println(5&3);//1
              
              //| :按位或:规则:对应的位按位 | 操作,全0则0,有1 则1.
              // 如果两个操作数对应的位上没有全1 ,那么 | 操作和 + 结果一致。
              System.out.println(5|3);//7
              System.out.println(1|2);//3
              System.out.println(2|4);//6
              System.out.println(1|6);//7
              System.out.println(3|8);//11
              System.out.println(6|9);//15
              
              //^ : 按位异或:规则:对应的位按位 ^ 操作,相异为1,相同为0。
              System.out.println(5^3);//6
              //特点:一个数先后异或 另外一个数2次,结果是它自身。
              System.out.println(15^31^31);//15
              
              //应用1:实现简单的加密:
              char ch1 = '我';
              char ch2 = '爱';
              char ch3 = '你';
              
              int key = 520;
              //加密
              ch1 ^= key;
              ch2 ^= key;
              ch3 ^= key;
              System.out.println(""+ch1+ch2+ch3);//
              
              //解密
              ch1 ^= key;
              ch2 ^= key;
              ch3 ^= key;
              System.out.println(""+ch1+ch2+ch3);//
              
              //2:交换两个变量的值。
              int num1 = 10;
              int num2 = 20;
              System.out.println("num1 = "+ num1 + "\tnum2 = " + num2);
              int temp = num1;
              num1 = num2;
              num2 = temp;
              System.out.println("num1 = "+ num1 + "\tnum2 = " + num2);
              //使用 ^ 实现。
              num1 = num1 ^ num2;//num1 变了。
              num2 = num1 ^ num2;//num2 报存了原始的num1.
              num1 = num1 ^ num2;
              System.out.println("num1 = "+ num1 + "\tnum2 = " + num2);
              
              //~ 对所有的二进制位,全部取反。包括符号位。
              System.out.println(~0);//-1
      ​
              //<<  左移运算符。a<<n  等价于 a*2^n.
              //规则:高位被移走,低位补0.  
              //应用:可以使用 << n 替代 乘以 2的n次幂。对于一般比较小的数,都是成立的。
              System.out.println(3<<2);//12
              System.out.println(1<<3);//8
              
              System.out.println(1<<31);//
              
              //>>  带符号右移运算符。a>>n  等价于 a/2^n.
              //规则:低位被移走,高位补符号位。正数补0,负数补1.
              //应用:可以使用 >> n 替代 除以 2的n次幂。对于一般的数,都是成立的。
              System.out.println(23>>2);//5
              System.out.println(31>>3);//3
              System.out.println(-1>>3);//-1
              
              //无符号右移:>>>  a>>>n 
              //规则:低位被移走,高位补0.
              System.out.println(-1>>>1);//
          }
      }
    • 条件运算符

    • class Test2{
          
          public static void main(String[] args){
              /*
              条件运算符:
              运算符部分唯一的一个三元运算符。
              语法:操作数1 ? 操作数2 : 操作数3;
              
              操作数1:必须是一个boolean 表达式。返回值是布尔值的表达式。
              操作数2、操作数3:可以是返回值是任意类型的表达式。返回值的类型需要兼容。
              
              执行过程:
                  1:计算操作数1的结果。
                  2:如果结果为true,那么就计算操作数2的结果,并将该结果作为整个条件表达式的返回值。
                  3:如果结果为false,那么就计算操作数3的结果,并将该结果作为整个条件表达式的返回值。
              */
              
              //求两个随机数的最大值。
              int min = 0;
              int max = 100;
              
              int num1 = (int)(Math.random()*(max-min)+min);
              int num2 = (int)(Math.random()*(max-min)+min);
              int num3 = (int)(Math.random()*(max-min)+min);
              
              System.out.println("num1 = " +num1 + "\tnum2 = "+ num2+ "\tnum3 = "+ num3);
              
              //int maxNum = num1 > num2 ? num1 : num2;
              //System.out.println("maxNum = " +maxNum);
              
              //打印一个随机数的奇偶性。
              String result = num1 % 2 == 0 ? "偶数":"奇数";
              System.out.println(num1 + "\t是:"+result);
              
              //求三个数的最大值。先求两个数的最大值,然后再用2个数的最大值和第三个数比较即可。
              //三目嵌套
              int maxNum = num1 > num2 ? (num1 > num3 ? num1 : num3) :(num2 > num3 ? num2 : num3);
              System.out.println("maxNum = " +maxNum);
          }
      }
  • 运算符的优先级

    • 一元运算符高于二元运算符。

    • 二元运算符高于三元运算符。

    • 乘除取余大于加减。

    • 小括号的优先级最高。

    • 赋值运算符优先级最低。

2.8 类型转换

  • 算数运算的类型转换

  • 赋值时候的转换

  • 强制类型转换

  • 字符串连接时的转换

  • class TestType{
        public static void main(String[] args){
            /*
                类型转换:
                java 语言的规则:java 语言不允许不同类型的数据进行运算。
                
                如果不同类型的数据进行运算,编译器会将不同类型的数据转换为同类型,然后再做运算。
                
                自动类型转换的规则:(转换安全)
                    1:如果一个表达式中的操作数是如下类型:byte char short int。那么所有的操作数都转换为int,然后再做运算。结果为int。
                        编译器不能确定变量再编译期的值。
                    2: 如果一个表达式中的操作数是如下类型:byte char short int long。并且有一个操作数是long,那么所有的操作数都转换为long,然后再做运算。结果为long。
                    3:如果一个表达式中的操作数是如下类型:byte char short int long float。并且有一个操作数是float,那么所有的操作数都转换为float,然后再做运算。结果为float。
                    4:如果一个表达式中的操作数是如下类型:byte char short int long float double。并且有一个操作数是double,那么所有的操作数都转换为double,
                        然后再做运算。结果为double。
                        
                    自动向上类型转换,自动的,编译器来完成的,向范围更大的类型转换。转换时安全的。
                    
                强制向下类型转换:
                    将大类型的数据转换小类型。
                    语法:(转换的类型)(被转换的值)。
                    这样的转换是不安全的。
                    强转的类型需要兼容。
                    整数之间的强转,之间砍掉高位字节。
                    浮点数往整数转,先砍掉小数部分,然后保留低位字节。
                    
                字符串连接中的类型转换:
                    java 中只允许 字符串 和 字符串连接。
                    所有的其他的类型的数据都要先转换为字符串,然后再做连接。
                    "abc"+1
            */
            byte b1 = 1;
            int b2 = 2;
            int b3 = b1 + b2;
            
            b1 = 1+2;
            //b1 = b1 + 1;
            
            float f1 = 1.0f + 2011111111;
            System.out.println(f1);
            
            char ch1 = '你';
            ch1 = (char)(ch1 + 0);
            
            System.out.println((byte)0b11111111111111);//
            
            byte num = 127;
            //num = num + 1;
            num ++;
            num += 1;
            System.out.println(num);//
        }
    }

2.9 常量

  • 不能改变的量。

  • 常量的分类:

    • 字面常量:1,1.1 true,false,'a', "abc".

    • 符号常量|只读变量

2.10 常量练习

  • ​
    //如果在代码中使用到了jdk 中提供的功能,那么必须在源代码中使用import 关键 声明,使用到的内容,来自于哪里?
    import java.util.Scanner;
    //下面的代码是编译器默认会添加的。* 通配符,代表了所有的内容。lang 包是jdk 的核心包。默认引入的。
    import java.lang.*;
    ​
    class TestFinal{
        
        public static void main(String[] args){
            /*
            常量:不能改变的量。  
            
            常量的分类:
            1:字面常量:1,1.1  true,false,'a', "abc".
            2:符号常量|只读变量
                在定义变量的数据类型前添加关键字 final。让变量成为只读变量。
                只读变量只能赋值一次。
                命名规范:所有的字符全部大写,多个单词中间使用 _ 分割。
            */
            //final int NUMBER = 10;
            //final int MAX_AGE = 150;
            
            //需求:从键盘输入一个圆的半径,求圆的周长和面积。
            
            //定义个扫描器对象,扫描键盘的输入的。
            Scanner scanner =  new Scanner(System.in);
            
            System.out.println("请您输入一个圆的半径:");
            //使用扫描器接受键盘输入的一个整数。作为圆的半径。
            //阻塞式方法。会导致程序在此暂停,必须输入内容回车才能继续。
            int radius = scanner.nextInt();
            
            final double PI = 3.1416;
            
            //求圆的周长和面积
            double perimeter = 2 * PI * radius;
            double area = PI * radius * radius;
            
            //打印结果。
            System.out.println("半径是"+radius+"\t的圆的周长是:"+perimeter+"\t面积是:"+area);   
        }
    }

总结

  • 原码、反码、补码。

    • -5:1000 0101 1111 1010 1111 1011

  • 标识符

    • 规范

    • 规则

    • 作用:标识程序中的各种数据。

  • 变量

    • 概念:一块有名字的内存区域,内容可以被修改。

      • 对于变量的访问的两种操作:

        • get 获取

        • set 修改

    • 定义变量

      • 数据类型 变量名 = 初始值;

      • 数据类型: java 支持的任意的类型 byte short int long float double boolean char String。

      • 初始值:只要是一个具有返回值的表达式即可,返回值的数据类型要和 变量的类型兼容。

    • 声明变量

    • 变量的使用

  • 数据类型 ***

  • char 转义字符 String + 连接

    • 一个字符对应一个整数。

    • 不同的字符集中,很多的字符对应的整数不同。ASCII 部分的字符对应的整数是一致的。

    • 所有的乱码的问题都是读写字符数据使用的字符集不同导致的。

  • 运算符

    • 概念

    • 算数的

    • 赋值的

    • 关系的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值