变量、数据类型、运算符

本篇文章主要介绍一些java语言中的基本概念,如:标识符、变量、常量、数据类型、运算符、基本数据类型的类型转换等。

一、注释

在Java中根据注释的功能不同,主要分为单行注释、多行注释和文档注释。

  1. 单行注释

单行注释以“//”开头。

  1. 多行注释

多行注释以“/*”开头,以“*/”结尾。注意,多行注释不能嵌套使用,因为多行注释以“*/"为结束标志。

【错误示例1-1】多行注释不能嵌套使用

可见,多行注释见“/*”即结束。

  1. 文档注释

文档注释以“/**”开头,以“*/”结束,注释中包含一些说面性的文字及一些JacaDoc标签(在写项目时,可以生成项目的API)。

【示例1-2】认识Java的三种注释类型

二、标识符

标识符是用来给变量、类、方法以及包进行命名的。

  1. 标识符的4大命名规则:

必须以字母、下划线"_"、美元符号"$"开头,即不能使用数字开头。

②其他部分可以是字母、下划线"_"、美元符号"$"和数字的任意组合。

③大小写敏感,且长度无限制。例如:Welcome,student等.

④不可以是Java的关键字。

  1. 标识符的使用规范

①表示类名的标识符:每个单词的首字母大写,如Student,GoodStudent

②表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”,如eat(),eatFood()

PS:Java不采用ASCII字符集,而是采用Unicode字符集。因此,这里字母的含义不仅仅是英文,还包括汉字等等。但是,一般不建议使用文字定义标识符。

【实例2-1】合法的标识符

int a = 10;//以字母开头

int _b= 23;//以下划线_开头

int $123abc = 5;//以美元符号$开头

int 变量1 = 5555;//不建议使用中文命名的标识符

【实例2-2】不合法的标识符

int 1abc = 3;//不能用数字开头

int abc# = 3;//不能包含#这样的特殊字符

int int = 3;//不能使用关键字

三、关键字/保留字

Java关键字是Java语言保留供内部使用的,如class用于定义类。我们不能使用关键字作为变量名或方法名。在Java中的关键字如下图所示:

ps:上图的关键字不必死记硬背,随着深入学习和使用,自然而然便熟悉了。

四、变量(variable)

  1. 变量本质

①变量本质上就是代表一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。

②可通过变量名来访问“对应的存储空间”,从而操作这个“存储空间”存储的值。

③Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。比如,int a = 23;表示a变量的空间大小为4个字节。

  1. 变量声明

不同数据类型的常量会在内存中分配不同的空间。

【示例4-1】几种不同数据类型的变量声明

double salary;//8个字节大小

long earthPopulation;//8个字节

int age;//4个字节大小

【示例4-2】声明变量和初始化

int age = 23;

double e = 2.718281828;

  1. 变量的分类和作用域

变量有三种类型:局部变量、成员变量(也称为实例变量)和静态变量。它们的区别如下图所示:

局部变量(local variable)

局部变量是方法或语句块内部定义的变量。生命周期是从声明位置开始到方法或语句执行块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。

成员变量(另称为实例变量 member varible)

方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。如下表所示:

表 4-1 实例变量的默认初始值

数据类型

实始值

int

0

double

0.0

char

'\u0000'

boolean

false

静态变量(类变量 static variable)

使用static定义,从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化该类型的默认初始值,如上表4-1所示。

【实例4-3】Java的三种变量类型

4.常量(constant)

在Java语言中,用关键字final来定义一个常量。常量一旦被初始化后不能再改变。

声明格式:

final type varName value;

【实例4-4】常量的声明及使用

注意,为了更好的区分和表述,一般将 1、2、3、‘a’、‘helloWorld’等称为字符常量,而使用final修饰的PI等称为符号常量

五、数据类型(primitive data type)

Java数据类型分为基本数据类型(primitive data type)和引用数据类型(reference data type)。

如下图所示:

注意,1 Byte = 8 bit,可以表示2^8=256种状态。引用数据类型的大小统一为4个字节,记录的是其引用对象的地址。

  1. 整型

整数类型分为byte,short,int,long四种,其占用空间和表数范围如下图所示:

Java语言整型常量的四种表示形式:

①十进制整数,如:100,0,23

②八进制整数,要求以0开头,如023

③十六进制数,要求以0x或0X开头,如0x25,0X25

④二进制数,要求0b或0B开头,如0b01110011

【实例5-1】整型的使用

注意,Java语言的整型常数默认为int型,声明long型常量可以后加‘l’或‘L’,但一般加'L',因为小写字母'l'与数字'1'相似。

  1. 浮点型

浮点型分为float,double两种类型,其占用空间和表数范围如下图所示:

①float类型又被称作单精度类型,尾数可以精确到7位有效数字。

②double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。

③Java浮点类型常量有两种表示形式

(1)十进制数形式,例:2.3 23.0 0.23

(2)科学计数法形式,例:2.3e0 2.3E1 2.3E-1

浮点型不精确,不要用于比较

浮点数存在舍入误差,数字不能精确表示。浮点数适合普通的科学和工程计算,精度足够;但不适合精度要求非常高的商业计算,这时候要使用BigDecimal进行运算和比较。

⑤浮点常量默认类型是double,要改成float可以后面加F或f。

⑥float类型的数值有一个后缀F或者f,没有后缀F/f的浮点数值默认为double类型。也可以在浮点数值后添加后缀D或d,以明确其为double类型。

【实例5-2】浮点型的使用

由运行结果可知,浮点数不精确。

  1. 字符型(Char)

①字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。

②char 类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符。

③转义字符

表 5 -1

转义符

含义

Unicode值

\b

退格(backspace)

\u0008

\n

换行

\u000a

\r

回车

\u000d

\t

制表符(tab)

\u0009

\"

双引号

\u0022

\'

单引号

\u0027

\\

反斜杠

\u005c

【实例5-3】字符型的使用

  1. 布尔型(Boolean)

①boolean类型有两个常数值,true和false。

②在内存中占1个字节(数组,当作byte处理)或4个字节(单独使用,当作int处理),不可以使用0或非0的整数替代true和false,这点和C语言不同。

【实例5-4】布尔型的使用

注意,一般不会写if(b1==true),关键是也容易写错,少写一个=,变成赋值运算。

六、运算符

计算机的基本用途就是执行数学运算,Java提供了一套丰富的运算符来操作,包括算术运算符、赋值运算符、关系运算符等八种运算符,如下图所示:

①算术运算符

(1)算术运算符分为一元运算符和二元运算符。其中++(自增)、--(自减)属于一元运算符,+、-、*、/、%(取模运算符,即求余操作)属于二元运算符。

(2)二元运算符的运算规则:

整数运算:

如果两个操作数有一个为long,则结果也为long;没有long时,结果为int,即使操作数全为short,byte,结果也是int。

浮点运算:

如果两个操作数有一个为double,则结果为double;只有两个操作数都是float,则结果才为float。

取模运算:

其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如8%3=2,-8%3=-2,8%-3=2。

【实例6-1】算术运算符的使用

②赋值及其扩展赋值运算符

【实例6-2】赋值运算符及扩展赋值运算符的使用

③关系运算符

关系运算符用来比较运算。关系运算的结果是布尔值:true/false。其包含 == 、 != 、>等六种关系运算符。如下图所示:

注意:

(1)=是赋值运算符,而真正的判断两个操作数是否相等的运算符是 == 。

(2)==、!=是所有(基本和引用)类型都可以使用。

(3)>、>=、<、<=仅针对数值类型(byte/short/int/long,float/double以及char)。

【实例6-3】关系运算符的使用

④逻辑运算符

逻辑运算符的操作数和运算结果都是false和true。

运算符

说明

与(&)

只要有一个为false,则false

短路与(&&)

只要有一个为false,则false

或(|)

只要有一个为true,则true

短路或(||)

只要有一个为true,则true

非(!)

取反

异或(^)

相同为false,不同为true

短路与和短路或采用短路的方式。从左到右,如果只通过运算符左边的操作数就能确定该逻辑表达式的值,则不会继续计算运算符的操作数,提高效率。

【实例6-4】逻辑运算符的使用

⑦位运算符

位运算指的是进行二进制位的运算。主要包括~、&、|、^、<<、>>六种位运算符。如下图所示:

【实例6-7】位运算符的使用

⑧字符串连接符

“+”运算符两侧的操作数只要右一个是字符串(String)类型,系统会自动将另一个操作数转换位字符串然后再进行连接。

【实例6-8】字符串连接符的使用

⑨条件运算符

格式:x ? y : z

x为boolean类型表达式,先计算x的值,若为true,则整个运算的结果为表达式y的值,否则整个运算结果为表达式z的值。

【实例6-9】条件运算符的使用

七、运算符优先级的问题

注意:逻辑与、逻辑或、逻辑非的优先级,逻辑非>逻辑与>逻辑或。

【实例7-1】优先级的使用

八、数据类型的转换

1.自动类型转换

自动类型转换指的是容量小的数据类型可以自动转换为容量的数据类型。如下图所示:

其中,实现表示无数据丢失的自动类型转换,而虚线表示在转换时可能转换为右精度的损失。

【实例8-1】自动类型转换的特例

注意,可以将整型常量直接赋值给byte、short、char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。

2.强制类型转换

强制类型转换,又称为造型(cast),用于强制转换数值的类型,可能损失精度。注意,不能在布尔类型和任何数值类型之间做强制类型转换。

【实例8-2】强制转换的特例

其运行结果如下图所示:

可见,强制转换可能损失精度,若超过了表数范围,则会转成一个完全不同的值。

九、基本类型转化时常见的错误和问题

1.操作数比较大的数时,要留意是否溢出,尤其是整数操作时。

2.L和l的问题:

①不要命名名字为l的变量,字母l容易和数字1混淆。

②long类型使用大小L,不要用小写l。

【实例9-1】基本类型转化时常见错误和问题特例

十、Scanner处理键盘输入

Scanner让程序和用户通过键盘交互。注意,在使用Scanner时,需要引入包:import java.util.Scanner;

【实例10-1】Scanner输入特例。

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值