Day02

2019-11-25  本文已影响0人  拼搏男孩

一. 常量

  1. 定义

    • 在程序执行过程中其值不可以发生改变
    • 常量就是指我们生活中用的数值,字母等
    • 常量无法被改变,一旦改变,其意义也随之被改变
  2. 分类

    • 字面值常量(比如1、'a'、3.1415、'I love you')
    • 自定义常量(通过final关键字进行定义)
  3. 字面值常量的分类

    • 字符常量 : 用单引号括起来的内容 'a'
    • 字符串常量 : 用双引号括起来的内容 "abc" "ufc"
    • 整数常量 : 所有的整数 1 0 3
    • 小数常量 : 所有的小数 1.2
    • 布尔常量 : 比较特殊, 只有true 和 false
    • 空常量 : null(数组部分会讲到)

字符常量不能为空,即单引号中必须存在值,即使是空格;但是字符串常量可以为空,可以这样理解,C语言中字符串是通过char str[]=""的形式进行定义的,字符串的结尾始终存在着一个'\0',即使字符串中没有任何内容。空常量是引用数据类型中经常用到的常量,一个类的域如果定义为其他类型的类对象,那么这个域的默认值就为null,null代表已经在内存中开辟出了这部分空间,只是没有内容而已。

  1. 演示

    public class TestDemo {
     public static void main(String[] args) {
         //字符常量
         System.out.println('a');
         //字符串常量
         System.out.println("你好");
         //数值常量
         System.out.println(10);
         //小数常量
         System.out.println(10.1);
         //布尔型常量
         System.out.println(true);
         //空常量 无法直接打印null 编译器认为是不合适的
         String s = null;
         System.out.println(s);
     }
    }
    

二. 变量

  1. 定义

    • 在程序执行的过程中,在某个范围内可以发生改变
    • 也就是说,其值是可以被改变的,在不同时期,同一个变量可以代表不同的值
    • 有了变量之后,我们使用起来就非常灵活
  2. 格式

    • 数据类型 变量名 = 变量值
  3. 意义

    • 用来不断的存放同一类型的数据,并可以反复使用
    • 从这里我们可以理解,变量的类型是固定的,其值可以被改变
    • 有了变量之后, 我们才能定义方法,才有了编程
  4. 演示

    public class TestDemo {  
     public static void main(String[] args) {
         //定义一个整数型变量i
         int i = 10;
         System.out.println(i);
         //更改变量i的值
         i = 15;
         System.out.println(i);
     }
    }
    
  5. 测试题

    • 交换两个变量的值
public class Swap{
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c;
        c = a;//将a的值复制给c
        a = b;//将b的值复制给a
        b = c;//将c的值复制给b
    }
}

三. 定义变量的注意事项

  1. 作用域

    • 在java中一对{ }就是一个作用域

    • 同一个作用域内不能使用相同的变量名

    • 演示

      public static void main(String[] args) {
         int a = 1;
         //出现错误,当下面有代码需要使用到变量a的时候, jvm不知道用哪一个
         int a = 2;  
         System.out.println(a);
      }
      
  2. 初始化值

    • 局部变量在使用之前必须要先赋值

    • 没有具体的值,使用起来是没有意义的

    • 演示

      public static void main(String[] args) {
         int a;
         //这里会报错, 如果没有值, 操作a是没有意义的
         System.out.println(a);
      }
      

java这点和C语言是不一样的,C语言如果不初始化还是一样可以使用,只不过拿到的是一个“脏数据”,意思就是从内存中随便拿一个值,会造成存储异常,Java直接在编译阶段就阻止了这种事情的发生。

  1. 一条语句可以定义多个相同类型的变量,只需要声明一次数据类型

    • 演示

      public static void main(String[] args) {
         //只定义变量不赋值
         int a,b,c;
         //定义变量并赋值
         int d =5,f=5;
      }
      

Java中一个分号(;)就代表一条语句,和C与C++一样,和Python不一样,Python以缩进作为语句的结束。

  1. 测试题

    • 下列代码是否成立

      public static void main(String[] args) {
         {
             int a = 10;
         }
         int a = 5;//定义并初始化成功,因为上面的作用域已经结束了,之前的a已经消亡
      }
      
    • 下列代码是否成立

      public static void main(String[] args) {
         double d = 1.0;//定义并初始化成功,小数的字面值常量默认为double
         System.out.println(d);
      }
      
    • 下列代码是否成立

      public static void main(String[] args) {
         double a = 1.0 , double b = 2.0;//不成立,因为在一条语句中声明了两次double类型,只需要声明一次。
      }
      

四. 数据类型

  1. 定义

    • 在我们编程语言中,可以基本分为程序代码和数据,程序代码主要就是为了操作数据而生的.所以,为了防止发生混乱,那么我们就有必要将代码和数据区分开来,便于计算机和程序员理解使用
    • 我们知道数据是存储于内存,或者其他存储器上的.我们如果想要存储数据,那么就必须先要在内存中开辟一块空间.可是数据大小都不一样,虚拟机到底开辟多大的一片地方才够用呢?空间小了,数据放不下,空间大了,就会造成内存的浪费.所以,我们就规定了几种类型,来存放不同长度的数据
    • java数据强类型语言,对于每一种数据都定义了明确的具体数据类型.以便于虚拟机分配不同大小的内存空间
  2. java中数据类型的分类

    • 基本数据类型

    • 引用数据类型(面向对象部分讲解)

      java数据类型关系
  1. 基本数据类型
基本数据类型的长度
  1. 注意事项

    • java中整数型默认的是int ,浮点型默认的是double , double的精度比float要高,所以如果我们将double转成float可能会造成丢失精度的问题.所以我们在给float类型的变量赋值时,要用f标明数值的类型
  2. 演示

    public static void main(String[] args) {
     //定义byte型变量b
     byte b = 4;
     System.out.println(b);
     //定义 short型变量 s
     short s = 10;
     System.out.println(s);
     //定义int型变量i
     int i = 10;
     System.out.println(i);
     //定义long型变量 l
     long l = 100;
     System.out.println(l);
     //定义 float型变量 f
     float f = 1.0f;
     System.out.println(f);
     //定义double型变量d
     double d = 2.0;
     System.out.println(d);
     //定义boolean型变量b
     boolean flg = true;
     System.out.println(flg);
     //定义char型变量ch
     char ch = 'a';
     System.out.println(ch);
    }
    

五. 数据类型的转换

  1. 定义

    • 数据类型的转换就是将一种数据类型转换为另外一种数据类型
    • 不同的数据类型之间是无法进行运算的
  2. 隐式转换

    • 所有隐式转换就是不需要程序员过多的干预, 编译器可以帮我自动做的事情

    • 这种情况,只要在编译器确定万无一失的情况下才会放行,比如小的数据类型转成大的数据类型

    • 示例

      public static void main(String[] args) {
         //将byte型转成int型
         byte b = 10;
         int a = 4;
         int c = a+b;//成立,编译器自动将byte类型的数据转换为int类型
         System.out.println(c);
      }
      
  3. 强制转换

    • 当转换时有风险存在,编译器不会帮我们做这些事情,就需要我们手动进行转换,这时我们称之为强制转换

    • 强制转换存在风险, 一定要确保可行再转换,可能会丢失精度

    • 格式

      • (要转换的类型)原数据
    • 演示

      public static void main(String[] args) {
         int i = 1000;
         byte b ;
         //将int型转换成byte
         b = (byte)i;
      }
      
  4. 注意事项

    • 当我们定义byte类型的变量并赋值的时候, 其实后面的数值是int的型, 也就是说其实是将大的类型转到小的类型上去, 但是这里编译器依然没有报错, 那是因为编译器在编译的时候会尝试将判定数值的大小,如果数值没有超过变量类型的限定, 就可以存放。但是其他类型的复制就没有,比如如果将一个long类型的字面值常量赋值给一个int型的变量就无法成功。

    • 演示

      public static void main(String[] args) {
         
         byte b = 10;//数值10是int型的 没有超过byte的范围
         
         //这里会报错
         byte by = 128;//数值128是int型的, 超过了byte的范围
      }
      
    • byte、short、char类型的变量在进行运算的时候会自动转换为int型然后进行运算,所以返回的数据是int型。

  5. 测试题

    • 判断下列代码是否成立

      public static void main(String[] args) {
         int i = 100L+100;//不成立,因为是long类型的字面值常量,转换为int型可能会丢失精度
      }
      

六. char数据类型

  1. 编码表
    • 计算机语言将我们平时用到的字符都存放到一个表中,对应着数字
  2. char是否可以存储一个中文?
    • 可以, 因为java使用的是Unicode编码,Unicode编码中的每个字符占用两个字节,中文也是两个字节

七. 算术运算符

  1. 定义

    • 就是对常量和变量进行操作的符号
  2. 分类

    • + :在java种有三种作用,正数,加法运算,字符串连接
    • - :表示数值相减
    • * :表示数值相乘
    • / :表示数值相除
    • % :表示取余数 结果的正负由左边的数值决定
    • ++ :自增 对原来的数据进行+1
    • -- :自减 对原来的数据进行-1
  3. 演示

    public static void main(String[] args) {
     
     int a = 1;
     int b = 2;
     
     //加
     System.out.println(a+b);
     //减
     System.out.println(a-b);
     //乘
     System.out.println(a*b);
     //除
     System.out.println(a/b);
     //摩以
     System.out.println(a%2);
     //自增
     System.out.println(a++);
     //自减
     System.out.println(a--);
    }
    
  4. 注意事项

    • ++i表示先运算i自身,然后再赋值, i++表示先赋值, 再运算自身
    • 在运算中, 我们必须将i++或者++i当作是一个整体来看,切莫和i本身混为一谈
    • 很多书籍和视频中都对i++和++i做了详细的描述, 说道i++执行四步,++i执行三步. 但是在java中没有这样的说法, 基本看不出效果. 编译器自身肯定会做优化的
    • 自增自减运算符和其他类型的运算符一样,也会返回值,但是副作用是对操作数本身会进行自增自减运算。自增自减运算符是先对操作数本身进行自增自减运算然后返回值。
  1. 测试题

    • 求 a, b, c最后的值

      public static void main(String[] args) {
         int a = 10;
         int b = 10;
         int c = 10;
         
         a = b++;    a = 10   b = 11;
         c = --a;    c = 9   a = 9;
         b = a--;    b = 9;  a = 8;
         System.out.println(a); 
         System.out.println(b); 
         System.out.println(c); 
      }
      
    • 预测结果

      public static void main(String[] args) {
         int a = 1;
         a = a++; // a = 1,因为先自增后返回值
         System.out.println(a);
         
         int b = a++ * ++a;
         System.out.println(b);
      }
      

八. 赋值运算符

  1. 定义

    • 将数值传递给一个变量
  2. 分类

    • = : 将值传递给左边
    • += : 将左右两遍的值相加,结果再传递给左边
    • -= : 将左右两遍的值想减,结果再传递给左边
    • *= : 将左右两遍的值想乘,结果再传递给左边
    • /= : 将左右两遍的值想除,结果再传递给左边
    • %= : 将左右两遍的值想摩,结果再传递给左边
  3. 演示

    public static void main(String[] args) {
     int a = 10;
     System.out.println(a);
     //加等于
     a += 5;
     System.out.println(a);
     //减等于
     a-=6;
     System.out.println(a);
     //乘等于
     a*=10;
     System.out.println(a);
     //除等于
     a/=5;
     System.out.println(a);
     //摩等于
     a%=2;
     System.out.println(a);
    }
    
  4. 测试题

    • 判断以下程序是否成立

      public static void main(String[] args) {
         int a ;
         
         a += 10; //不成立,因为a尚未初始化
         
         System.out.println(a);
      }
      

九. 关系运算符

  1. 定义

    • 一般我们也称之为判断运算符, 就是用来判断运算符两边的值的关系,结果只能是boolean
  2. 分类

    • == : 判断两边是否相等
    • != : 判断两遍是否不相等
    • > : 判断左边是否大于右边
    • >= : 判断左边是否大于等于右边
    • < : 判断左边是否小于右边
    • <= : 判断左边是否小于等于右边
    • instanceof : 判断两边的类型是否相等
  3. 演示

    public static void main(String[] args) {
     
     System.out.println(1==1);
     
     System.out.println(1!=1);
     
     System.out.println(1>1);
     
     System.out.println(1>=1);
     
     System.out.println(1<1);
     
     System.out.println(1<=1);
    
    }
    
  4. 测试题

    • 预测结果

      public static void main(String[] args) {
         
         int a = 10;
         int b = 20;
         
         boolean flg = a+b > a; //这个公式一定成立吗?
         
         System.out.println(flg);
      
      }
      

十. 逻辑运算符

  1. 定义

    • 逻辑运算符关联两个boolean结果, 结果还是一个boolean值
  2. 分类

    • & : 同时 true & true = true true & false = flase
    • | : 或 true| true = true true | false = true false | false = false
    • ^ : 异或(相同为假不同为真) true ^ true = false false ^ false = false rue ^ false = true
    • ! : 非 !true = false !false = true
    • && : 同时, 短路与, 两遍只要有一边的值为fasle , 虚拟机就不会再查看另外一边了
    • || : 或, 短路或, 两边只要有一遍的值为true, 虚拟机就不会再查看另外一边了
  3. 演示

    public static void main(String[] args) {
     
     boolean b ;
     
     //& 同时
     b = true&true;
     System.out.println(b);
     
     b = true&false;
     System.out.println(b);
     
     // | 或者
     b = true | false;
     System.out.println(b);
     
     b = false | false;
     System.out.println(b);
     
     // ^ 异或, 相同为假 不同为真
     b = true ^ true;
     System.out.println(b);
     
     b = true ^ false;
     System.out.println(b);
     
     // ! 非 非真即假,非假即真
     b = !true;
     System.out.println(b);
     
     b = !false;
     System.out.println(b);
     
     // && 同时  如果前边是false, 后面就不再验证
     b = false && true;
     System.out.println(b);
     
     // || 或者    如果前边是true ,后面就不再验证了
     b = true || false;
     System.out.println(b);
    }
    
  4. 注释事项

    • 短路与和短路或运算符前后是否都执行, 主要看第一个条件

总结:

  1. 常量
    • 我们日常生活中的具体意义的符号
    • 整数型常量 小数型常量 字符型常量 字符串常量 布尔型常量 空常量
  2. 变量
    • 一块可以存储常量的空间, 这块空间是有大小限制的
    • 数据类型 变量名;
  3. 使用变量的注意事项
    • 重名问题 :
      • 如果系统能区分两个名称可以使用
      • 同一个域内, 能不能使用这个变量名, 主要看有没有其他变量正在使用这个名称
    • 实际使用时,变量必须要有值
    • 一条语句中可以定义多个相同类型的变量
      • 定义变量时, 一个语句中,不能出现多个数据类型;
  4. 数据类型
    • 引用数据类型
      • 数组 类 接口 枚举 注解
    • 基本数据类型
      • byte short int long float double char boolean
  5. 数据类型转换
    • 隐式转换 小的转成大的
    • 强制转换 大的转成小, 虚拟机不会帮我们做, 我们需要手动强转
  6. char类型存储中文
    • 计算机只能使用和存储二进制, 所以, Java中有内置的编码表, 表中是字符对应着一个数值
  7. 算术运算符
    • 进行算术运算
    • + - * / % ++ --
  8. 赋值运算符
    • 将运算符右边的值赋给左边
    • =
    • 简写形式 : += -= *= /= %=
  9. 关系运算符
    • 判断符号左右两边是否依据当前符号成立
    • == != > >= < <=
  10. 逻辑运算符
    • 连接两个boolean值, 综合得出一个新的结果, 结果还是一个boolean值
    • & | ! && || ^

作业

  1. 第一题

    • 哪一句话是错误的, 为什么?
    public static void main(String[] args) {
     byte b1=3,b2=4,b;
     b=b1+b2; 
     b=3+4;
    }
    
    
  2. 第二题

    • 下面哪一话是错的, 为什么?
    public static void main(String[] args) {
     byte b = 10;
     b++;
     b = b + 1;  
    
    
  3. 第四题

    • 判断flg的结果
    public static void main(String[] args) {
     boolean flg = false | (true & (false^true));
    }
    
    
  4. 扩展题

    • 求出 j 的结果 , 写出运算步骤
    public static void main(String[] args) {
     int i=3,j;   
     
     j=(i++)+(i++)+(++i);
     
     System.out.println(j);
    }
    
    
  5. 扩展题

    • 思考, java中域的域嵌套的情况下, 变量的重名问题? 哪些是可以使用相同变量名的,哪些是不能使用相同变量名的 ?
上一篇下一篇

猜你喜欢

热点阅读