第二章:Java数据类型和变量

1.java 的内存划分

1.1 内存空间

java 定义了 8 中基本数据类型和引用数据类型(JDK 预定义的引用数据类型和自定义的引用数据类型),java 程序的执行会将内存划分为栈空间和堆空间
image-20210119135449472

1.2 栈空间

自动分配,不需要程序员去申请

1.栈空间存取数据的效率高。

2.栈中的数据按“先进后出”的方式管理。

3.栈空间存储空间较小,不能存放大量的数据。

4.JVM 将基本类型的数据存放在栈空间。

1.3 堆空间

需要程序员去申请

1、堆空间存取数据的效率最低;

2、数据存放的位置随机分配;

3、堆空间存储数据的空间大,能存放大容量的数据。

2. 变量

在高级语言中普遍使用变量来管理内存中的数据

2.1 变量和字面量

在高级语言中普遍使用变量来管理内存中的数据

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

代码解析:
1) i:表示变量,可变的量;
2) 100:字面量,变量中存放的具体数据;

2.2 变量的命名

(1)首字母是英文字母、$或下划线,后面由字母、数字、 $、下划线组成;

(2)变量的命名遵循见名知义的原则。

String name = “jack”; //姓名
int age = 25; //年龄

(3)Java 变量名建议不用中文。 (使用中文并没有语法错误)

(4)变量名首字母建议不用大写字母。

(5)用驼峰命名法命名多个单词组成的变量名。

String userName = “admin”;

(6)变量名不能使用关键字

在这里插入图片描述

2.3 注意点

(1)true、false 和 null 为小写,而不是象在 C++语言中那样为大写。

(2)无 sizeof 运算符,因为所有数据类型的长度和表示是固定的,与平台无关,不是象在 C 语言中那样数据类型的长度根据不同的平台而变化。这正是 Java 语言的一大特点。

(3)goto(保留字)和 const 不是 Java 编程语言中使用的关键字。

2.4变量的定义

类型 变量名 1,变量名 2…变量名 n;

int a,b,c;

2.5.变量的初始化

变量名=字面量
字面量可以是具体数值,也可以是返回数组的表达式;

2.6 变量的作用域

1、 Java 用一对大括号作为语句块的范围,称为作用域。
2、作用域中的变量不能重复定义。
3、离开作用域,变量所分配的内存空间将被 JVM(GC 垃圾会是机制)回收。

3. 数据类型-基本数据类型

学习Tips:可以将基本数据类型理解为一个个已经有固定大小的盒子,而 JAVA 程序在执行的过程中需要将用的数据存放在指定的大小的盒子中。

3.1 整数型

在这里插入图片描述
PS:在给 long 类型赋值的时候,如果值大于 2^31-1,那么需要在字面量后面加上 L,不区分大小写,因为 java中默认将输出作为 int 类型来计算。

3.2 浮点型

1)浮点类型用于表示小数的数据类型。

2)浮点数原理:也就是二进制科学计数法。

3)Java 的浮点类型有 float 和 double 两种。

4)Java 默认浮点类型计算的结果是 double 类型,字面量也是 double 类型。

3.2.1 float:单精度浮点型

1)float 类型共 32 位,1 位为符号位, 指数 8 位, 尾数 23 位。

2)float 的精度是 23 位(即能精确表达 23 位的数,超过就被截取了)。

3)小数是以尾数长度来表示精确度的,比如 pi=3.1415 的精度是 4 位。

4)float 存储数据的范围大于 int 类型,但精度比 int 要小,因为 int 的精度是 31 位。

5)浮点型的取值范围:

System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);

6)定义浮点型并初始化,字面量后面需要加上 F,不区分大小写

float f = 10.98f;

3.2.2 double:双精度浮点

1)double 类型,1 位符号位,11 位指数,52 位尾数。

2)double 范围远远大于 long,但 double 精度不如 long。 3)定义 double 类型并初始化,字面量需要加上 D,不区分大小写

double d = 98.99d;

PS:注:浮点运算就是实数运算,由于计算机只能存储整数,所以实数都是约数,这样浮点运算是很慢的而且会有误差。

3.3 字符型:char

1)char 类型的字面量可以是一个英文字母、字符或一个汉字,并且由单引号包括。

2)Java 底层使用一个 16 位的整数来处理字符类型,该数值是一个字符的 unicode 编码值。

3)unicode

a、unicode 编码是全球范围内的编码方法。

b、unicode 编码的英文部分与 ASCII 码兼容(ASCII 表示范围 0~128), 同时英文字符和数字是连续编码的。

c、Java 在处理 char 类型的数据时,在底层是按 unicode 码来处理的。

d、编码是什么?计算机硬件系统只能用 0 和 1 表示数,我们人为地做了规定,某个数还可以表示一个字符。

例如:65 代表的字符是 A

4)转义字符:”\”

转义字符是”\”,通过转义字符,可表示一些特殊的字符。 或者将本身具有特殊含义的字符的特殊含义取消。例如:

'\n' 表示回车
'\t' 表示制表位字符,一个制表符表示向右跳 8-10 个字符
'\\' 表示\ '\' ' 表示单引号
'\"' 表示双引号

3.4 布尔型:boolean

1、什么是布尔类型 : boolean 类型用来表示肯定或否定两种可能。
2、为什么使用布尔类型? 布尔类型常用在分支语句、循环语句中。
3、boolean 类型的值有两个: true:表示肯定意义;false:表示否定意义;
4、布尔变量的定义 boolean isPass;
5、布尔变量的初始化 boolean isPass=true; isPass=59>=60;

4. 基本数据类型转换

4.1小类型向大类型的转换

  1. 小类型向大类型的转换会自动完成,即不需要程序员编写额外的代码,由 JVM 负责。提示:自动类型转换也叫"隐式类型转换"。

  2. 自动转换的规则:符号位会自动扩展, 负数补 1, 正数补 0。

  3. 自动类型转换包含以下情况:

(1)byte->short->int->long->float->double

(2)int 和 char 类型的数据在某些情况下可以自动相互转换。

PS:小类型向大类型转换一般情况下是安全的。当小类型的精度高于大类型时要注意精度丢失的隐患。

int i = 0x10000001;
float f = i;
System.out.println(i);// 268435457
System.out.println(f);// 2.68435456E8

4.2 大类型向小类型的转换

1、强转类型转换-简称强转

2、强制类型转换时,要注意边界数风险问题

int i =129;
byte b = (byte) i;
System.out.println(i); //129
System.out.println(b); //-127

4.3 int 和 char 类型之间的转换

Java 对 char 类型的数据在底层是按 int 类型来处理的。

int——>char

int i =97;
char c = (char) i;
System.out.println(i);//97
System.out.println(c);//a

char——>int

char c = 'A';
int i = c;
System.out.println(c);//A
System.out.println(i);//65

字符型进行计算:

char c = 'A';
System.out.println(c+1);//66

5. java 的错误类型

1)编译期错误 : 一般指语法错误,IDEA可以方便的定位和帮助解决错误;

2)运行期的异常错误 : 系统会提示错误的类型和出错的位置;

3)逻辑错误 : 逻辑错误是指程序可以编译运行,但程序执行的结果却不是预期的效果。

金无足赤,人无完人。

猜你喜欢

转载自blog.csdn.net/qq_42257666/article/details/113041312