Java变量声明和数据类型

一,变量声明

      ▪ 变量声明举例:

    - double salary;

    - boolean done;

    - long earthPopulation;

    - int age;

    ▪  可以在一行中声明多个变量:

    - int i.j;//both are integers

    - 不提倡这种风格,逐一声明没一个变量可以提高程序可读性。

▪ 可以将变量的声明和初始化放在同一行中,例如:

    - int age = 18;

    - float e = 2.718281828f;

二,Java为基本类型

Java为基本类型提供语言级别的支持,即已经在Java中预定义,用相应的保留关键字表示。基本类型是单个值,而不是复杂的对象,基本类型不是面向对象的,主要出去效率方面的考虑,但是同时也提供基本类型的对象版本,即基本类型的包装器(wrapper)。可以直接使用这些基本类型,也可以使用基本类型构造数组或者其他自定义类型。基本类型具有明确的取值范围和数学行为。

1.整形数据类型

整型有byte short int long char,分别用8、16、32、64、16bits表示。有些地方可能不会把char列入整型范畴,但本质上char类型是int的一个子集。整型的宽度不应该被看成整数所占用的内存空间大小,而应当理解成定义为整型的变量或者表达式的行为。JVM可以自由使用它们希望的、任何大小的内存空间,只要类型的行为符合规范。byte short int long都是有符号的,用2的补码(two‘s-complement)表示。而char用16位表示,它是无符号的,表示的是UTF-16编码集。

▪ 整形数量

    - 十进制整数,如: 99,-500,0

    - 八进制整数,要求以 0 开头,如: 015

    - 十六进制数,要求 0x 或 0X 开头,如: 0x15

▪ 整型变量

整形常量默认为int型,声明long型常量可以后加‘l’或‘L’

Java变量声明和数据类型_第1张图片

2.浮点型数据类型

▪ 浮点类型常量 –十进制数形式,例如: ▪3.14 314.0 0.314

▪ 浮点型变量 –float类型:单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。 –double类型:双精度类型 精度是float类型的两倍,绝大部分应用程序都采用double类型。

▪ 注意 –浮点常量默认为double。要变为float,需在后面增加F/f. 如: 3.14F –浮点数存在舍入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。

Java变量声明和数据类型_第2张图片

3.字符数据类型

▪  单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的, “A”表示含有一个字符的字符串。

▪  char 类型用来表示在Unicode编码表中的字符。

▪  Unicode编码被设计用来处理各种语言的所有文字,它占2个字节, 可允许有65536个字符;ASCII码占1个字节,可允许有128个字符 (最高位是0),是Unicode编码表中前128个字符。

▪  Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的 含义, char c2 = '\n'; //代表换行符

▪  char类型在内存中存储的是该字符的Unicode编码值,所以char类 型可以当做int类型来处理

Java变量声明和数据类型_第3张图片

4.布尔数据类型

▪ boolean类型有两个值,true和false

▪ boolean 类型用来判断逻辑条件,一般用于程序流程控制

▪ 实践: – 请不要这样写:if ( is == true && done == false ) ,只有新手才那么写。 对于任何程序员 if ( whether && !done ) 都不难理解吧。所以去掉所有的 ==fasle 和 ==true。 

5.final 常量

▪  使用final修饰的变量,只能被初始化一次,变成了常量。

▪  final常量是有名称的。

Java变量声明和数据类型_第4张图片

6.命名规范

▪ 所有变量、方法、类名:见名知意

▪ 变量、方法名: – 首字母小写和驼峰原则 – run(), runRun(), age ageNew monthSalary

▪ 常量: – 大写字母和下划线:MAX_VALUE

▪ 类名: – 首字母大写和驼峰原则: Man, GoodMan

三,字符及字符串字面值

Java中字符字面值用单引号括起来,如‘@’‘1’。所有的UTF-16字符集都包含在字符字面值中。不能直接输入的字符,可以使用转义字符,如‘\n’为换行字符。也可以使用八进制或者十六进制表示字符,八进制使用反斜杠加3位数字表示,例如'\141'表示字母a。十六进制使用\u加上4为十六进制的数表示,如'\u0061'表示字符a。也就是说,通过使用转义字符,可以表示键盘上的有的或者没有的所有字符。常见的转义字符序列有:

\ddd(八进制) 、 \uxxxx(十六进制Unicode字符)、\'(单引号)、\"(双引号)、\\ (反斜杠)\r(回车符) \n(换行符) \f(换页符) \t(制表符) \b(回格符)

字符串字面值则使用双引号,字符串字面值中同样可以包含字符字面值中的转义字符序列。字符串必须位于同一行或者使用+运算符,因为java没有续行转义序列。

四,基本类型之间的转换

我们看到,将一种类型的值赋给另一种类型是很常见的。在Java中,boolean类型与所有其他7种类型都不能进行转换,这一点很明确。对于其他7中数值类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。转换分为自动转换和强制转换。对于自动转换(隐式),无需任何操作,而强制类型转换需要显式转换,即使用转换操作符(type)。首先将7种类型按下面顺序排列一下:

byte <(short=char)< int < long < float < double

如果从小转换到大,可以自动完成,而从大到小,必须强制转换。short和char两种相同类型也必须强制转换。

五,自动转换

自动转换时发生扩宽(widening conversion)。因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。如果将字面值保存到byte、short、char、long的时候,也会自动进行类型转换。注意区别,此时从int(没有带L的整型字面值为int)到byte/short/char也是自动完成的,虽然它们都比int小。在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失。

》int--> float

》long--> float

》long--> double

》float -->double without strictfp

除了可能的精度损失外,自动转换不会出现任何运行时(run-time)异常。

六,强制类型转换

如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符()。严格地说,将byte转为char不属于narrowing conversion),因为从byte到char的过程其实是byte-->int-->char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。强制转换格式如下:

(target-type) value

如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。例如a=256超出了byte的[-128,127]的范围,所以将257除以byte的范围(256)取余数得到b=1;需要注意的是,当a=200时,此时除了256取余数应该为-56,而不是200.

将浮点类型赋给整数类型的时候,会发生截尾(truncation)。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。

你可能感兴趣的:(Java,python,java,javase)