第一节 变量
一、计算机内存
1.内存的作用
内存的作用主要是用来平衡CPU的处理速度和硬盘的读取速度。一块正常的机械硬盘连续读取速度是100M/s。而CPU的处理速度远远超过这个速度。所以如果没有内存的参与,可能会产生硬盘全力读取,CPU却一直空闲的状态。
2.内存工作原理
数据分类
计算机有很多数据类型,为不同类型的数据所准备,也就是说不同类型的数据存放在内存所对应类型的空间中。Java中的数据类型分为基本数据类型和引用数据类型。
- 基本数据类型:
整数(byte、short、int、long)小数(float、double)
非数字(char、boolean) - 引用数据类型:
类(class)接口(interface)数组(array)
数据储存
将大量0、1组成的数据在内存中用元器件的通电与断电形式进行存储,所以内存只能临时存储数据。内存其实是个大网,像一张表格一样充满了行和列,行列交错也就产生了单元格,每个单元格存储1位信息,通常每段信息的第一个单元格被称为”内存起始地址”,用来记录数据在内存中的位置。
数据形式
计算机是个“傻子”,它根本不认识任何的数据,但我们通常希望计算机能帮助我们记录数据。而计算机是通电运行的,所以理所当然我们用电流来表达数据。通常情况下,在计算机大部分硬件中,通电表示1,断电表示0。这样就形成了大量的01组合,也就产生了数据。
数据进制
二进制是硬件最原始的数据记录方式,但由于二进制会产生大量01组合,记录的数据越大数位越长,很难阅读和理解。所以根据不同的情况,会使用不同的进制。
- 二进制:01,逢二进一
八进制:01234567,逢八进一
十进制:0123456789,逢十进一
十六进制:0123456789ABCDEF,逢十六进一
3.Java内存
Java内存运用
- 堆
堆里是主要数据存储空间,大量的数据本体会被存储在这里空间内,同时这个区域的空间是动态的,当需要空间时进行申请,堆就会分配一块区域给你,用完之后再归还给堆。它像一条管道一样,先进先出。 - 栈
由于堆的特性,导致数据在存入堆后检索速度受限,所以栈是一种对堆的使用方法。我们主要用它来存储Java中的标识符,也就是给放在堆里的数据做个标记,让我们能通过栈更快速的定位到数据在堆里的位置。它像是一个桶一样,先进后出。
使用内存
- 声明
由于堆的特性,我们在使用内存时需要先向内存堆申请一块空间,这块空间的申请必须注明数据类型 - 标识
由于栈的特性,我们需要首先定义一个标识符,表示我们通过这个标识去寻找这块空间 - 赋值
内存堆的使用必须有意义,无效的内存堆空间(null)是一种浪费,不被内存所认可,所以必须申请空间后进行赋值 - 使用
前三步已经完成了对内存的使用,接下来就是通过标识符来使用它
二、变量
1.什么是变量
变量是内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化变量是程序中最基本的存储单元,包含变量类型、变量名和存储的值。
2.变量的存储方式
- 申请空间
- 标识符
- 赋值
3.变量和内存的关系
声明、标识、赋值、使用成功完成了对内存的使用,并得到一块存有数据的空间:变量
4.使用变量
使用变量时,因为有标识符的存在,所以什么地方需要使用只需要写标识符即可。
int num;
num = 10;
System.out.println(num);
5.变量的命名规范
- 只能用英文、下划线、数字、$结尾
- 只能用英文、_、$开头
- 不能使用关键字命名
- 变量名一定要有意义
- 首个单词首字母小写其余首字母大写
- 虽然可以但一般不使用_$
6.常用关键字
三、数据类型
1.什么是数据类型
计算机要存储数据,就必须将数据进行合理分类,不同类型的数据对应使用不同的方式进行处理
2.数据类型详解
- 八大基本数据类型
- 引用数据类型
3.类型转换
- 隐式类型转换 (自动) - 从小类型到大类型,不需要强制转换符
byte -> short -> char -> int -> long -> float -> double - 强制类型转换 (手动) - 从大类型到小类型,需要强制转换符实现强制转换
double -> float -> long -> int -> char -> short -> byte
四、存储信息
1.使用变量存储信息
这段代码中,int表示要存储的数据类型是整数类型,num表示标识符。
int num;
2.内存优化
- 尽量不要使用静态变量
- 充分利用单例机制
- 减少对象的创建
- 使用final修饰符
- 尽量使用局部变量
- 处理好包装类型和基本类型两者的使用场所
- 学会用StringBuilder和StringBuffer
- 尽量不要使用finalize方法
五、运算符
1.算数运算符
+、-、、/、%、++、–、+=、-=、=、/=、%=
int num1 = 10;
int num2 = 5;
System.out.println(num1+num2);
int num1 = 5;
int num2 = 2;
System.out.println(num1/num2);
int num1 = 5;
int num2 = 2;
System.out.println(num1%num2);
int num1 = 5;
num1 ++;
System.out.println(num1);
int num1 = 5;
num1 --;
System.out.println(num1);
int num1 = 5;
num1 += 2;
System.out.println(num1);
- ()>!>算数运算符>比较运算符>&&>|| >赋值运算符
当运算优先级不够时,可以在表达式外边增加小括号()来提升表达式的优先级。
2.逻辑运算符
&、|、&&、||
- 逻辑运算符是用来对运算符左右两个变量的值进行比较,得到结果是boolean类型,因为无论是何种比较,结果只有真或假两种。
3.比较运算符
<、>、>=、<=、==、!=、equals
- 注意:单个=是赋值运算符,两个==才是比较。==用来判断基本数据类型是否相等,而String属于引用数据类型。equals专门用来判断两个字符串的值是否相等。
int num1 = 10;
int num2 = 5;
System.out.println(num1==num2);
int num1 = 10;
int num2 = 10;
System.out.println(num1!=num2);
4.赋值运算符
- =就是赋值运算符,目的是将=右边的数据,赋值给=左边的空间。
- =右边永远都是数据,或可以得到数据的表达式;=左边永远都是一块可以存放对应数据类型的空间
int num = 10;
System.out.println(num);
File file = new File();
System.out.println(file);
5.三目(三元)运算符
- 表达式?结果1:结果2;
- ?是三目运算符,当表达式结果为true,则执行?后面的代码;当表达式结果为false,则执行:后面的代码。