无法将类型“void”隐式转换为“byte[]_Java SE学习第二天 数据类型

一. 常量

  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) {//定义一个整数型变量iint 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中数据类型的分类

  • 基本数据类型
  • 引用数据类型(面向对象部分讲解)
3962aa6f260bfc5b7927e30ea4fbfab9.png

3.基本数据类型

6108fe61235594a36ebb08ce00649154.png
  • char 占两个字节 0~65535(没有负数)
  • boolean 理论上是占八分之一个字节

4.注意事项

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

5.演示

public static void main(String[] args) {//定义byte型变量bbyte b = 4;System.out.println(b);//定义 short型变量 sshort s = 10;System.out.println(s);//定义int型变量iint i = 10;System.out.println(i);//定义long型变量 llong l = 100;System.out.println(l);//定义 float型变量 ffloat f = 1.0f;System.out.println(f);//定义double型变量ddouble d = 2.0;System.out.println(d);//定义boolean型变量bboolean flg = true;System.out.println(flg);//定义char型变量chchar 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型转换成byteb = (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++;c = --a;b = a--;System.out.println(a);System.out.println(b);System.out.println(c);}

预测结果

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

4.注意事项

  • 一个数异或同一个数两次,结果还是本身

5.测试题

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

十二. 三元运算符

  1. 格式
  • boolean ? 结果1 : 结果2;
  • boolean为true,返回结果1,否则返回结果2

2.演示

  • 获取两个数中最大的值
public static void main(String[] args) {int a = 10;int b = 20;//如果a大于b的话,结果为真,就返回aint max = a > b ? a : b;System.out.println(max);}

十三. 从键盘获取数据

  1. 步骤
  • 导入 java.util.Scanner;
  • 创建Scanner对象 Scanner sc = new Scanner(System.in);
  • 调用nextInt()方法获取一个整数 sc.nextInt();

2.演示

//导入类import java.util.Scanner;public class TestDemo {public static void main(String[] args) {//创建键盘录入对象,打开键盘通道Scanner sc = new Scanner(System.in);//调用方法获取一个整数int i = sc.nextInt();System.out.println(i);//关闭键盘通道sc.close();}}

作业

第一题

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

第二题

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

第三题

  • 使用键盘录入三个整数, 求出三个整数中最大的那个并打印

第四题

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

扩展题

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

扩展题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值