系列连载文章,大家可以从我的专栏学习Java入门基础知识,后续也会有更高级的Java特性、企业级开发框架,也有平常工作中的技术总结和分享,欢迎关注我的CDSN博客。同时可关注微信公众号“Java开发之旅”,获得更多技术资料!
目录
思考
通过之前的知识,我们知道计算机执行程序其实就是一个运算的过程,那我们不妨想一想,我们在生活中是怎样进行运算、思考的?
以我们去商店购物为例,我们在挑选商品时,会在大脑中记忆这个商品的价格、保质期、生产厂商等信息,而且在购物行为发生的前后不会忘记这些信息。因为在大脑中记忆了这些信息,所以我们会通过判断厂商、保质期来决定是否购买,同时在结账时我们会计算这些商品的总价格……
上述例子中,拿结账来说,我们只有知道商品的价格,才能在大脑中运算出需要支付多少钱,否则这是不现实的。
同样,在Java程序中,我们如果要进行数据的运算,也要有一个东西能够记录这些数据,不管是临时的或者永久的。那这个东西,专业一点叫做——变量。
数据类型and变量?
我觉得大家现在肯定对变量有一个模糊的概念了。变量,就是在程序中存储数据的,是我们和程序交互的中介,也是程序和底层计算机交互的中介。变量是可以运算的,是我们程序执行的基础,存储数据的值。
在具体的展开变量之前,我们还需要理解数据类型。
我们生活中充满着各种数据,一个班级的学生人数、商品的价格、一张人民币的真假、某个人的姓名……我们会将各种数据分类、标记,这将有利于我们对这些数据的处理,比如我们知道只有数字之间才可以进行加减乘除,“ 1 x 2 = 2”但是“1 x 张三”是错误的运算……
那么同样,在Java当中描述数据,要声明这个数据是什么类型的,只有这样Java才能检验你的代码是否合法、数据之间的操作能否被执行。比如你想拿数字1和字符串“张三”相加,得到一个数字,这显然是荒谬的。
我举的这四种数据,正好对应Java当中的四类数据类型:整型、浮点型、布尔型、字符型。
比如人数只能是整数,所以对应Java当中的整型;价格往往带有小数,对应Java当中的浮点型;人民币要么真、要么假,没有第三种情况,对应Java当中的布尔型;姓名往往由字符组成,对应Java当中的字符型。
再深入一步,将上述四类数据类型进一步划分,又可衍生出八种数据类型,也是Java当中常说的——四类八种。
Java中的四类八种
先上图:
上图就是Java中所有的数据类型,其中基本类型是Java自带的内置类型,除了这八种以外的所有数据类型都是引用类型,引用类型都是以对象的方式存在,将在以后的章节为大家讲解。
所有的基本类型,组成了四类八种:四类是指整型、浮点型、布尔型、字符型,八种是指byte、short、int、long、float、double、boolean、char。
现在,我们就结合变量,将二者一块学习。所以,我们先说一下变量的定义。
在Java当中通过以下语法定义变量并且赋值:
数据类型 变量名 = 值;
当然了,你也可以先声明,然后通过 = 进行赋值:
数据类型 变量名;
变量名 = 值;
在Java当中,所有的变量必须先声明并且赋值之后才能被程序使用,所以变量一定要经过上述两种语法之一进行声明(类的实例变量会有默认值,我们后面会讲到,但是这里并不会)。
同时,Java对变量名有严格的要求:
变量名只能以字母、下划线、$开头,并且后面也只能跟字母、下划线、$
变量名不能以数字开头
变量名不得是Java保留字、关键字
Java中的保留字和关键字(图片来源于网络):
综上,以下变量名是合法的:
number、count、student、$test、_name、student_name
以下变量名是不合法的:
1name、*test、public、int
byte类型
首先byte属于整型,用于存储整型的数字,而且它也是整型当中取值范围最小的一个,它的取值范围是-128 —— 127。byte类型占8bit位、1字节,经常用于在大型数组、IO流、缓冲区中节约空间,因为它只占1字节,是int类型的四分之一。
byte类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
byte firstByte = 10;
System.out.println(firstByte);
//第二种,先定义,再赋值
byte secondByte;
secondByte = 5;
System.out.println(secondByte);
}
}
注意,如果你采用先声明、后赋值的方式,一定要保证在打印变量之前,变量有值。以下代码将报错:
我们上面说过,只要在使用之前有值即可,所以以下代码也会正常运行:
public class Hello {
public static void main(String[] args) {
//先定义变量,不赋值
byte firstByte;
//中间可以进行任意操作,可以拥有任意行代码
byte secondByte = 10;
System.out.println(secondByte);
//保证在使用之前赋值即可
firstByte = 5;
System.out.println(firstByte);
}
}
而且变量名不能重复,至于可以重复的场景会在以后进行讲解,以下代码将报错:
变量未声明就使用,报错:
而且变量的值,是可以无限次赋值的,新的值会覆盖旧的值:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//输出2
byte firstByte = 2;
System.out.println(firstByte);
//重新赋值,输出3
firstByte = 3;
System.out.println(firstByte);
//新值覆盖旧值,输出6
byte secondByte = 5;
secondByte = 6;
System.out.println(secondByte);
}
}
上面我们使用byte类型讲解了变量的基本定义、使用规则,下面就不会这么啰嗦了。
short类型
short类型叫做“短整型”,根据名称也可以看出来它存不了太大的整数。它的取值范围是-32768 —— 32767,占16个bit位,2个字节。
short类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
short firstShort = 15;
System.out.println(firstShort);
//第二种,先定义,再赋值
short secondShort;
secondShort = 5;
System.out.println(secondShort);
}
}
int类型
int叫做整型,是比较常用的一个数据类型,它占32位,4个字节,取值范围是-2147483648 —— 2147483647。平常存储年龄、人数、天数……一般都是用它。
int类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
int firstInt = 100;
System.out.println(firstInt);
//第二种,先定义,再赋值
int secondInt;
secondInt = 5;
System.out.println(secondInt);
}
}
long类型
long叫做“长整型”,它的取值范围要比int更大,-9223372036854775808 —— 9223372036854775807,占64bit位,8字节。
long类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
long firstLong = 100;
System.out.println(firstLong);
//第二种,先定义,再赋值
long secondLong;
secondLong = 5;
System.out.println(secondLong);
}
}
float类型
float类型是一种浮点型、小数,而且是单精度浮点,即小数点后只有一位。它占32位、4字节。需要注意的是,在Java当中所有的小数,默认是double类型,所以要在赋值的时候加上小写字母f,从而区分这是单精度浮点。
float类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
float firstFloat = 100.2f;
System.out.println(firstFloat);
//第二种,先定义,再赋值
float secondFloat;
secondFloat = 5.5f;
System.out.println(secondFloat);
}
}
double类型
double类型是双精度浮点型,小数点后有两位。它占64bit位,8字节。float类型的小数需要用小写字母f表示,double需要用小写字母d表示,只不过Java中的小数默认是double类型的,所以一般我们省略d。
double类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
double firstDouble = 99.99;
System.out.println(firstDouble);
//第二种,先定义,再赋值
double secondDouble;
secondDouble = 66.66;
System.out.println(secondDouble);
}
}
boolean类型
boolean类型表示条件,真或假。它只有两个值:true或false,true表示真,false表示假,经常用于在业务中判断是否满足条件,比如余额是否充足、用户是否是会员……这些都将在以后讲到,此处大家只需要会声明boolean类型的变量即可。
boolean类型的定义:
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值,真
boolean firstBoolean = true;
System.out.println(firstBoolean);
//第二种,先定义,再赋值
boolean secondBoolean;
//赋值为假
secondBoolean = false;
System.out.println(secondBoolean);
}
}
char类型
char类型可以存储任何单个的字符,包括中文字符。这个数据类型,反正在我平常的开发中基本没有用到过。char类型有很奇妙的玩法,涉及到Unicode字符编码,有时候会产生意想不到的运行效果,鉴于目前的知识进度,将在以后为大家介绍。
与上面的几个数据类型不同,char的赋值需要用单引号''引起来。
public class Hello {
public static void main(String[] args) {
/*
* 变量的定义语法:
* 数据类型 变量名 = 值;
*
* 或者:
* 数据类型 变量名;
* 变量名 = 值;
* */
//第一种,定义的同时进行赋值
char firstChar = 'A';
System.out.println(firstChar);
//第二种,先定义,再赋值
char secondChar;
secondChar = '王';
System.out.println(secondChar);
}
}
扩展——String类型
上面的char类型,只能存储一个字符,那如果我们想存储一句话、一串字符呢?
这就需要用String,String是一个引用类型,因为它是用class关键字修饰的一个Java类,我后面会专门用一篇文章来讲String这个类,在这里大家会使用String存储字符串即可。
但是String类型的变量定义,和char类型几乎一样,只不过是用英文的双引号括起来的:
public class Hello {
public static void main(String[] args) {
//声明String类型的变量
String firstString = "这是我的第一个String类型变量(其实是常量啦,后面会为大家解释~)";
//打印
System.out.println(firstString);
/*
* 上面的两行代码,等同于下面的一行代码。
* 大家还记得一开始的Hello World吗?
*
* 其实println()需要的就是一个Object对象,又因为String是
* 一个类,继承了Object……算了这里对于小白太高深了,以后再
* 给大家解释
* */
System.out.println("这是我的第一个String类型变量(其实是常量啦,后面会为大家解释~)");
}
}
小结
以上就是我们今天的内容了,在下一节,将带领大家学习Java中的运算符,以及数据类型之间的相互兼容、转换,欢迎持续关注、转发!大家也可以关注我的微信公众号“Java开发之旅”,获取更多Java学习资源!