Java由小白到高手之零基础学Java——第四课 Java中的变量和基本数据类型


跟着彦磊学Java系列为Java基础入门系列。通过此系列,我们将了解Java基础知识,包括变量、数据类型、运算符,选择结构、循环结构、数组等基本知识。此系列总结彦磊多年的经验,采用边讲边练的方式一起带领零基础的朋友走进Java世界。
本系列每章都会有大量的练习题,请大家在学习过程中,认真的进行练习,并和我提供的参考代码比较,反复感悟。要把一门语言学好,只学不悟是不可能学好的,用心自我”感悟“,多练,多想是学好一门语言的基础。
当前章节为系统章节的第四课。
您也可以通过下面连接查看其它章节
Java由小白到高手之零基础学Java系列目录


在本课中,我们将学习Java中的变量、数据类型。

为什么要使用变量

在计算机中,任何数据想进行显示或运算,都需要先放到内存中,才能后续操作。
下面的动图,演示了第一次让计算机计算1+2=3的过程及第二次计算 4+5=9的过程,请您认真品一下,以了解为什么要使用变量:
在这里插入图片描述

在上图示例,我们可以看到,在计算机中存放数据的过程:
当内存中没有存放数据的空间时:

  1. 开一块儿空间。
  2. 把数据放到空间中。

当内存中已经有了存放数据的空间时,可以让空间重用,只需要把数据放到空间里就行。您可以发现,同一块儿空间中的数据是可变的,因此我们在Java中把这块空间称为变量空间。
对于电脑内存来说,总容量是比较小的,我们使用内存时应能少开空间就少开。而现实生活中数据类型是很多的,如整数、小数等。那么,如何让Java开辟合适的空间呢?
这就需要了解Java中的数据类型。

Java中的数据类型决定了Java在内存中开多大的空间来存放数据。我们在使用变量前,必须声明变量的数据类型(即告诉Java在内存中开多大的空间)。
在继续了解变量之前,我们有必要先学习一下Java中的数据类型。

Java中的基本数据类型

Java中的数据类型总的来说分两种:

  • 基本数据类型
  • 对象数据类型

我们今天重点了解基本数据类型和简单了解对象数据类型中的String类。
下图中描述了Java中的基本数据类型
在这里插入图片描述

  从上图大家可以看到,不同的基本数据类型占用的内存空间是不一样的,我们每次使用变量前,必须要考虑使用什么样的数据类型。

  在整型中,在-231~231的整数范围内,我们常用int类型,而byte和short用在对文件的处理和需要控制占用空间量的大数组中。因此,我们常用的整型一般定义成int类型。
  而如果整数的值超过了231范围,就要用用long类型了。如2,147,483,649,必须定义成long类型,因为int类型最大的数是2,147,483,648。
  在浮点数(小数)中,常用的类型是double类型,而float很少用。如果需要快速处理单精度数据或需要存储大量数据时,则可考虑float类型。

  boolean类型我们在随后章节学习。
  除上面基本数据类型外,我们常用的数据类型还有一个String类型,它属于对象数据类型,我们在随后有专门的章节来学习String类。

Java中的变量

使用变量的步骤

  1. 声明变量(为变量开辟数据空间,并命名)
  2. 给变量赋值(在数据空间中存放数据)
  3. 使用变量(输出或参加运算)

变量的声明

语法

变量类型 变量名称;

示例代码:

//声明int类型的变量
int age;
//同时声明三个int类型的变量
int num1,num2,num3;
//声明char类型的变量
char ch;
//声明double类型的变量
double num;
变量命名规范

变量的命名和类相似,均遵循标识符(为类、变量、方法等命名的符号)。

  • 标识符可以由字母、数字、下划线(_)和美元符号($)组成,其中数字不能打头。
  • 标识符不能使用Java关键字(Java中保留起来,不让用户用的字符)
  • 标识符不能使用空格
  • 标识符不能使用除下划线和美元符号外的其它特殊字符
  • 变量命名遵循Camel模式(即每个英文单词的首字母大写,其它英语单词的小写,如myAge)
  • 变量命名不要用单个字符,而应有意义,做到见名知义,如变量为a则是一个不标准的命名,而age则是有意义的命名。

变量的赋值(变量的初始化)

给变量赋值相当于在内存空间中存放数据,变量的赋值也叫变量的初始化。

1、直接赋值(声明的同时赋值)
// 声明的同时赋值。
int age = 18;
// 声明的同时赋值,三个变量的值都为0。
int num1, num2, num3 = 0;
// char类型需要使用英文单引号引住,只能是一个字符
char ch = '彦';
// 字符串类型要使用英文双引号引住
String name = "彦磊";
2、先声明,后赋值
//先声明后赋值
double num;
//这中间可以有其它代码。
num=18.2;

变量的作用域

  变量声明后,只在他的作用域范围内能访问到。作用域指包含他的那一对对儿大括号中。
在同一作用域中,变量不能重复声明(即变量名不能相同)。如下面第18行和第20行错误的显示:
在这里插入图片描述

  不同的作用域中,变量名可以相同。如下图:
在这里插入图片描述

成员变量和局部变量

成员变量:声明在类中的变量,叫成员变量,也叫字段。成员变量都有各自的默认值,可以直接声明后使用。
在这里插入图片描述

局部变量:声明在方法或其它代码块中的变量,叫局部变量。局部变量必须在赋值后才能使用。
在这里插入图片描述

局部变量的优先级要大于成员变量
在这里插入图片描述

常用数据类型详解

char(字符类型)

  字符型常用于单个字符,必须使用英文单引号引住。我们可以用以下四种形式给字符型变量赋值:

  • 直接给变量单个字符,如’a’,’1’,’彦’ 等。
  • 通过转义符字符赋值,如’\t’(转义符相关知识请见第一课的讲解)。
  • 直接用Unicode值赋值,如’ \u78ca’。
  • 直接用一个整数值赋值,如56
    参见下面代码:
1.	/**
2.	 * 此类演示了给char类型赋值的常用情况。
3.	 * @author 彦磊
4.	 *
5.	 */
6.	public class VariableDemo05 {
7.	
8.	   public static void main(String[] args) {
9.	      char ch='彦';
10.	      System.out.println(ch);
11.	      //改变ch的值为转义符:一个英文单引号
12.	      ch='\'';
13.	      //输出单引号
14.	      System.out.println(ch);
15.	      //改变ch的值为Unicode值
16.	      ch='\u78ca';
17.	      //输出“磊”
18.	      System.out.println(ch);
19.	      //改变ch的值为一个int类型。
20.	      ch=56;
21.	      //输出“8”
22.	      System.out.println(ch);
23.	   }
24.	}


运行结果如下图:
在这里插入图片描述

整型(int、long)

Java中默认的整型是int类型。
如果想声明long类型请在字面量(下面等号后的数字即为字面量)后加L(参见下面代码 的19至25行)。
Java7对数值类型添加了_分隔符,以更直观的查看数据的位数(参见下面代码12至15行)。_在编译时不会进行编译。
请认真看下面代码的每一句注释。

1.	public static void main(String[] args) {
2.	      //声明并初始化int类型的变量num1;
3.	      int num1=8;
4.	      //输出num1的值
5.	      System.out.println(num1);
6.	
7.	
8.	      //把num1中的值传递给num2,等号在这里是赋值运算符,是把右边的值赋值给左边。
9.	      int num2=num1;
10.	      System.out.println(num2);
11.	
12.	      //java7中新增用_来分隔数字,_在编译时不会编译
13.	      //下面代码等同于num1=12345678
14.	      //更改num1中的值为新值
15.	      num1=1234_5678;
16.	      System.out.println(num1);
17.	
18.	      //声明login类型应在后面加L,表明123是长整型。
19.	      long num3=123L;
20.	      //此行代码依然正确,但程序进行了自动类型转换,把int 类型的123转成了long
21.	      long num4=123;
22.	      //下面的代码已经出错,是因为右侧的11个2,已经超出了int类型的范围。
23.	      long num5=22222222222;
24.	      //在11个2后加个L,表明右侧是long类型,程序就不会出错。
25.	      long num6=22222222222L;
26.	
27.	
28.	
29.	   }

浮点数

Java默认的浮点类型是double类型。如果定义float类型需要在字面量后加F。

1.	public static void main(String[] args) {
2.	
3.	      // 定义float类型应在字面量后加F或f。
4.	      float num = 2.0F;
5.	      // 下面代码已经出错,是因为2.0默认为double类型。
6.	      // num=2.0;
7.	      // 下面代码没出错,是因为2是int类型,int可以自动转换为float类型。
8.	      num = 2;
9.	      //给double类型赋值。
10.	      double num1=2.0;
11.	      //依然可以使用_做分隔符。
12.	      num1=1.22_2222_2222;
13.	
14.	}

其它的类型我们将在后续课程中了解。

基本数据类型的转换

1、 自动类型转换

数值类型的自动转换

把一个基本类型的值赋值给另一个基本类型的变量,且程序不出错,就是自动类型转换。
数值类型位数少的类型可以自动转成位数大的,下图中从左向右可以发生自动类型转换,反之则出错。
在这里插入图片描述

下面代码演示了各种类型的自动类型转换:

1.	public static void main(String[] args) {
2.	
3.	      byte byteVal=56;
4.	      //byte可以自动转换成short类型
5.	      short shortVal=byteVal;
6.	      //short类型可以自动转换成int类型
7.	      int intVal=shortVal;
8.	      //char哦对噶可以自动转换成int类型
9.	      intVal='a';
10.	      //int类型可自动转换成float类型
11.	      float floatVal=intVal;
12.	      //float类型可以自动转换成double类型
13.	      double doubleVal=floatVal;
14.	
15.	      System.out.println(doubleVal);
16.	
17.	   }

基本类型转字符串

当一个基本类型和字符串用“+”连字符运算时,基本类型将自动转换成字符串类型,请看下面例子:

1.	String valStr = "1"; 
2.	int valInt = 2; 
3.	// 基本类型和String类型使用+连字符运算后,会自动转成String类型 
4.	// 因此程序运行时先将int类型的2转成String类型,然后再和String类型的1相连 
5.	
6.	String result = valStr + valInt; 
7.	// 输出的是字符串12 
8.	System.out.println(result); 
9.	
10.	//将基本类型转成String类型的一种方法 
11.	String intToStringVal = valInt + ""; 
12.	
13.	System.out.println(intToStringVal); 

下图是输出结果:
在这里插入图片描述

  因此,当我们想把一个基本类型转成String类型时,最简单的方法就是和一个空字符串相“+”,如上图的第21行代码。

2、 赋值运算符

看下图,当我们把一个double类型的值赋值给float类型时会报错:
在这里插入图片描述
  上图第9行,第15行的英文等号,叫做赋值运算符:

作用:
  赋值运算符的作用是将右侧的变量值或值传递给左侧。
注意事项:

  • 赋值运算符的左侧必须是一个变量。
  • 赋值运算符两端的数据类型必须一样,或能将右侧的数据自动转成左侧的类型。

因此,想解决上图的错误,就要进行强制类型转换,即下图中从右向左转换,需要进行强制类型转换。
在这里插入图片描述

3、 强制类型转换

语法:目标类型 变量=(目标类型)值;
注意事项:强制类型转换有可能会造成数据精度的丢失

下面代码演示了强制类型转换:

1.	double doubleVal = 8.99; 
2.	// 将double类型强制转换成float类型
3.	float floatVal = (float) doubleVal; 
4.	/* 
5.	 * 强制类型转换会造成数据精度的丢失 下面代码转换后得到的值是8。而不是四舍五入的9 
6.	 * 将double类型的数据强制转成int类型
7.	 */ 
8.	
9.	int intVal = (int) doubleVal; 
10.	//输出8 
11.	System.out.println(intVal); 

练习

  本阶段我们学习了Java中的基本数据类型及变量的相关知识。接下来我们通过一波练习来巩固一下所学知识(练习答案在文末):
1、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public static void main(String[] args) {
2.	   int num;
3.	
4.	   System.out.println(num);
5.	}

2、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public static void main(String[] args) { 
2.	   int num; 
3.	   double num=3; 
4.	   System.out.println(num); 
5.	} 
3、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:
1.	public class Exercises03 {
2.	   static int num;
3.	
4.	   public static void main(String[] args) {
5.	      System.out.println(num);
6.	   }
7.	}

4、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public class Exercises04 {
2.	   static int num;
3.	
4.	   public static void main(String[] args) {
5.	      int num=3;
6.	
7.	      System.out.println(num);
8.	   }
9.	}

5、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public class Exercises05 {
2.	   static int num=0;
3.	
4.	   public static void main(String[] args) {
5.	      int num = num;
6.	
7.	      System.out.println(num);
8.	   }
9.	}

6、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public class Exercises06 {
2.	
3.	   public static void main(String[] args) {
4.	      int num=3.5;
5.	
6.	
7.	      System.out.println(num);
8.	   }
9.	}

7、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public class Exercises07 {
2.	
3.	   public static void main(String[] args) {
4.	
5.	      int num=(int)3.5;
6.	      int num2=3;
7.	
8.	      System.out.println("输出的结果为:"+num+num2);
9.	   }
10.	}

8、下面代码是否有错,有错指出错误,并改正,没错说出运行结果:

1.	public static void main(String[] args) { 
2.	
3.	   int num=(int)3.5; 
4.	   int num2=3; 
5.	
6.	   System.out.println(num+num2+"是最后的结果"); 
7.	} 

总结

  最后依然用几幅思维导图总结一下本课的知识:
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

练习答案

1、错误:第9行会报错局部变量必须赋值后才能使用。
在这里插入图片描述

正确的代码参考:

1.	int num;
2.	/*
3.	* 在方法中声明的变量是局部变量, 
4.	* 局部变量必须在声明后赋值才能使用
5.	* 第7行给num赋值后,错误解决。
6.	*/
7.	num=3; 
8.	System.out.println(num);

2、 错误:同一作用域,变量名不能相同。
在这里插入图片描述

正确代码参考:

1.	public static void main(String[] args) { 
2.	   int num1; 
3.	   //同一作用域,变量名不能相同。 
4.	   double num=3; 
5.	   System.out.println(num); 
6.	} 

3、 代码正确,声明在类中的变量是全局变量,全局变量不需要赋值,就能直接使用,int类型的全局变量默认值为0,因此输出结果为:0。
在这里插入图片描述

4、 代码正确:输出结果为3。
在这里插入图片描述

5、 代码错误:
在这里插入图片描述

正确代码参考:
在这里插入图片描述

6、代码错误:赋值符号左右两端的类型应一样或能发生自动类型转换。
在这里插入图片描述

正确代码参考:
在这里插入图片描述

7、代码正确:此处的+为连字符。
在这里插入图片描述

8、代码正确:程序先进行num+num2的相加运算,再和字符串相连。
在这里插入图片描述

本章源码

源码说明 :
在这里插入图片描述
下载地址:【第四课 配套源码

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值