Java自学第一课之基本数据类型与表达式——自学笔记
第一节主要学习变量与常量、基本数据类型、类型转换的Java语言基本知识
一、变量与常量
1.标识符
要学习变量和常量,首先要知道标识符的概念。标识符是一个名称,是用户编程时使用的名字,对于变量、常量、函数、语句块也有名字,我们统统称之为标识符。不同的编程语言对标识符的取名规则大体相同,Java中对标识符的取名有以下几点规则:
- 标识符由字母、数字、下划线“_”、美元符号“$”组成,第一个字符不能是数字。如:1student,开头为数字,不合法。
- 不能把java关键字和保留字作为标识符。如:if,是关键字,不合法。
- 标识符没有长度限制。
- 标识符对大小写敏感。如:A和a是两个标识符。
有一部分已被系统定义,用户不能用来作为标识符,被称为保留字和关键字,如下所示:
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
其中const和goto是java的保留字,保留字是为java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。是语言已经定义过的字,一些保留字可能没有相对应的语法,考虑到扩展性,为了向后兼容不能再将其作为变量名。有面试题问Java中有goto关键字吗,答案是有的,是作为保留关键字,现在几乎不用。
2.变量
变量是一个由标识符命名的项,它具有类型和作用域。变量的声明语法如下:Type varName [=value][, varName [=value]…];
Type为数据类型,VarName为变量名(变量名的命名一般采用驼峰命名并且见名知意,这是一种规范,增加程序可读性,并不是规定)。方括号中为可选项,即同时声明并赋值多个变量 。如int a=1,b=2;
变量的作用域以后再写。
3.常量
在变量的声明前加上关键字final修饰符,该变量就变成了一个常量,常量一旦被初始化(赋值)就不能再被改变了其值了。语法如下:
final int a=1;
变量与常量还有许多不一样,以后再写。
二、基本数据类型
数据也有类型,Java的基本数据类型(还有其他类型不是基本数据类型)有8种:byte、short、int、long、float、double、char、boolean。
其中 数字型:
类型 | 说明 | 长度 | 最小值 | 最大值 |
---|---|---|---|---|
byte | 带符号微整数 | 8位 | -128 | 127 |
short | 带符号短整数 | 16位 | -2^15 | 2^15-1 |
int | 带符号整数 | 32位 | -2^31 | 2^31-1 |
long | 带符号长整数 | 62位 | -2^63 | 2^63-1 |
float | 单精度浮点型 | 32位 | -2^149 | 太大了 |
double | 双精度浮点型 | 64位 | 2^-1074 | 太大了 |
字符型:char
布尔型:boolean,只有两个值true和flase
三、 类型转化
每个表达式都有类型,如果表达式的类型和上下文不符,要么产生编译错误,要么发生隐含的类型转换。类型转换可以分为扩展转换和窄化转换。
1.扩展转换(自动转换)
整型数据从低精度类型转换为高精度时不会损失精度,即byte,short(char),int,long
浮点数和整数的转换会发生精度丢失,程序也会报错。从float到double不会丢失精度,但反过来会丢失精度。
2.窄化转换(强制转换)
转换按照double、float、long、int、short、byte这个方向会丢失精度,这时程序会报错,但可以用强制转换。转换方式为int a;float b=2;a=(int)b;
下面四中情况可能发生类型转换。
- 赋值转换:表达式运算结果的类型和被赋值的变量类型不一致时,表达式结果的类型自动被转换成变量所对应的类型。
- 方法的调用转换:在方法或者构造方法中进行类型转换。
- 强制类型转换:讲一个表达式类型强制转换为另一个类型,例如(double)6。
- 字符串转换:在"字符串+操作数"的情况下,操作数会被自动转换成字符串类型。