part02——数据类型、运算符

YangeIT大约 24 分钟Java基础入门数据类型类型转换运算符三元运算自增自减Scanner

part02——数据类型、运算符

小伙伴们,又是元气满满的一天,今天继续开干!!!

今日目标

  1. 数据类型 🍐
  2. 数据类型转换 🍐
  3. 运算符 ✏️
    • 加减乘除
    • 大于等于小于
    • 真假
    • 三元运算符

知识储备

  1. 知道24小时为一天,7天为一周,30天为一月,365天为一年进制
  2. 观察过点灯开关的,开和关的状态二进制
  3. 观察过过超市货架上的价格,有零有整数字表示
  4. 知道加减乘除、大于小于等于等运算
  5. 完成了Day01的编程作业题
  6. 认识26个英文字母open in new window

因为java是使用英文进行编写,因此难免会使用单词,常见的单词表open in new window

Hello,各位小伙伴大家好,欢迎来到Java的世界,咱们正式开干!!!

一、数据的表示详解 🚀

变量可以用来记录数据,那么数据在计算机底层是以什么形式表示的呢?

1.1 整数在计算机中的存储原理 🚀

整数在计算机中的存储原理

任何数据在计算机中都是以二进制 表示的 二进制其实就是一种数据的表示形式,它的特点是逢2进1

数据的表示形式除了二进制(逢2进1),八进制(逢8进1)、还有十进制(逢10进1)、十六进制(逢16进1)等。

⚠️ 思考:周,月,年是什么进制?

二进制如何转成十进制?

  1. 二进制中只有0和1两个数
    • 那么二进制是如何表示十进制的2呢?
    • 那么二进制是如何表示十进制的3呢?
    • 那么二进制是如何表示十进制4的呢?

⚠️ 你找到规律了吗? 你能不能依次写出5的二进制、6的二进制? 二进制数据都是采用+1的方式,逢2进1

在线计算器open in new window🔢 验证一下二进制转换

十进制如何转成二进制?

除2取余法 👈

  1. 把十进制6转换为二进制?
  2. 把十进制13转换为二进制?
  3. 把十进制7转换为二进制吗?
点击查看解析
1. 怎么做呢?
	答:让十进制数据连续除以2,直到商为0,余数反转

2. 举例1:把十进制6转换为二进制	
      商 余数
6/2   3  0
3/2		1	 1
1/2		0	 1
然后把余数反转:6对应的二进制是110
    
3.举例2: 把十进制13转换为二进制
        商	余数
13/2   6    1
6/2    3    0
3/2    1    1
1/2    0    1
然后把余数反转:10对应的二进制是1101
    



 






 







 



请问66在计算机中是以什么进制存储的?

  • 计算机的最小存储单位

计算机中最小的存储单位是字节(Byte),一个字节占8位(bit),也就是说即使这个数据不足8位也需要用8位来存储。

image 随便找到一个文件,看文件的属性,可以看到文件的大小都是以字节为单位的。

1660754762466
1660754762466

总结

课堂作业

  1. 你能把十进制7转换为二进制吗?自己试试吧!
  2. 找到电脑中任意的一个文件,右击查看属性,观察大小,是几个字节?

1024字节Byte=1KB,1024KB=1MB

1.2 字符在计算机中的存储原理 🚀

字符并不是直接存储的,而是把每一个字符编为一个整数,存储的是字符对应整数的二进制形式。

美国人搞了一套字符和整数的对应关系表,叫做ASCII编码表,类似一本字典open in new window

1660755324089
1660755324089
ASCII编码表中字符编码的规律:
	1.字符0对应48,后面的1,2,3,4...9 对应的十进制整数依次往后顺延
	2.字符a对应97,后面的b,c,d,e...z 对应的十进制整数依次往后顺延
	3.字符A对应65,后面的B,C,D,E...Z 对应的十进制整数依次往后顺延

需要注意的是,在ASCII编码表中是不包含汉字的。汉字在其他编码表中,后面我们会单独介绍。

总结

课堂作业

  1. 找一找ASCII编码表大写的G对应的十进制是多少尼?🎤

1.3 图片视频声音的存储原理 🚀

图片视频声音的存储原理

  • 图片的存储

  • 从图片开始,如果你把一张图片不断的放大,你会看到有马赛克的效果。

    • 你会发现图片中的每一个细节是由一个一个的小方格组成的,每一个小方格中其实就是一种颜色。
    • 任何一种颜色可以使用三原色来表示,简称RGBopen in new window,其中R(红色),G(绿色),B(蓝色),而RGB中每一种颜色又用一个字节的整数来表示,最小值是0最大值是255
1660755882309
1660755882309
RGB0,0,0)表示黑色
RGB255,255,255)表示白色
RGB255,0,0) 表示红色
RGB255,255,0) 表示红色和绿色混合为黄色
RGB255,0,255) 表示红色和蓝色混合为紫色
...

一张图片实际上就是有很多个小方块的颜色组成的,而每一种颜色又是由RGB三原色的整数表示的,整数最终会转换为二进制进行存储。

在线颜色选择器open in new window 打开这网站试试!!找到绿色,看对应的RGB值为多少?🚩

总结

课堂作业

  1. 点击在线颜色选择器网站open in new window,选出你最喜欢的颜色,观察他的RGB表示法,截图或者复制值放到飞秋群里🎤

1.4 不同进制在Java程序中的书写格式 🚀

提示

  1. 0b 二进制。为了便于区分进制设定标准标识符,0b开头代表二进制,例如0b110,
  2. 整数 代表十进制,例如110
  3. 0x 开头代表十六进制。例如0x110
System.out.println('a'+1); //98
System.out.println(0b110); //控制台输出多少?
System.out.println(110); //控制台输出多少?
System.out.println(0x110); //控制台输出多少?

二、数据类型详解 🍐 ❤️

数据类型详解

int money = 10000; //基本数据类型
String name="hanli"; //引用数据类型

Java的数据类型整体上来说分为两大类: 基本数据类型引用数据类型

今天主要学习基本数据类型🎯,基本数据类型一共有4类8种

每一种数据类型占用的内存空间不一样,能够表示的数据范围也不一样。如下图所示

1660832924103
1660832924103

随便写一个整数或者小数的字面量,它也是有默认数据类型的

  • 比如23,它默认就为int类型;如果加上后缀L,则为long类型;---> 23L
  • 比如23.8,它默认为double类型 ;如果加上后缀F,则为float类型;---> 23.8F

练习一下4类8种基本数据类型 ✏️ 👇

public class TypeDemo1 {
    public static void main(String[] args) {
        // 目标:掌握8种基本数据类型,用来定义变量。
        // 1、整型
        byte number = 98;
        System.out.println(number);

        short number2 = 9000;

        int number3 = 12323232; // 默认

        // 注意:随便写一个整型字面量,默认是int类型的,73642422442424虽然没有超过long的范围,但是它超过了本身int的范围了。
        // 如果希望随便写一个整型字面量是long类型的,需要在其后面加上L/l
        long number4 = 73642422442424L;

        // 2、浮点型
        //注意:
        //随便写一个小数字面量,默认当成double类型对待的,
        //如果希望这个小数是float类型的,需要在后面加上:F/f
        float score1 = 99.5F;
        double score2 = 99.8; // 默认定义方案。

        // 3、字符型
        char ch1 = 'a';
        char ch2 = '中';
        char ch3 = '国';

        // 4、布尔型
        boolean b1 = true;
        boolean b2 = false;

        // 引用数据类型:String.
        // String代表的是字符串类型,定义的变量可以用来记住字符串。
        String name = "黑马";
        System.out.println(name);
    }
}

总结

课堂作业

  1. 在main方法中 定义如下类型吧,并通过sout打印出来
    • 年龄 age:18岁
    • 银行余额 money:1个小目标
    • 2024年生肖:龙
    • 布尔 b1:true b2:false
    • 品牌名字 name:黑马程序员

三、数据类型转换 🍐 🚀

数据类型转换

问题

问题1: byte a=12; int b=a; 请问会报错吗?

问题2: int a = 666; byte b=a; 会报错吗?

类型转换的形式总体分为2种,一种是自动类型转换,一种是强制类型转换

3.1 自动类型转换

  • 1. 什么是自动类型转换呢?
答:自动类型转换指的是,数据范围小的变量可以直接赋值给数据范围大的变量
	byte a = 12; 
	int b = a; //这里就发生了自动类型转换(把byte类型转换int类型)
  • 2. 自动类型转换的原理是怎样的?

自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节 1660837214161 除了byte和int之间的转换之外,其他类型也可以转换,转换顺序如下图所示 ❤️ 1660837456261

下面我们通过代码演示一下,自动类型转换的各种形式。

public class TypeConversionDemo1 {
    public static void main(String[] args) {
        // 目标:理解自动类型转换机制。
        byte a = 12;
        int b = a; // 发生了自动类型转换了
        System.out.println(a);
        System.out.println(b);

        int c = 100; // 4
        double d = c;// 8 发生了自动类型转换了
        System.out.println(d);

        char ch = 'a'; // 'a' 97 => 00000000 01100001
        int i = ch; // 发生了自动类型转换了 =>  00000000 00000000  00000000 01100001
        System.out.println(i);
    }
}

表达式的自动类型转换

如果同一个表达式中,出现不同类型的变量或者数据一起运算,这种情况下运算结果是一个什么数据类型呢?需要遵守下面的两条运算规则:

例如:
int a=1; double b=3.12; byte c=2;
a+b+c=什么类型?

1.多种数据类型参与运算,其结果以大的数据类型为准
2.byte,short,char 三种类型数据在和其他类型数据运算时,都会转换为int类型再运算

接下来我们来看代码演示,自己试一试 👇

public class TypeConversionDemo2 {
    public static void main(String[] args) {
        // 目标:掌握表达式的自动类型转换机制。
        byte a = 10;
        int b = 20;
        long c = 30;
        long rs = a + b + c;
        System.out.println(rs);

        double rs2 = a + b + 1.0;
        System.out.println(rs2);
		
        byte i = 10;
        short j = 30;
        int rs3 = i + j;
        System.out.println(rs3);

        // 面试笔试题: 即使两个byte运算,结果也会提升为int
        byte b1 = 110;
        byte b2 = 80;
        int b3 = b1 + b2;
        System.out.println(b3);
    }
}

总结

课堂作业

自动类型转换作业:

byte a = 10;
int b = 20;
long c = 30l;
a + b + c 可以用什么类型接收?

byte b3 = 44;
byte b4 = 80;
 // byte b5=b3+b4//报错了会报错吗,为什么?
//  b3 + b4可以用什么类型接收


String b4 = " " + 1+ 2; 
System.out.println(b4);// 输出多少? 为什么?
String b5 = 1+ 2+ " ";
System.out.println(b5);//这个结果是多少 为什么?

自动类型转换作业:

  1. 定义一个 int c =189,赋值给 byte d,观察是否成功?如果失败,有什么解决方案?

四、运算符 🍐 ❤️ ✏️✏️

接下来,给同学们讲解一个在开发中用得很多的一块内容,叫做运算符image

运算符

大家知道计算机是用来处理数据的,处理数据就少不了对数据的计算,想要对数据进行计算就必须用到运算符。

运算符就是参与运算的符号。Java提供的运算符有很多种:

  • 基本算术运算符
  • 自增自减运算符
  • 赋值运算符
  • 关系运算符
  • 逻辑运算符
  • 三元运算符

3.1 算术运算符

先从最基本的算术运算符开始学习,算术运算符有 + - * / % ,其中*表示乘法,/表示除法,%表示取余数

需要我们注意以下几点

/: 两个整数相除,结果也是一个整数
%: 表示两个数相除,取余数
1660841349983
1660841349983

需要我们注意的是:+符号除了用于加法运算,还可以作为连接符。+符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串

下面通过代码演示一下各种算术运算符的运算效果

/**
 * 掌握基本的算术运算符
 */
public class Demo6 {
    public static void main(String[] args) {
        // 目标:掌握基本的算术运算符的使用。
        int a = 10;
        int b = 2;
        System.out.println(a + b);//12
        System.out.println(a - b);//8
        System.out.println(a * b); // 20
        System.out.println(a / b); // 5
        System.out.println(5 / 2); // 2.5 ==> 2
        System.out.println(5.0 / 2); // 2.5
        int i = 5;
        int j = 2;
        System.out.println(1.0 * i / j); // 2.5 思考:为什么要乘以1.0?

        System.out.println(a % b); // 0
        System.out.println(3 % 2); // 1

        System.out.println("---------------------------------------");

        // 目标2:掌握使用+符号做连接符的情况。
        byte b1 = 10;
        byte b2 = 80;
        String b4 = " " + b1 + b2; //运算是赋值符号 = 左边到右边
        System.out.println(b4);// 1080--> 10拼上80
        String b5 = b1 + b2 + " ";
        System.out.println(b5);//这个结果是多少 提示:运算是 = 左边到右边   结果--->90
        System.out.println(b1+'a'+"");//这个结果是多少  提示:字符本质是数字
    }
}

总结

课堂作业

  1. 基本算术运算符,自增自减运算符,赋值运算符练习

编写程序,算出下列题目:

定义:int a=44 ; int b=2;
 1.1 算出:a*b  a-b  a/b  a+b的结果
 1.2 算出:a++  b--  --b  --a的结果
 1.3 算出:a+=b  a的值是多少

  1. 参考上述关系运算符、逻辑运算符、三元运算符、运算优先级案例,练习

求出下列的结果,掌握关系运算符和逻辑运算符的知识

boolean flag1 = (3 < 5) && (5 > 7);
boolean flag2 = (3 < 5) || (5 > 7);
boolean flag3 = !(7 != 7);
System.out.println("flag1的值是:" + flag1);
System.out.println("flag2的值是:" + flag2);
System.out.println("flag3的值是:" + flag3);

完成最小值的求出,掌握三元表达式的知识理解

public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int min = _________; 				
    System.out.println("最小值:"+ min);  
}

五:获取用户键盘输入的数据 ✏️

获取用户键盘输入的数据

说明

讲一个案例技术,这个技术现在其实有一些超前,因为需要用到后面学习的知识。但是在这里讲可以让我们的学习体验度更好一点,前面案例中参与运算的数据都是在程序中写死的,下面我们想让自己键盘录入数据,然后参与程序的运行。

键盘录入这个事情,其实并不是我们自己做的,而是Java本身就提供了这样的功能,我们按照它的要求,去调用就行。

我们在安装JDK的时候,其实JDK中就已经包含了一些Java写好的代码,我们把Java写好的代码直接拿过来用就行。

比如:

Scanner就是Java提供给我们用于键盘录入数据的类,为了录入不同类型的数据,还提供了不同的功能,每一个功能会有不同的名称, 我们只需要调用Scanner提供的功能就可以完成键盘录入数据

代码如下:

public class ScannerDemo1 {
    public static void main(String[] args) {
        // 1、导包:一般不需要我们自己做,idea工具会自动帮助我们 导包的。
        // 2、抄写代码:得到一个键盘扫描器对象(东西)---- 先写new Scan 然后自动提示 
        Scanner sc = new Scanner(System.in);

        // 3、开始 调用sc的功能,来接收用户键盘输入的数据。
        System.out.println("请您输入您的年龄:");
        int age = sc.nextInt(); // 执行到这儿,会开始等待用户输入一个整数,直到用户按了回车键,才会拿到数据。
        System.out.println("您的年龄是:"  + age);

        System.out.println("请您输入您的名字:");
        String name = sc.next(); // 执行到这儿,会开始等待用户输入一个字符串,直到用户按了回车键,才会拿到数据。
        System.out.println(name + "欢迎您进入系统~~");
    }
}

小伙伴注意啦:充分利用Idea自动补全功能

总结

课堂作业

  1. 参考上述的Scanner练习一下,熟悉Scanner的作用🎤

到此,恭喜小伙伴们,今天所有的内容就学习完了,加油奥利给!!!🎉


来做点作业巩固一下吧!!!✏️ 💪