从0开始学Java:Java基础语法(2)

简介: 从0开始学Java:Java基础语法(2)

6. 变量(Variable

  • 变量的概念:
    在程序执行的过程中,其值可以发生改变的量
  • 变量的作用:
    用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的
  • 微信截图_20231016215421.png
  • 定义格式:
  1. 声明变量,并同时赋值
    数据类型 变量名=初始化值;
//声明并同时赋值,存储一个整数的年龄
int age = 18;
//打印输出变量值
//+号表示连接符,把""中的字符串与变量age中的数据连接进行输出
System.out.println("age = " + age);

先声明,再赋值

数据类型 变量名;

变量名=初始值;

//先声明,再赋值
int age;
age=18;
//打印输出变量值
System.out.println("age = " + age);//18
//变量可以重新赋值
age=19;
System.out.println("age = " + age);//19 

同时声明多个变量

数据类型 变量名1=初始值,变量名2=初始值;

//声明多个变量并同时赋值
int a=11,b=22;
//或者先声明再赋值
int c,d;
c=33;
d=44;

变量的使用注意事项


先声明后使用


如果没有声明,会报“找不到符号”错误


在使用之前必须初始化


如果没有初始化,会报“未初始化”错误


变量有作用域


作用域为变量直接所属的{}范围内,如果超过作用域,也会报“找不到符号”错误


在同一个作用域中不能重名


同一个{},不能同时声明两个同名变量



7. 计算机如何存储数据

计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。


7.1 进制

进制分类与表示方式


(1)十进制:

数字组成:0-9

进位规则:逢十进一

System.out.println(10);//10表示十进制的10,输出十进制结果10

(2)二进制:

数字组成:0-1

进位规则:逢二进一

表示方式:以0b或0B开头

System.out.println(0B10);//0B10表示二进制的10,输出十进制结果2

十进制的256,二进制:100000000,为了缩短二进制的表示,又要贴近二进制,在程序中引入八进制和十六进制

(3)八进制:很少使用

数字组成:0-7

进位规则:逢八进一

表示方式:以0开头

System.out.println(010);//010表示八进制的10,输出十进制结果8

与二进制换算规则:每三位二进制是一位八进制值

(4)十六进制

数字组成:0-9,a-f或A-F

进位规则:逢十六进一

表示方式:以0x或0X开头

System.out.println(0X10);//0x10表示十六进制的10,输出十进制结果16

  1. 与二进制换算规则:每四位二进制是一位十六进制值
  2. 进制的转换

微信截图_20231016215742.png

微信截图_20231016215751.png

任意进制转十进制


十进制的本质:123=1*102+2*101+3*10^0


系数:就是每一个位上的数值。上例中的1,2,3

基数:x进制的基数就是x。上例中的10

权:对每一个位上的数据,从右到左,并且从0开始编号,对应的编号就是该数据的权。上例中的0,1,2


任意进制转十进制:系数*基数^权次幂之和。


十进制转任意进制:


十进制数除以基数取余,直到商为0,余数反转。


十进制转二进制:十进制整数6除以基数2,倒序取余数,结果为二进制数110

微信截图_20231016215806.png

7.2 计算机存储单位

位(bit) 是数据存储的最小单位,也就是一个二进制位。其中8 bit 就称为1个字节(Byte)。

字节(Byte): 是计算机信息技术用于计量存储容量的一种计量单位,1字节等于8bit。

转换关系:

8 bit = 1 Byte

1024 Byte = 1 KB

1024 KB = 1 MB

1024 MB = 1 GB

1024 GB = 1 TB

7.3 二进制数据存储

计算机底层都是使用二进制进行数据的存储的。不同类型的数据,存储方式也有不同。


整数存储

计算机底层存储整数并不是把整数转换为二进制直接存储,而是以二进制的补码形式进行存储。要了解补码还要知道原码和反码:


原码:把十进制转为二进制,然后最高位设置为符号位,1表示负数,0表示正数。


正整数的原码、反码和补码都一样,称为三码合一。


负整数的反码和补码表示为:


反码:负整数的反码在其原码的基础上,符号位不变,其余位取反(0变1,1变0)


补码:负整数的补码为其反码基础上+1

例如:用1个字节的二进制表示一个数
25 ==> 原码  0001 1001 ==> 反码  0001 1001 -->补码  0001 1001
-25 ==>原码  1001 1001 ==> 反码  1110 0110 ==>补码  1110 0111

一个字节可以存储的整数范围

分为两种情况:

(1)无符号:不考虑正负数

0000 0000 ~ 1111 1111 ==> 0~255

(2)有符号:-128~127

0000 0000 ~ 0111 1111 ==> 0~127
1000 0001 ~ 1111 1111 ==> -127 ~ -1 (补码形式存储)
1000 0000  ==> -128     特殊值,最高位既是符号位,又是数值位

如何存储小数(了解)


为什么float(4个字节)比long(8个字节)的存储范围大?

为什么double(8个字节)比float(4个字节)精度范围大?

为什么float和double不精确

因为float、double底层也是二进制,先把小数转为二进制,然后把二进制表示为科学记数法,然后只保存:


①符号位②指数位③尾数位


微信截图_20231016215936.png

详见《float型和double型数据的存储方式.docx

  1. 如何存储字符在计算机的内部都是二进制的0、1数据,如何让计算机可以直接识别人类文字的问题呢?就产生出了编码表的概念。
  • 编码表
    就是将人类的文字和一个十进制数进行对应起来组成一张表格。例如:
  • 微信截图_20231016215947.png
  • 将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII(American Standard Code for Information Interchange 美国标准信息交换码)。


Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。


Java中使用的字符集:Unicode编码集


unicode使用2个字节存储一个字符,对于大量的英文字符(1个字节可以存储),无疑是浪费空间的,所以出现了UTF-8、UTF-16编码规则,UTF-8是以8位为一个编码单位的可变长编码规则。这时:


英文字符:还是按照ASCII码表对应的数字进行存储(1个字节)


中文字符:通常需要3个字节来存储


Java中字符常量的几种表示方式


(1)‘一个字符’


例如:‘A’,‘0’,‘我’


(2)转义字符

\n:换行
\r:回车
\t:Tab键
\\:\
\":"
\':'
\b:删除键Backspace
System.out.println('\\');
System.out.println("hello\tworld\njava");

(3)\u字符的Unicode编码值的十六进制型

例如:’\u5C1A’代表’尚’

char c = '\u5C1A';
char c = '尚';
String s = '尚';//错误的,哪怕是一个字符,也要使用双引号
char c2 = '';//错误,单引号中有且只能有一个字符
String s2 = "";//可以,双引号中可以没有其他字符,表示是空字符串

(4)直接给char类型变量赋值十进制的0~65535之间的Unicode编码值



8. 数据类型

8.1 数据类型分类

Java是一种强类型的语言,针对每一种数据都定义了数据类型,不同类型的数据二进制表示方式或分配的空间大小有所不同,java数据类型主要分为两大类:(定义变量需要确定数据类型,即确定数据使用的空间大小和二进制表示形式)


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

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

8.2 基本数据类型

四类八种基本数据类型:

微信截图_20231016220103.png

Java中的默认类型:整数类型是int 、浮点类型是double 。


常量整数值都是int类型,占用4个字节空间。

程序运行期间byte、short、char、boolean实际都是占用4个字节内存空间,

但在逻辑上:

byte只有低8位有效空间。

short只有低16位有效空间。

所以,可以直接把一个byte范围内的整数常量值直接赋给byte类型变量。short同理。byte b=10;

赋值给int,只要在int范围即可。

赋值给long,在int范围内的,可以加也可以不用加L,会自动升级为long,如果数字超过int范围,必须加L。


小数常量值,无论多少,不加F,就是double类型。


8.3 基本数据类型的存储范围

整型系列

(1)byte:字节类型


占内存:1个字节


存储范围:-128~127

byte b=10;
byte b1=128//编译失败: 不兼容的类型: 从int转换到byte可能会有损失

(2)short:短整型类型

占内存:2个字节

存储范围:-32768~32767

short s=10;
short s1=32768//编译失败: 不兼容的类型: 从int转换到short可能会有损失

(3)int:整型

占内存:4个字节

存储范围:-2的31次方 ~ 2的31次方-1

int i=10;
int i1=12345678900;//编译错误: 过大的整数: 12345678900

(4)long:整型

占内存:8个字节

存储范围:-2的63次方 ~ 2的63次方-1

long j=10;
long j1=12345678900L;

注意:如果要表示某个超过int范围的常量整数它是long类型,那么需要在数字后面加L


浮点型系列(小数)

(1)float:单精度浮点型


占内存:4个字节


精度:科学记数法的小数点后6~7位


注意:如果要表示某个常量小数是float类型,那么需要在数字后面加F或f,否则就是double类型


(2)double:双精度浮点型


占内存:8个字节


精度:科学记数法的小数点后15~16位

float f = 12.3F;//右边如果赋值小数常量值,那么必须加F或f
double d = 12.3;    
单字符类型:char

占内存:2个字节

char ch='a';

char类型:使用单引号’'


布尔类型

boolean:只能存储true或false


虽然计算机底层使用0和1表示false和true,但是在代码中不能给boolean类型的变量赋值0和1,只能赋值false和true



9. 基本数据类型转换

在Java程序中,不同的基本数据类型的值经常需要进行相互转换。Java语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种转换方式:自动类型转换和强制类型转换。

微信截图_20231016220309.png

相关文章
|
2天前
|
Java 测试技术 数据库
【JAVA基础篇教学】第十七篇:Java单元测试
【JAVA基础篇教学】第十七篇:Java单元测试
|
2天前
|
Java 索引
【JAVA基础篇教学】第七篇:Java异常类型说明
【JAVA基础篇教学】第七篇:Java异常类型说明
|
2天前
|
小程序 Java 容器
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
10 0
|
2天前
|
Java
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
7 0
|
2天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
2天前
|
XML Java 数据库连接
【JAVA基础篇教学】第十五篇:Java中Spring详解说明
【JAVA基础篇教学】第十五篇:Java中Spring详解说明
|
2天前
|
设计模式 Java
【JAVA基础篇教学】第十四篇:Java中设计模式
【JAVA基础篇教学】第十四篇:Java中设计模式
|
2天前
|
Java
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
|
2天前
|
Java
【JAVA基础篇教学】第十二篇:Java中多线程编程
【JAVA基础篇教学】第十二篇:Java中多线程编程
|
2天前
|
存储 Java 索引
【JAVA基础篇教学】第十一篇:Java中字符串操作详解
【JAVA基础篇教学】第十一篇:Java中字符串操作详解