Day02

作者: 拼搏男孩 | 来源:发表于2019-11-25 08:06 被阅读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. 基本数据类型
    基本数据类型的长度
    • char 占两个字节 0~65535(没有负数)
    • boolean 理论上是占八分之一个字节
    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中域的域嵌套的情况下, 变量的重名问题? 哪些是可以使用相同变量名的,哪些是不能使用相同变量名的 ?

    相关文章

      网友评论

          本文标题:Day02

          本文链接:https://www.haomeiwen.com/subject/oiboictx.html