Java核心技术——基本程序设计语法2

本文介绍了Java编程中的基本概念,包括变量的命名规则、初始化和类型转换,强调了变量名的大小写敏感性和避免使用保留字。同时,讲解了常量的声明与使用,特别是final关键字的作用。此外,详细阐述了算术运算符、逻辑运算符和位运算符的用法,以及自增自减运算符。还提到了Math类中的数学函数和数值转换方法。最后,讨论了枚举类型在限定变量取值范围时的重要性。
摘要由CSDN通过智能技术生成

基本程序设计语法2

变量

  1. 变量名必须是一个以字母开头并由数字构成的序列,在Java中字母括’A’—‘Z’、‘a’—‘z’、’_’、’$‘或在某种语言中表示字母的任何Unicode字符。同样数字包括’0’~'9’和在某种语言中表示数字的任何Unicode字符。变量名中所有字符都是有意义的,并且大小写敏感,变量名的长度基本上没有限制。
  2. 尽管 $ 是一个合法的 Java 字符, 但不要在你自己的代码中使用这个字符。它只用在 Java 编译器或其他工具生成的名字中。
  3. 不能使用Java保留字作为变量名
  4. 可以在一行中声明多个变量:
    int i,j;//both are integers
    
    但是最好还是逐一声明变量,提高程序的可读性。
    虽然变量名存在大小写敏感,但是最好不要使两个变量名只存在大小写上的差异,可以将变量名命名为字符+类型名的形式。
  5. 变量初始化
    • 声明一个变量后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量。赋值号(=),变量名=相应赋值。可以将变量的声明和赋值放在同一行中。也可以放在其他地方。
    int vacationDays;
    System.out.println(vacationDays);//ERROR---variable notinitialized
    
    int vacationDays;
    vacationDays = 12;
    
    int vacationDays = 12;
    
    double salary = 6500.0;
    System.out.println(salary);
    int vacationDays = 12;//OK to declare a variable here
    
    • Java中不区分变量的声明和定义,C/C++中区分变量的声明与定义。
    int i=0; //这是一个定义
    extern int i; //这是一个声明
    
  6. 常量
    • 在Java中利用关键字 final 指示常量
    public class Constant
    {
    	public static void main(String[] args)
    	{
    		final double CM_PER_INCH = 2.54;
    		double paperWidth = 8.5;
    		double paperHeight = 11;
    		System.out.println("Paper size in centimeters: "+ paperWidth*CM_PER_INCH +" by "+ paperHeight*CM_PER_INCH);
    	}
    }
    
    • 关键字 final 表示的这个变量只能被赋值一次。一旦被赋值之后,就不能再修改了。习惯上,常量名使用全大写。
    • 在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字 static final 设置一个类常量。类常量通常定义于 main 方法的外部。因此,因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为 public,那么其他类的方法也可以使用这个常量。
    public class Constant2
    {
    	public static final double CM_PER_INCH = 2.54;
    	public static void main(String[] args)
    	{
    		double paperWidth = 8.5;
    		double paperHeight = 11;
    		System.out.println("Paper size in centimeters: "+ paperWidth*CM_PER_INCH +" by "+ paperHeight*CM_PER_INCH);
    	}
    }
    

运算符

在 Java 中,使用算术运算符 +、-、 *、/ 表示加、减、 乘、除运算。 当参与 / 运算的两个操作数都是整数时, 表示整数除法;否则, 表示浮点除法。 整数的求余操作(有时称为取模)用 % 表示。例如,15/2 等于 7,15%2 等于 1 , 15.0/2 等于 7.5。
 需要注意, 整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果。
  1. 数学函数与常量
    • 在Math类中,包含了各种各样的数学函数
    import static java.lang.Math.*;
    
序号方法描述
1xxxValue()将Number对象转换为xxx数据类型的值并返回
2compareTo()将Number对象与参数比较
3equals()判断Number对象是否与参数相等
4valueOf()返回一个Number对象指定的内置数据类型
5toString()以字符串形式返回值
6parseInt()将字符串解析为int类型
7abs()返回参数的绝对值
8ceil()返回大于等于(>=)给定参数的最小整数,类型为双精度浮点型
9floor()返回小于等于(<=)给定参数的最大整数
10rint()返回与参数最接近的整数,类型为双精度浮点型
11round()它表示四舍五入,算法为 Math.floor(x+0.5),即将原来的数字加上 0.5 后再向下取整,所以,Math.round(11.5) 的结果为 12,Math.round(-11.5) 的结果为 -11
12min()返回两个参数中的最小值
13max()返回两个参数中的最大值
14exp()返回自然数底数e的参数次方
15log()返回自然数底数的对数值
16pow()返回第一个参数的第二个参数次方
17sqrt()求参数的算术平方根
18sin()求指定double类型参数的正弦值
19cos()求指定double类型参数的余弦值
20tan()求指定double类型参数的正切值
21asin()求指定double类型参数的反正弦值
22acos()求指定double类型参数的反余弦值
23atan()求指定double类型参数的反正切值
24atan2()将笛卡尔坐标转换为极坐标,并返回极坐标的角度值
25toDegrees()将参数转化为角度
26toRadians()将角度转化为弧度
27random()返回一个随机数
28Math.PI()返回π的近似值
29Math.E()返回e的近似值
  1. 数值类型之间的转换
    数值类型之间的合法转换
    • 上图中实心箭头表示数值转换之间无信息丢失,虚箭头表示可能精度损失的转换
    • 当使用两个数值进行二元操作时,要将两个操作数转换为同一种类型,然后再进行计算
      • 如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
      • 否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。
      • 否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。
      • 否则, 两个操作数都将被转换为 int 类型。
  2. 强制类型转换
    • 强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。
    double x = 9.997;
    int nx = (int)x;//nx = 9
    
    • 强制类型转换通过截断小数部分将浮点值转换为整型
    • 如果想对浮点数进行舍人运算, 以便得到最接近的整数那就需要使用 Math.round 方法:
    double x = 9.997;
    int nx = (int)Math.round(x);//nx = 10 
    
  3. 结合赋值和运算符
    • 可以在赋值中使用二元运算符
    x += 4;
    //等价于
    x = x + 4; 
    //强制转换
    x += 3.5; //x 为整数,是合法的,将把x设置为(int)(x+3.5),发生了强制类型转换
    
  4. 自增与自减运算符
    • 在 Java 中, 借鉴了 C 和 C++的做法,也提供了自增、自减运算符: n++ 将变量 n 的当前值加 1, n-- 则将 n 的值减 1。它们的操作数不能是数值。
    • “ 前缀” 形式:++n。后缀和前缀形式都会使变量值加 1 或减 1。但用在表达式中时,二者就有区别了。前缀形式会先完成加 1; 而后缀形式会使用变量原来的值。
    int n = 12;
    n++;
    int m = 7;
    ++m;
    int a = 2*++m;
    int b = 2*n++;//不推荐在表达式中使用自增自减运算符,容易导致误解 
    
  5. 关系和boolean运算符
    • 相等 or 不等关系
      3==7;// false
      3!=7;//true
      
    • 经常使用的 < (小于)、> (大于)、<=(小于等于)和 >= (大于等于)运算符。
    • 使用 && 表示逻辑“ 与” 运算符,使用丨| 表示逻辑“ 或” 运算符。从 != 运算符可以想到,感叹号!就是逻辑非运算符。&& 和丨| 运算符是按照“ 短路” 方式来求值的: 如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。
      expression1 && expression2
      //eg:
      x != 0 && 1/x>x+y // no division by 0
      // 如果 x 等于 0, 那么第二部分就不会计算。因此,如果 X 为 0, 也就不会计算 1 / x , 除 以 0 的错误就不会出现。
      expression1 || expression2
      // 如果第一个表达式为 true,expression1 || expression2 的值就自动为 true, 而无需计算第二个表达式。
      
    • Java 支持三元操作符?:
      condition ? expression1 : expression2
      // 如果条件为true,就为第一个表达式的值,否则计算为第二个表达式的值
      //eg:
      x < y ? x : y // 返回x和y中较小的一个		
      
  6. 位运算符
    • 处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。
      &("and")
      |("or")
      ^("xor")
      ~("not")
      
    • 应用在布尔值上时, & 和丨运算符也会得到一个布尔值。这些运算符与 && 和丨丨运算符很类似,不过 & 和丨运算符不采用“短路”方式来求值, 也就是说,得到计算结果之前两个操作数都需要计算
    • 有>> 和 << 运算符将位模式左移或右移。需要建立位模式来完成位掩码时, 这两个运算符会很方便
    • 左移 >>> 运算符会用 0 填充高位,这与 >>不同,它会用符号位填充高位。不存在<<<运算符。
    • 移位运算符的右操作数要完成模 32 的运算(除非左操作数是 long 类型, 在这种情况下需要对右操作数模 64 )。
  7. 括号与运算符级别
    • 同一个级别的运算符按照从左到右的次序进行计算(除了表中给出的右结合运算符外)。运算符优先级
  8. 枚举类型
    • 有时候,变量的取值只在一个有限的集合内。例如:销售的服装或比萨饼只有小、中、大和超大这四种尺寸。当然, 可以将这些尺寸分别编码为 1、2、3、4 或 S、 M、 L、X。但这样存在着一定的隐患。在变量中很可能保存的是一个错误的值(如 0 或 m)。针对这种情况, 可以自定义枚举类型。枚举类型包括有限个命名的值。
    enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE};//自定义枚举类型
    Size s = Size.MEDIUM;//声明枚举类型
    // Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值,null 表示这个变量没有设置任何值。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值