第3章 java的基本程序设计结构
数据类型
整型
public class Test_demo1 {
public static void main(String[] args) {
int x=0x15;//十六进制
int y=010;//八进制
// int z=123213l;//长整型 报错
// long z=4000000000000;不加L报错
long z=4000000000000l;
long a=4_000_000_000_000l;//加下划线更加容易读懂,编译器会自动除去这些下划线 java7之后的功能
byte b=0b11;
byte c=0B11;
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
结果:
21
8
4000000000000
4000000000000
3
3
浮点类型
double 表示这种类型的数值精度是float类型的两倍。绝大部分程序都采用double类型。
float类型的数值有一个后缀F或f。没有后缀F的浮点数值都默认为double类型。也可以在浮点数值后面添加D或d
public class Test_demo1 {
public static void main(String[] args) {
// float x=123.123;//有小数点 没加f报错 原因:没有后缀F的浮点数值都默认为double类型 所以这里123.123是double类型
float y=123;//没小数点,没加f,不报错
float z=123.123f;//有小数点,加f,不报错
double a=123.123;//有小数点,不加f,不报错
System.out.println(y);
System.out.println(z);
System.out.println(a);
}
}
结果:
123.0
123.123
123.123
浮点数有三个特殊的浮点数值:
正无穷大 Double.POSITIVE_INFINITY
负无穷大 Double.NEGATIVE_INFINITY
NaN(不是一个数字) Double.NaN
例如:一个正整数除以0的结果是正无穷大。计算0/0或者负数的平方根结果为NaN。
public class Test_demo1 {
public static void main(String[] args) {
System.out.println(1.0/0);
System.out.println(0.0/0);
System.out.println(-1.0 / 0);
}
}
Infinity
NaN
-Infinity
public class Test_demo1 {
public static void main(String[] args) {
//如果不是浮点类型
System.out.println(1/0);
System.out.println(0/0);
System.out.println(-1/0);
}
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.interview.Test_demo1.main(Test_demo1.java:5)
if(x==Double.NaN)//is never true
if(Double.isNaN(x)//check whether x is "not a number"
浮点数值不适合用于无法接受舍入误差的金融计算中。
比如2.0-1.1=0.899999999。
原因是因为浮点数值采用二进制系统表示,而在二进制系统中无法精确的表达1/10。就等于十进制无法精确表达1/3一样。原因
如果不允许有任何舍入误差,就需要使用BigDecimal类。
char
char类型原本适用于表示单个字符。
不过,现在,有些unicode字符可以用一个char值表示,另一些需要两个char值。
unicode和char类型
不同的标准:
- 美国的ASCII
- 西欧的ISO 8859-1
- 俄罗斯的KOI-8
- 中国的GB 18030 BIG-5
产生的问题
- 不同编码方案下,一个给定的代码值可能对应不同的字母
- 采用大写字符集的语言其编码长度有可能不同。
解决方案:采用16位 即两个字节的Unicode。不过现在16位已经满足不了所有Unicode的需要了。
变量
变量初始化
声明一个变量之后,必须用赋值语句对变量进行显示初始化,千万不要用未初始化的变量。
public class Test_demo1 {
public static void main(String[] args) {
int x;
System.out.println(x);
}
}
Error:(6, 28) java: 可能尚未初始化变量x
public class Test_demo1{
int x;
public static void main(String[] args) {
Test_demo1 demo1=new Test_demo1();
System.out.println(demo1.x);
}
}
0//在类中field会自动赋予默认值,没有设置访问范围的默认为default,范围是: 在同一包内可见,不使用任何修饰符。
在java中,不区分变量的声明和定义
常量
利用final关键字
final修饰的变量只能赋值一次。习惯上,常量名要用全大写。
运算符
结合赋值和运算符
如果x是int类型
x+=3.5
x=(int)(x+3.5)
(强制类型转换)
浙公网安备 33010602011771号