一、本单元知识点概述

、本单元目标

(Ⅰ)重点知识目标

1.定义出各种数据类型的变量
2.理解自动类型提升
3.理解强制类型转换

(Ⅱ)能力目标

1.能够定义出所有类型的常量
2.理解Java中的基本数据类型分类
3.能够定义8种基本数据类型的变量
4.理解数据类型的强制转换
5.理解数据类型的自动转换
6.了解ASCII编码表
7.理解int类型和char类型的运算原理

三、本单元知识详讲

2.1常量

2.1.1 概述★★

“常量”的广义概念是:‘不变化的量’(例如:在计算机程序运行时,不会被程序修改的量;数学函数中的某一个量,例如每一个具体的圆的半径、直径数值;物理学中的靠近地面的重力加速度;真空中的光速数值;不同的微粒的各自的质量)换言之,常量,在计算机技术方面虽然是为了硬件、软件、编程语言服务,但是它并不是专门为硬件、软件、编程语言而引入的概念。

2.1.2 什么是常量★★

常量:是指在Java程序中固定不变的数据。

2.1.3 常量的分类★★

类型 含义 数据举例
整数常量 所有的整数 0,1, 567, -9
小数常量 所有的小数 0.0, -0.1, 2.55
字符常量 单引号引起来,只能写一个字符,必须有内容 'a' , ' ', '好'
字符串常量 双引号引起来,可以写多个字符,也可以不写 "A" ,"Hello" ,"你好" ,""
布尔常量 只有两个值(流程控制中讲解) true,false
空常量 只有一个值(引用数据类型中讲解) null

2.1.4 常量的案例讲解★★

需求:输出各种类型的常量

  1. 1 public class ConstantDemo {
  2. 2 public static void main(String[] args){
  3. 3 //输出整数常量
  4. 4 System.out.println(123);
  5. 5 //输出小数常量
  6. 6 System.out.println(0.125);
  7. 7 //输出字符常量
  8. 8 System.out.println('A');
  9. 9 //输出布尔常量
  10. 10 System.out.println(true);
  11. 11 //输出字符串常量
  12. 12 System.out.println("你好Java");
  13. 13 }
  14. 14 }

2.2 变量和数据类型

2.2.1 数据类型★★★★

java语言是强类型的语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。

2.2.2 数据类型分类★★★

Java的数据类型分为两大类:

  • 基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔 。

  • 引用数据类型:包括 类 、 数组 、 接口 。

2.2.3 基本数据类型★★★

四类八种基本数据类型:

数据类型 关键字 内存占用 取值范围
字节型 byte 1个字节 -128~127
短整型 short 2个字节 -32768~32767
整型 int(默认) 4个字节 -2的31次方~231次方-1
长整型 long 8个字节 -2的63次方~2的63次方-1
单精度浮点数 float 4个字节 1.4013E-45~3.4028E+38
双精度浮点数 double(默认) 8个字节 4.9E-324~1.7977E+308
字符型 char 2个字节 0-65535
布尔类型 boolean 1个字节 true,false
  • Java中的默认类型:整数类型是 int 、浮点类型是 double 。

2.2.4 变量的概述★★

变量:常量是固定不变的数据,那么在程序中可以变化的量称为变量。

数学中,可以使用字母代替数字运算,例如 x=1+5 或者 6=x+5。

程序中,可以使用字母保存数字的方式进行运算,提高计算能力,可以解决更多的问题。比如x保存5,x也可以保存6,这样x保存的数据是可以改变的,也就是我们所讲解的变量。

Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。

2.2.5 什么是变量★★★★

java变量的定义:在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值

2.2.6 变量的定义★★★

  • 变量定义的格式包括三个要素: 数据类型 、 变量名 、 数据值 。

2.2.7 定义变量的格式★★★★

格式:数据类型 变量名 = 数据值

  1. 1 public class VariableDemo {
  2. 2 public static void main(String[] args){
  3. 3 //定义整型变量
  4. 4 int a = 1;
  5. 5 //定义单精度浮点型变量
  6. 6 float f = 12.56F;
  7. 7 //定义boolean变量
  8. 8 boolean b = false;
  9. 9 //定义字符变量
  10. 10 char ch = 'c';
  11. 11
  12. 12 }
  13. 13 }

2.2.8 定义变量的练习★★★★

定义所有基本数据类型的变量,代码如下:

  1. 1 public class Variable {
  2. 2 public static void main(String[] args){
  3. 3 //定义字节型变量
  4. 4 byte b = 100;
  5. 5 System.out.println(b);
  6. 6 //定义短整型变量
  7. 7 short s = 1000;
  8. 8 System.out.println(s);
  9. 9 //定义整型变量
  10. 10 int i = 123456;
  11. 11 System.out.println(i);
  12. 12 //定义长整型变量
  13. 13 long l = 12345678900L;
  14. 14 System.out.println(l);
  15. 15 //定义单精度浮点型变量
  16. 16 float f = 5.5F;
  17. 17 System.out.println(f);
  18. 18 //定义双精度浮点型变量
  19. 19 double d = 8.5;
  20. 20 System.out.println(d);
  21. 21 //定义布尔型变量
  22. 22 boolean bool = false;
  23. 23 System.out.println(bool);
  24. 24 //定义字符型变量
  25. 25 char c = 'A';
  26. 26 System.out.println(c);
  27. 27 }
  28. 28 }
  • long类型:建议数据后加L表示。

  • float类型:建议数据后加F表示。

2.2.9 定义变量的注意事项★★★

  • 变量名称:在同一个大括号范围内,变量的名字不可以相同。

  • 变量赋值:定义的变量,不赋值不能使用。

2.3 数据类型转换

2.3.1 自动转换原理图解★★★

Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。

一个 int 类型变量和一个 byte 类型变量进行加法运算, 结果会是什么数据类型?

  1. 1 int i = 1;
  2. 2 byte b = 2;
  3. 3 int j = b + i;

运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。

自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型

  1. 1 public static void main(String[] args) {
  2. 2 int i = 1;
  3. 3 byte b = 2;
  4. 4 // byte x = b + i; // 报错
  5. 5 //int类型和byte类型运算,结果是int类型
  6. 6 int j = b + i;
  7. 7 System.out.println(j);
  8. 8 }

转换的原理图解:

byte 类型内存占有1个字节,在和 int 类型运算时会提升为 int 类型 ,自动补充3个字节,因此计算后的结果还是 int 类 型。

同样道理,当一个 int 类型变量和一个 double 变量运算时, int 类型将会自动提升为 double 类型进行运算。

  1. 1 public static void main(String[] args) {
  2. 2 int i = 1;
  3. 3 double d = 2.5;
  4. 4 //int类型和double类型运算,结果是double类型
  5. 5 //int类型会提升为double类型
  6. 6 double e = d+i;
  7. 7 System.out.println(e);
  8. 8 }

2.3.2 转换规则★★★

范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int

  1. 1 byteshortchar‐‐>int‐‐>long‐‐>float‐‐>double

2.3.3 强制转换原理图解★★★★

将 1.5 赋值到 int 类型变量会发生什么?产生编译失败,肯定无法赋值。

  1. 1 int i = 1.5;//错误

double 类型内存8个字节, int 类型内存4个字节。 1.5 是 double 类型,取值范围大于 int 。可以理解为 double 是8 升的水壶, int 是4升的水壶,不能把大水壶中的水直接放进小水壶去。

想要赋值成功,只有通过强制类型转换,将 double 类型强制转换成 int 类型才能赋值。

强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。

比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。

转换格式:

  1. 数据类型 变量名 = (数据类型)被转数据值;

将 1.5 赋值到 int 类型,代码修改为:

  1. 1 // double类型数据强制转成int类型,直接去掉小数点。
  2. 2 int i = (int)1.5;

同样道理,当一个 short 类型与 1 相加,我们知道会类型提升,但是还想给结果赋值给short类型变量,就需要强制转换。

  1. 1 public static void main(String[] args) {
  2. 2 //short类型变量,内存中2个字节
  3. 3 short s = 1;
  4. 4 /*出现编译失败 s和1做运算的时候,1是int类型,s会被提升为int类型 s+1后的结果是int类型,将结果在赋值 会short类型时发生错误 short内存2个字节,int类型4个字节 必须将int强制转成short才能完成赋值 */
  5. 5 s = s + 1//编译失败
  6. 6 s = (short)(s+1);//编译成功
  7. 7 }

转换原理图解:

2.3.4 强烈注意★★★★

  • 浮点转成整数,直接取消小数点,可能造成数据损失精度。

  • int 强制转成 short 砍掉2个字节,可能造成数据丢失。

  1. 1 // 定义s为short范围内最大值
  2. 2 short s = 32767;
  3. 3 // 运算后,强制转换,砍掉2个字节后会出现不确定的结果
  4. 4 s = (short)(s + 10);

2.3.5 编码表★★★

  1. 1 public static void main(String[] args) {
  2. 2 //字符类型变量
  3. 3 char c = 'a';
  4. 4 int i = 1; //字符类型和int类型计算
  5. 5 System.out.println(c+i);//输出结果是98
  6. 6 }

在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别文字的问题呢?就产生出了编码表的概念。

编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。

人们就规定:

字符 数值
0 48
9 57
A 65
Z 90
a 97
z 122
  • 将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII

(American Standard Code for Information Interchange 美国标准信息交换码)。

  • 在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。


四、本单元知识总结

1.常量和变量的定义
2.java中数据类型的分类
3.自动类型提升
4.强制类型转换

🤩全套Java教程_Java基础入门教程,零基础小白自学Java必备教程👻002 # 第二单元 常量,变量,数据类型 #的更多相关文章

  1. 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  2. PHP开发人员对JAVA的WEB开发入门(初版-基础知识)

    最近准备对其他部门PHP开发的童鞋做一个对JAVA的培训.知己知彼,百战不殆,我要先了解点PHP,才能确认他们的基础,达到好的授课效果. PHP(原始为Personal Home Page的缩写,后正 ...

  3. ☠全套Java教程_Java基础入门教程,零基础小白自学Java必备教程👾#010 #第十单元 Scanner类、Random类 #

    一.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.API的使用2.Scanner类的使用步骤3.Random类的使用 (Ⅱ)能力目标 1.掌握API的使用步骤2.使用 ...

  4. 全套Java教程_Java基础入门教程,零基础小白自学Java必备教程 #011 # 第十一单元 String&ArrayList #

    一.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.ArrayList集合的常用方法2.ArrayList存储数据和遍历数据3.String类的构造方法4.String ...

  5. 🧚‍♂️全套Java教程_Java基础入门教程,零基础小白自学Java必备教程👨‍💻004 # 第四单元 流程控制语句上 #

    一.本单元知识点概述 二.本单元目标 (Ⅰ)重点知识目标 1.if语句的格式及执行流程2.switch语句的格式及执行流程 (Ⅱ)能力目标 1.掌握if语句的格式及执行流程2.掌握switch语句的格 ...

  6. 🚴‍♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#

    二.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.Mysql的数据类型2.如何选择数据类型3.创建表4.修改表5.删除表 (Ⅱ)能力目标 1.熟练创建数据库及删除数据 ...

  7. Java学习_Java快速入门

    Java简介 安装完JDK后,需要设置一个JAVA_HOME的环境变量,它指向JDK的安装目录.在Windows下,它是安装目录,类似: C:\Program Files\Java\jdk-15 把J ...

  8. python基础入门之函数基础

    **python函数**一.def语名 def语名在运行的时候创建一个新的函数对象并且赋值一个变量名 一个def语句可以出现在任一语句可以出现的地方(python中所有的语名都是实时运行的,没有编译这 ...

  9. Asky极简教程:零基础1小时学编程,已更新前8节

    Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...

随机推荐

  1. MATLAB批量存储图像和显示算法处理的图像不留空白

    一 前言 最近收到审稿人的修改意见,其中一条为<RC: There were only five images evaluated in the experiment, and I recomm ...

  2. MySQL约束条件 表关系建立 查询数据

    约束条件 unsigned 无符号 即为非负数,用此类型可以增加数据长度 例如 tinyint最大范围是127,那tinyint unsigned 最大就可以到 127 * 2 通常用在不会出现符号的 ...

  3. 题解—P2511 [HAOI2008]木棍分割

    这道题第一眼直接一个二分板子把第一问解决掉,然后主要是统计方案. 其实这个方程还不算难推,只要推出来朴素 \(dp\) ,之后的一步一步也很顺理成章,所以这种题主要看能不能静下心来慢慢做. solut ...

  4. SpringBoot快速入门(二)

    2.SpringBoot原理分析 2.1.SpringBoot自动配置 Condition Condition 是在Spring 4.0 增加的条件判断功能,通过这个可以功能可以实现选择性的创建 Be ...

  5. C#多线程---Mutex类实现线程同步

    一.例子 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 ...

  6. freeswitch新增模块API

    概述 上一章我们讲解了freeswitch的源码基本结构,以及如何新增一个插件式模块. freeswitch的架构非常适合这种业务开发模式,即以freeswitch的基本功能为开发平台,新增插件式模块 ...

  7. Spring事物入门简介及AOP陷阱分析

    转载请注明出处: https://www.cnblogs.com/qnlcy/p/15237377.html 一.事务的定义 事务(Transaction),是指访问并可能更新数据库中各种数据项的一个 ...

  8. 10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)

    前言 NuGet就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),以及一个用于存储所有包的中心库. 对于一个现代 ...

  9. MySQL实战45讲(10--15)-笔记

    11 | 怎么给字符串字段加索引? 维护一个支持邮箱登录的系统,用户表是这么定义的: mysql> create table SUser( ID bigint unsigned primary ...

  10. 使用ogr裁剪矢量数据

    使用ogr裁剪矢量数据 由来: ​ 近期有个需求,内容是这样的:我们有两个矢量数据,现在要求以一个矢量文件为底板,按字段对另一个矢量文件进行分割,生成若干小的shpfile文件 分析: ​ 经过分析之 ...