Java:数据类型、变量、运算符、控制流程

每个Java程序都要包含一个main方法,其形式如下:

public class ClassName {

    public static void main(String[] args) {
        program statements
    }

}

Java的类和C++很类似,但还是有所不同。Java中所有函数都是属于某个类的方法,因此,main方法必须有一个外壳类。
main方法的String[] args参数表明main方法接收一个字符串数组,也即命令行参数。例如运行程序时:

java Message -g cruel world

则args数组将包含:

args[0]:"-g"
args[1]:"cruel"
args[2]:"world"

注意到和C++不同,此处的程序名没有存储在args数组中。

数据类型

在Java中,一共有8种基本类型,包括4种整型、2种浮点类型、1种用于表示Unicode字符单元的字符类型char和1种boolean类型。

整型

类型字节数取值范围
int4字节-2147483648~2147483647(20亿)
short2字节-32768~32767
long8字节-9 223 372 036 854 775 808~9 223 372 036 854 775 807
byte1字节-128~127

在Java中,整型的范围与运行Java代码的机器无关,这就解决了跨平台时整数溢出等问题。
Java没有无符号类型(unsigned)。

浮点类型

类型字节数
float4字节
double8字节

还有3个表示 溢出和出错情况的特殊浮点数值:

  • 正无穷大 Double.POSITIVE_INFINITY
  • 负无穷大 Double.NEGATIVE_INFINITY
  • NaN(不是一个数字) Double.NaN

然而,浮点数不适用于禁止出现舍入误差的金融计算。

char类型

Unicode编码单元可以表示为十六进制值,其范围从\u0000到\uffff。
设计Unicode的目的,是要统一原先不同的编码方案。
代码点是指与编码表中某个字符相对应的代码值。例如,U+0041就是字母A的代码点。Unicode的代码点可以分成17个代码级别。
char类型用UTF-16编码描述一个代码单元。

boolean类型

和C++不同,整型值和布尔值不能相互替换。Java中的布尔值只有false和true两个值。

大数值

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的BigInteger和BigDecimal类。
BigInteger类实现了任意精度的整数运算,而BigDecimal类实现了任意精度的浮点数运算。
使用valueOf方法可以将普通的数转换成大数值:

BigInteger a = BigInteger.valueOf(100);

但遗憾的是,和C++不同,Java没有提供运算符重载功能,因此不能使用普通的算术运算符(+、-、*、\),而要使用大数值类中的add和multiply方法。

BigInteger c = a.add(b); //c=a+b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d=c*(b+2)

BigInteger类的其他常用函数有:

BigInteger subtract(BigInteger other); //减
BigInteger divide(BigInteger other); //除
BigInteger mod(BigInteger other); //取余
int compareTo(BigInteger other); //如果相等,返回0;如果小于other,返回负数;如果大于other,返回正数

变量

常量

和C++中使用const定义常量不同,Java中使用关键字final定义常量,它表示这个变量只能被赋值一次。习惯上,常量名一般使用全大写。

运算符

位运算符

“>>”和“<<”运算符将二进制位进行右移或左移操作。
注意,“>>”是用符号位填充高位,而“>>>”是用0填充高位。

数学函数与常量

在Math类中,包含了各种数学函数,例如使用sqrt方法求取平方根:

double x=4;
double y=Math.sqrt(x);

其他常用的方法还有:

Math.pow(x,a)
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
Math.exp
Math.log
Math.log10

另外,Java还提供了两个用于表示π和e常量的近似值:

Math.PI
Math.E

其实不必在调用方法时添加前缀“Math.”,只要在源文件的顶部加上:

import static java.lang.Math.*;

这叫做静态导入。

强制类型转换

double x=9.997;
int nx=(int) x;

强制类型转换通过截断小数部分将浮点值转换为整型。
如果想进行四舍五入,那就需要使用Math.round方法:

double x=9.997;
int nx=(int)Math.round(x);

调用round时仍然需要使用强制类型转换,这是因为round方法返回的结果为long类型。

控制流程

和C++不同,Java中不能在嵌套的两个块中声明同名的变量,例如下面的代码就是错误的:

public static void main(String[] args)
{
    int n;
    {
        int n;
    }
}

终止语句

和C++不同,Java中增加了一条**带标签的**break,用于跳出多重嵌套的循环语句。标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号。

int n=0;
...
read_data:
while(...)
{
    ...
    for(...) 
    {
        ...
        if(n<0) break read_data;
    }
}
//检查是break跳出还是正常结束循环
if(n<0)
{
...
}
else
{
...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值