java变量、数据类型和运算符-2

简介: 2.1.4 变量命名规则旅馆可以随心所欲地给房间命名,可以是数字"1001",也可以是一些有趣的名称,如"美国总统"、"英国女王"、"埃塞俄比亚王妃"等。但是在给变量命名时,就要受到一些约束,如表2-3所示。那么什么样的名称才正确呢?

2.1.4 变量命名规则


旅馆可以随心所欲地给房间命名,可以是数字"1001",也可以是一些有趣的名称,如"美国总统"、"英国女王"、"埃塞俄比亚王妃"等。但是在给变量命名时,就要受到一些约束,如表2-3所示。那么什么样的名称才正确呢?

表2-3变量命名规则


image.png


对照一下,同学们声明的变量名是否符合表2-3中的要求?另外,Java变量名的长度没有任何限制,但是Java语言区分大小写,所以price和Price是两个完全不同的变量。


注意:Java关键字是Java中定义的、有特别意义的标识符,如public、int、class、boolean、void、char、double、package、static等。随着学习的深入,会接触越来越多的Java关键字。Java关键字不能用做变量名、类名、包名等。


规范:变量名要简短且能清楚地表明变量的作用,可以由一个或多个单词组合而成,通常第一个单词的首字母小写,其后单词的首字母大写。例如:


int ageOfStudent;      //学生年龄


int ageOfTeacher;      //老师年龄


经验:为了日后更容易维护程序,变量的名称要让人一眼就能看出这个变量的作用。例如,ageOfStudent代表学生的年龄,ageOfTeacher代表老师的年龄。但是在初学时,很多人喜欢使用一些简单的字母来作为变量名称,如a、b、c等。这样尽管正确,但是以后会发现,如果有100个变量,在使用时就会分不清某个变量代表什么意思。所以要尽量使用有意义的变量名,且最好使用简短的英文单词。


2.1.5 常见错误


尽管同学们可能很细心,或者很自信已经掌握了刚刚学到的所有知识,但当进行实战时,所编写的代码还是会不可避免地被编译器提示出错。下面列举一些初学者常犯的错误。


1.变量未赋值先使用


在前面的讲解中一再强调"变量要先声明后使用",那么如果程序使用了未被赋值的变量会怎样呢?


常见错误1


public class Error1 {
   /*
    * 常见错误
    */
   public static void main(String[] args) {
      String title;            //声明变量title存储课程名
        System.out.println(title);     //从控制台输出变量的值
   }
}


编译运行代码,编译器会提示编译错误,如图2.2所示。


排错方法:按照所学的内容,使用前要给变量赋值。


2. 使用非法的变量名


变量在命名时如果不符合规则,Java编译器同样无法正常编译。


常见错误2


public class Error2 {
    /*
     * 常见错误
     */
    public static void main(String[] args) {
        int %hour = 18;            //声明变量hour存储学时
        System.out.println(%hour);     //从控制台输出变量的值
    }
}


将代码编译运行,IDEA提示编译错误,如图2.3所示。


图2.3使用非法变量名的错误提示页面


排错方法:按照变量的命名规则,修改不合法的变量名。


3. 变量不能重名


常见错误 3


public class Error3 {
    /*
     * 常见错误
     */
    public static void main(String[] args) {
        String name = "张三";    //声明变量存储“张三”
        String name = "李四";    //声明变量存储“李四”
    }

将代码编译运行,IDEA提示图2.4所示的错误。


图 2.4 变量重名的错误提示页面


排错方法:使用两个不同的变量名来存储。


2.2 运算符


2.2.1 赋值运算符


在前面章节的学习中,使用最多的是什么呢?那就是 "="。例如:


int before = 20;  //存储本金


使用将数值1000放入变量money的存储空间中,称为赋值运算符。例如:


double weight = 177.5;


int weight = 78;


问题 学员王浩的Java成绩是80分,学员张萌的Java成绩与王浩的相同,输出张萌的成绩。


示例 2


public class OperatorDemo {
    public static void main(String [] args) {
        int wangScore = 80;        //王浩成绩
        int zhangScore;             //张萌成绩
        zhangScore = wangScore;
        System.out.println("张萌的成绩是: " + zhangScore );
    }

由示例2可知,可以将某个数值赋给变量,或是将某个表达式的值赋给变量。表达式就是符号(如加号、减号)与操作数(如b、3等)的组合。例如:


int zhangScore;


int a = (b + 3) * (b - 1);


最后一个语句将变量b的值取出后进行计算,然后将计算结果存储到变量a中。如果写成“(b + 3) * (b - 1) =a”,则会出错。切记,”=” 的功能是将等号右边表达式的结果赋给等号左边的变量。


2.2.2 算术运算符


我们小时候就开始学习如何进行算术运算了。最简单的算术运算是加、减、乘、除。那么,如何编写程序让计算机来完成算术运算呢? Java中提供运算功能的就是算术运算符,它主要使用数值操作数进行数学计算。表2-4展示了常用的算术运算符。


表2-4常用算术运算符



image.png


下面就使用Java提供的算术运算符来解决一个简单的问题。


问题:从控制台输入学员王浩的三门课程 ( STB、Java、SQL)的成绩,编写程序实现:Java课程和SQL课程的分数之差;三门课程的平均分。


分析:先声明变量来存储数据,数据来源于用户从控制台中输入的信息;然后进行计算并输出结果。

package cn.dbit.demo;
import java.util.Scanner;
public class ScoreStat {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("STB的成绩是:");
        int stb = input.nextInt();
        System.out.print("Java的成绩是:");
        int java = input.nextInt();
        System.out.print("SQL的成绩是:");
        int sql = input.nextInt();
        int diffen;
        double avg;
        System.out.println("-------------------------------------");
        System.out.println("STB\tJava\tSQL");
        System.out.println(stb + "\t" + java + "\t" + sql);
        System.out.println("-------------------------------------");
        diffen = java - sql;
        System.out.println("Java和SQL的成绩差:" + diffen);
        avg = (stb + java + sql) / 3;
        System.out.println("3门课的平均分是:" + avg);
    }
}


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


图2.5示例3的运行结果


示例3与前面章节不同的是,可以从控制台输入数据,然后把它存储在已经定义好的变量中,而不是直接在程序中给变量进行赋值。这种交互是通过两行简单的代码实现的。


Scanner input = new Scanner(System.in);


int stb = input.nextInt();


这两行代码的作用就是通过键盘的输入得到STB的成绩。这是Java所提供的从控制台获取键盘输入的功能,就像System.out.println("")可以向控制台输出信息一样。这里,获取的是一个整型变量,因此调用nextInt()方法。如果获取的是字符串,则需要调用next()方法。需要注意的是要使用这个功能,必须在Java源代码的第一行写上如下语句。


import java.util.Scanner;


或者


import java.util.*;


后面的章节会做进一步解释。这里,大家只需要记住它的写法即可。


另外,算术运算符的使用基本上和平时进行的加减乘除运算一样,也遵守 "先乘除后加减,必要时加上括号表示运算的先后顺序" 的原则。要特别注意的是,在使用 "/" 运算符进行运算时,一定要分清哪一部分是被除数,必要时应加上括号。例如:


System.out.println(2+4+6/2);


以上代码计算的是2+4+(6/2),而不是(2+4+6)/2。


另外,还有两个非常特殊且有用的运算符:自加运算符 "++" 和自减运算符"--"。它们不像别的算术运算符那样,运算时需要两个操作数,如 "5+3","++" 和运算符只需要一个操作数。例如:


int num1 = 3;
int num2 = 2;
num1++;
num2--;


这里,"num1++" 等价于 "numl =num1+1" , "num2—" 等价于"num2=num2-1"。因此,经过运算,numl的结果是4, num2的结果是1。为什么要写成这样?现在也许只觉得它是写起来简单一点,但在以后的学习中,大家会慢慢发现它的优点。


2.2.3 数据类型转换


1.为什么需要数据类型转换


实际中可能会遇到下面的问题。


问题:某班第一次考试平均分是81.29,第二次比第一次增加了 2分,第二次的平均分是多少?


分析:有时会遇到这样的情况:必须将一个int数据类型的变量与一个double数据类型的变量相加。那么,不同的数据类型能进行运算吗?运算的结果又是什么数据类型呢?


下面就分别回答这些问题。


2.如何进行数据类型转换


1)自动数据类型转换


要解决不同类型之间的数据计算问题,就必须进行数据类型转换。示例4用来解决刚才的问题。


示例4


代码:


package cn.dbit.demo;

public class AutoTypeChange {
    public static void main(String[] args) {
        double fisrtAvg = 81.29;
        double secondAvg;
        int rise = 2;
        secondAvg = fisrtAvg + rise;
        System.out.println("第二次平均分是:" + secondAvg);
    }
}

解析:


package cn.dbit.demo;


public class AutoTypeChange {
    public static void main(String[] args) {
        double fisrtAvg = 81.29;      //第一次考试的平均分
        double secondAvg;         //第二次考试的平均分
        int rise = 2;        //增长的分数
        secondAvg = fisrtAvg + rise;     //自动类型转换
        System.out.println("第二次平均分是:" + secondAvg);   /*显示第二次考试平均分*/
    }
}



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


图2.6示例4的运行结果


从代码中可以看出,double型变量firstAvg和int型变量rise相加后,计算的结果赋给一个double型变量secondAvg.这时就发生了自动类型转换。


规则1 :如果一个操作数为double类型,则整个表达式可提升为double 类型。


首先,Java具有应用于一个表达式的提升规则,表达式(firstAvg + rise)中操作数firstAvg是double类型,则整个表达式的结果为double类型。这时,int类型变量「ise隐式地自动转换成double类型,然后它和double类型变量firstAvg相加,最后结果为double类型并赋给变量secondAvg。那么为什么int类型变量可以自动转换成double类型变量呢?这也是因为Java语言的一些规则造成的。将一种类型的变量赋给另一种类型的变量时,就会发生自动类型转换。


例如:


int socre = 80;
double newScore = score;


这里,int类型变量score隐式地自动转换为double类型变量。但是,这种转换并不是永远无条件发生的。


规则2:满足自动类型转换的条件。


两种类型要兼容:数值类型(整型和浮点型)互相兼容。


目标类型大于源类型:double类型可以存放int类型数据,因为为double类型变量分配的空间宽度足够存储int类型变量。因此,我们也把int类型变量转换成double类型变量称为 "放大转换"。


相关文章
|
2月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
193 2
|
2月前
|
Java Go 开发工具
【Java】(4)五种运算符的说明(&&、||、>=、>、<=、<)、4种控制语句(if、for、while、dowhile)、输入和输出说明
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的的类型byte类型,无论怎么进行加或追减,最终该变量的数据类型还是byte类型。注:一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给a。并且,连接运算之后的结果还是一个字符串类型。表达式1 : 表达式2。
140 1
|
2月前
|
Java Go 开发工具
【Java】(2)Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则。例如:十进制例如:二进制计算机在任何情况下都只能识别二进制。
121 1
|
3月前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
123 12
|
9月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
159 13
|
4月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
5月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
247 0
|
6月前
|
人工智能 Java
Java运算符中的隐式转换
本文介绍了 Java 运算符中的隐式类型转换规则,涵盖算数、逻辑、位、关系、赋值及其他运算符。重点分析了算数和位运算符在处理小于 int 位长的数据时会自动转换为 int 类型的特性,并通过代码示例说明可能引发的类型不匹配错误。逻辑、关系、赋值及其他运算符则不涉及类型转换。总结指出,部分运算符在计算时会将小位长数据隐式转为 int 类型,结果也为 int。
|
6月前
|
人工智能 Rust Java
Java中的算数、关系、逻辑、条件、赋值 五大运算符详解
本文介绍了Java中的运算符及其优先级,包括算数运算符(如+、-、*、/、%、++、--)、关系运算符(如<、>、==、!=)、逻辑运算符(如&&、||、!)、条件运算符(三目运算符)和赋值运算符(如=、+=、-=等)。详细解释了每种运算符的功能与用法,例如自增自减运算符的特点、逻辑运算符的短路法运算以及位运算符的操作规则。最后还提供了运算符优先级表格,帮助开发者理解复杂表达式的计算顺序。文中提醒,在实际开发中,建议使用括号明确运算顺序以提高代码可读性。
289 0
|
9月前
|
SQL IDE 算法
《从头开始学java,一天一个知识点》之:运算符与表达式:算术、比较和逻辑运算
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」,每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《控制流程:if-else条件语句实战》。
190 6