热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java培训教程分享:变量与常量

在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量。变量与常量在编写程序中需要经常使用,本节将详细介绍变量与常量的使用方法。标识符标识符(identifier)

  在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量。变量与常量在编写程序中需要经常使用,本节将详细介绍变量与常量的使用方法。

  标识符

  标识符(identifier)用于命名变量、常量、方法、类、包等实体。

  标识符命名规则:

  标识符是由字母、数字、下划线“_”、美元符号“$”组成的字符序列。

  标识符必须以字母、下划线“_”、美元符号“$”开头,不能以数字开头。

  标识符不能是关键字和保留字。

  标识符不能包含空格。

  例如,$6,name,Class,java,_pwd都是合法的标识符,而2a,class,c++,hello world,a@都是非法的标识符,不符合标识符命名规则。Java编译器会检测出非法标识符并报错。

  变量的定义

  变量的使用是程序设计中一个十分重要的环节,定义变量就是告诉编译器这个变量的数据类型,这样编译器才知道需要配置多少内存空间给它,以及它能存放什么样的数据。在程序运行过程中,空间内的值是变化的,这个内存空间就称为变量。为了便于操作,给这个空间取个名字,称为变量名。变量的命名必须是合法的标识符。内存空间内的值就是变量值,在声明变量时可以是没有赋值,也可以是直接赋给初值。

  声明变量的语法格式如下:

  数据类型 变量名;

  如需声明多个相同类型变量时,可使用下面的语法格式:

  数据类型 变量名1,变量名2,…,变量名n;

  接下来,通过具体的代码学习变量的定义,具体示例如下:

  int n,q=1; // 定义了二个int类型的变量,为q赋初值为1

  double x, y, z; // 定义了三个double类型的变量

  对于变量的命名并不是任意的,应遵循以下4条规则:

  (1)变量名必须是一个有效的标识符。

  (2)变量名不可以使用Java关键字。

  (3)变量名不能重复。

  (4)应选择较有意义的单词作为变量名。

  变量的类型转换

  Java的数据类型在定义时就已经明确了,但程序中有时需要进行数据类型的转换,Java允许用户有限度地进行数据类型转换。数据类型转换方式分为自动类型转换和强制类型转换两种。

  1.自动类型转换

  自动类型转换也称隐式类型转换,指两种数据类型转换过程中不需要显式地进行声明。Java会在下列的条件成立时,自动做数据类型的转换:

  (1)转换的两种数据类型彼此兼容。

  (2)目标数据类型的取值范围比原类型大。

  类型转换只限该行语句,并不会影响原先定义的变量类型,而且自动类型转换可以保持数据的精确度,不会因为转换而丢失数据内容。

  Java支持自动类型转换的类型,如图所示。

1

  图2.1 自动数据类型转换图

  自动类型转换示例说明如下:

  byte b = 97; // 声明byte型变量值为97

  char c = b; // 错误,byte类型不能自动类型转换为char类型

  float f = b; // 正确,byte类型能自动类型转换为float类型

  double d = 'c'; // 正确,char类型能自动类型转换为double类型

  在Java中,任何基本类型的值和字符串进行链接运算“+”时,基本类型的值将自动类型转换为字符串类型,字符串用String类表示,是引用类型。具体示例如下:

  String s = 97; // 错误,不能直接将基本类型赋值给字符串

  String str = 97 + ""; // 正确,基本类型的值自动转换为字符串,""代表空字符串

  2.强制类型转换

  强制类型转换也称为显式转换,指两种数据类型转换过程中需要显式地进行声明。当转换的两种数据类型彼此不兼容,或者目标数据类型的取值范围小于原类型时,而无法进行自动类型转换,此时就需要进行强制类型转换,如例2-1所示。

  例2-1 TestTypeCast.java

  1 public class TestTypeCast {

  2 public static void main(String[] args) {

  3 int n = 128;

  4 byte b = n;

  5 System.out.println(b);

  6 }

  7 }

  程序的运行结果如图所示。

2

  图2.2 例2-1运行结果

  图2.9出现了编译错误,提示第4行代码类型不兼容,出现这样错误的原因是将int转换到byte时,int类型的取值范围大于byte类型的取值范围,转换会导致精度损失,也就是用1个字节的变量来存储4个字节的变量值。

  对第4行代码进行强制类型转换,修改为下面的代码:

  byte b = (byte) n;

  程序的运行结果如图所示。

3

  图2.3 例2-1修改后运行结果

  当试图强制把取值范围大的类型转换为取值范围小的类型时,将会引起溢出,从而导致数据丢失。图2.10中运行结果为-128,出现这种现象的原因是,int类型占4个字节,byte类型占1个字节,将int类型变量强制转换为byte类型时,Java会将int类型变量的3个高位字节截断,直接丢弃,变量值发生了改变,如图所示。

4

  图2.4 强制转换过程

  变量的作用域

  变量的作用域是指它的作用范围,只有在这个范围内,程序代码才能访问它。变量声明在程序中的位置决定了变量的作用域。变量一定会声明在一对大括号中,该大括号所包含的代码区域就是这个变量的作用域,下面通过一个示例来分析变量的作用域。如例2-2所示

  例2-2 TestScope.java

  1 public class TestScope {

  2 public static void main(String[] args) {

  3 int x = 100; // 定义变量x

  4 {

  5 int y = 200; // 定义变量y

  6 }

  7 System.out.println(y); // 访问变量y

  8 }

  9 }

  程序的运行结果如图所示。

5

  图2.5 例2-2编译报错

  图2.12出现了编译错误,提示“找不到符号”。报错的原因在于,定义的变量y超出了作用域。将第7行代码放置在第5行代码之后,再次编译程序不再报错,程序的运行结果如图所示。

6

  图2.6 例2-2运行结果

  常量

  常量就是一个固定的值,是不能被改变的数据。Java程序中使用的直接量称为常量,是在程序中通过源代码直接给出的值,在程序执行过程中都不会改变,也称最终量。

  1.整型常量

  整型常量是整数类型的数据,可分为二进制、八进制、十进制和十六进制4种,具体表示如下:

  二进制:由数字0和1组成,用0b或0B开头的字面值,如0b110、0B110。

  八进制:由数字[0, 7]范围内的整数组成,用0开头的字面值,如0110。

  十进制:由数字[0, 9]范围内的整数组成的字面值,如110。

  十六进制:由数字[0, 9]和字符[A, F]范围内组成,用0x或0X开头的字面值,如0x12、0XAbA。

  2.浮点数常量

  浮点数就是实数,包含有小数点,可以用标准小数形式和科学计数法形式两种方式表示,具体表示如下:

  标准小数:由整数部分、小数点和小数部分构成,如1.5、2.2。

  科学计数法:由一个标准式加上一个以10为底的幂构成,两者间用e或E隔开,如1.2e+6、5E-8。

  在Java中,分为float单精度浮点数和double双精度浮点数两种类型,单精度浮点数以f或F结尾,双精度浮点数以d或D结尾。不加后缀会默认为double双精度浮点数。

  3.字符常量

  字符常量有三种形式,具体表示如下:

  用单引号括起来的字符。如'a'、'0'。

  转义字符。如'\n'、'\t'、'\0'。

  用Unicode值表示的字符,格式是'\uXXXX',其中XXXX代表一个十六进制的整数。如'\u0000'。

  4.字符串常量

  字符串常量就是用双引号括起来的字符序列。如"欢迎学习Java"、"A"。

  5.布尔常量

  布尔常量就是布尔类型的两个值true和false,用于表示真和假。

  6.null常量

  null常量只有一个值null,表示对象引用为空。

  多学一招:转义字符

  Java定义了一种特殊的标记来表示特殊字符,这种标记称为转义序列,转义序列由(\)后面加上一个字符或者一些数字位组成。如\t表示Tab字符的转义符,\u000A表示换行符\n。转义序列中的序列号作为一个整体翻译,而不是分开翻译。一个转义序列被当做一个字符。

  常用的转义序列如下:

  \b,退格键,Unicode码为\u0008。

  \t,Tab键,Unicode码为\u0009。

  \n,换行符,Unicode码为\u000A。

  \r,回车符,Unicode码为\u000D。

  反斜杠\被称为转义字符,它是一个特殊字符。有特殊意义的字符,无法直接表示,需要用转义序列来表示。

  \',单引号字符,Java中单引号表示字符的开始和结束,直接写单引号字符('),编译器会匹配前两个是一对,会报错,所以需要使用转义字符\'。

  \",双引号字符,Java中双引号表示字符串的开始和结束,要显示双引号需要使用转义字符\",如"欢迎学习\"Java\""。

  \\,反斜杠字符,Java中的反斜杠是转义字符,要显示反斜杠,需要使用转义字符\\。

  本文来自千锋教育,转载请注明出处。


推荐阅读
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
wszr12345597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有