day02数据类型

一. 常量

  1. 定义

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

    • 字面值常量
    • 自定义常量(面向对象部分再学习)
  3. 字面值常量的分类

    • 字符常量 : 用单引号括起来的内容
    • 字符串常量 : 用双引号括起来的内容
    • 整数常量 : 所有的整数
    • 小数常量 : 所有的小数
    • 布尔常量 : 比较特殊, 只有true 和 false
    • 空常量 : null(数组部分会讲到)
  4. 演示

    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. 测试题

    • 交换两个变量的值

三. 定义变量的注意事项

  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);
      }
      
  3. 一条语句可以定义多个相同类型的变量

    • 演示

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

    • 下列代码是否成立

      public static void main(String[] args) {
      	{
      		int a = 10;
      	}
      	int a = 5;
      }
      
    • 下列代码是否成立

      public static void main(String[] args) {
      	double d = 1.0;
      	System.out.println(d);
      }
      
    • 下列代码是否成立

      public static void main(String[] args) {
      	double a = 1.0 , double b = 2.0;
      }
      

四. 数据类型

  1. 定义

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

    • 基本数据类型

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

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiTbqD94-1596639270971)(java数据类型关系.png)]

  3. 基本数据类型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlpddKma-1596639270974)(基本数据类型的长度.png)]

    • char 占两个字节 0~65535(没有负数)
    • boolean 理论上是占八分之一个字节
  4. 注意事项

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

    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;
      	System.out.println(c);
      }
      
  3. 强制转换

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

    • 强制转换存在风险, 一定要确保可行再转换

    • 格式

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

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

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

    • 演示

      public static void main(String[] args) {
      	
      	byte b = 10;//数值10是int型的 没有超过byte的范围
      	
      	//这里会报错
      	byte by = 128;//数值128是int型的, 超过了byte的范围
      }
      
  5. 测试题

    • 判断下列代码是否成立

      public static void main(String[] args) {
      	int i = 100L+100;
      }
      

六. 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中没有这样的说法, 基本看不出效果. 编译器自身肯定会做优化的
  5. 测试题

    • 求 a, b, c最后的值

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

      public static void main(String[] args) {
      	int a = 1;
      	//a = a++; //temp = 1 a = 2
          int b = a++; //temp = 1 a = 2 b = 1
          a = b;
      	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 = a + 10;
      	
      	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. 定义

    • 对数值进行二进制的位运算
    • 在位运算中 0 为假, 1为真
  2. 分类

    • & : 有0则为0
    • | : 有1则为1
    • ^ : 相同为0 , 不同为1
    • ~ : 按位取反
    • >> : 有符号右移
    • << : 有符号左移
    • >>> : 无符号右移
  3. 演示

    public static void main(String[] args) {
    	
    	int a = 10; //二进制表现为 1010
    	int b = 5;  //二进制表现为 0101
    	
    	System.out.println(a&b); 
    	
    	System.out.println(a|b);
    	
    	System.out.println(a^b);
    	
    	System.out.println(~a);
    	
    	System.out.println(a>>1);//右移一位 相当于除以2
    	
    	System.out.println(a<<1);//左移一位,相当于乘以2
    	
    	System.out.println(a>>>1);//无符号位移,缺失的首位补0
    	
    }
    
  4. 注意事项

    • 一个数异或同一个数两次,结果还是本身
  5. 测试题

    • 不借助第三个变量的前提下交换两个整数变量的值

总结:

  1. 常量

    • 生活中的文字符号
  2. 变量

    • 一个可以代表不同值得符号
    • 数据类型 变量名;
    • 当要使用一个变量名的时候, 要看有没有其他变量正在使用这个名称
    • 真正使用变量的时候,这个变量必须要有值
    • 一条语句中可以定义多个相同类型的变量 (不要当傻逼)
  3. 数据类型

    • 数据类型 : 基本数据类型 引用数据类型
    • 基本数据类型 : byte short int long float double char boolean
    • byte的范围 : -128 – 127
  4. 类型转换

    • 隐式转换(小–>大) 强制转换(大–>小)
    • 如果是直接赋值的情况 (byte b = 10) ,可以
    • 强转有风险, 使用需谨慎
  5. 运算符

    • 算数 : + - * / % ++ –
    • 赋值: = += -= *= /= %=
    • 关系: == != > >= < <=
    • 逻辑: & | ! ^ && ||
    • 位运算: & | ~ ^ >> << >>>

作业

  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. 第三题

    • 使用三个整数, 求出三个整数中最大的那个并打印
  4. 第四题

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

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

    • 思考, java中域的域嵌套的情况下, 变量的重名问题? 哪些是可以使用相同变量名的,哪些是不能使用相同变量名的?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值