Java基础学习第二天——基础数据类型介绍,java数据类型
分享于 点击 11288 次 点评:89
Java基础学习第二天——基础数据类型介绍,java数据类型
文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 |
---|---|---|---|---|---|---|
V1.0 | 2016.02.21 | lutianfei | none |
第二章 Java基础语法
- 本章内容
- 关键字
- 标识符
- 注释
- 常量、进制和进制转换
- 变量
- 数据类型和类型转换
- 运算符
- 语句
(一)关键字
- 关键字概述
- 被Java语言赋予特定含义的单词
- 关键字特点
- 组成关键字的字母全部小写
- 关键字注意事项
goto
和const
作为保留字存在,目前并不使用(在JDK的新版本中可能提升为关键字)
(二)标识符
- 标识符概述
- 就是给类,接口,方法,变量等起名字时使用的字符序列
- 组成规则
- 英文大小写字母
- 数字字符
$
和_
- 注意事项
- 不能以数字开头
- 不能是Java中的关键字
- 区分大小写
1、常见命名规则
- 基本原则:见名知义
- 常见命名
- 包(其实就是文件夹,用于解决相同类名问题,全部小写)
- 单级:miaolu,liuyi
- 多级(用.隔开):cn.ali
- 类或者接口:每个字的首字母大写,含有大小写。
- 一个单词 : 首字母大写 eg:Times
- 多个单词:每个单词首字母大写。 eg: StudentAge,ShowAllAge
- 方法和变量
- 一个单词 : 全部小写 eg:main,age
- 多个单词:从第二个单词开始每个单词首字母大写。 eg: studentAge,showAllAge
- 常量名。基本数据类型的常量名使用全部大写字母,
_
字与字之间用下划线分隔。对象常量可大小混写。
- 一个单词 : 字母大写 eg:TIME
- 多个单词:字母大写,每个单词用_隔开。 eg: SIZE_TYPE
- 包(其实就是文件夹,用于解决相同类名问题,全部小写)
(三)注释
- 注释概述
- 用于解释说明程序的文字
Java中注释分类格式
- 单行注释
- 格式: //注释文字
- 多行注释
- 格式: /* 注释文字 */
- 文档注释
- 格式:/** 注释文字 */
- 对于文档注释,是java特有的注释,其中注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
- 单行注释
eg:标准注释举例:
//标准注释
/*
* 需求:准备写一个Java程序,把HelloWorld!!!这句话输出在控制台
* 分析:
* A:要写一个Java程序,必须定义类
* B: 把数据能够输出,说明我们的程序时可以独立运行的,而 程序要独立运行,必须定义main方法
* C: 把数据输出在控制台,必须使用输出语句
* 实现:
* A:java 语言提供了一个关键字:class用来定义类,后面跟的是类名
* B: main方法的格式是固定的:
* public static void main(String[] args){
}
* C:输出语句的格式是固定的:
System.out.println("HelloWorld");
*/
//这是一个HelloWorld案例
class HelloWorld{
/*
为了程序能够独立运行,定义main方法
main方法是程序的入口,被jvm自动调用
*/
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
(四)常量
- 常量概述
- 在程序执行的过程中其值不可以发生改变
Java中常量分类
- 字面值常量
- 自定义常量(面向对象部分讲)
字面值常量分类
- 字符串常量 用双引号括起来的内容
- “Helloworld”
- 整数常量 所有整数
- 12,23
- 小数常量 所有小数
- 12.34,56.78
- 字符常量 用单引号括起来的内容
- ‘a’,’A’,’0’(必须只能是一个字符)
- 布尔常量 较为特有,只有true和false
- 空常量 null(数组部分讲解)
- 字符串常量 用双引号括起来的内容
注对于数值默认按十进制处理。
- 二进制:0b100
- 八进制 :0100
- 十进制: 100
- 十六进制:0x100
原码、反码、补码
有符号数据表示法
- 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
- 原码
- 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
- 反码
- 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码
- 正数的补码与其原码相同;负数的补码是在其反码的末位加1。
有符号数据练习
- 已知某数X的原码为10110100B,试求X的补码和反码。
- 已知某数X的补码11101110B,试求其原码。(补码 ->原码 符号位除外直接取反加1)
(五)变量
- 变量概述
- 在程序执行的过程中,在某个范围内其值可以发生改变的量
- 理解:如同数学中的未知数
- 变量定义格式
数据类型
变量名
=初始化值
;- 注意:格式是固定的,记住格式,以不变应万变
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
数据类型 | 默认值 | 存储格式 | 数据范围 |
---|---|---|---|
short | 0 | 2个字节 | -32,768到32767 |
int | 0 | 4个字节 | -2,147,483,648到2,147,483,647 |
byte | 0 | 1个字节 | -128到127 |
char | /u0000 | 2个字节 | Unicode的字符范围 |
long | 0L或0l | 8个字节 | -9,223,372,036,854,775,808到9,223,372,036, 854,775,807 |
float | 0.0F或0.0f | 4个字节 | 32位IEEEE 754单精度范围 |
double | 0.0或0.0D(d) | 8个字节 | 64位IEEE 754双精度范围 |
boolean | false | 1位 | true(1)或false(0) |
注:
- 整数默认:
int
- 小数默认:
double
- 长整形后缀用
L
或l标记。建议用L。 - 单精度浮点数用
F
或f标记。建议用F。
- 整数默认:
使用变量注意事项:
作用域
- 变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。
- 相同的作用域中不能定义两个同名变量。
初始化值
- 没有初始化值不能直接使用。只要在使用之前给值就行,不一定在定义的时候立马给值。
数据类型的默认转换
- 一般来说要求参与运算的数据类型必须一致。
boolean
类型不能转换为其他的数据类型- 默认转换(小类型先转成大类型再参与运算)
- byte,short,char—>int—>long—>float—>double
- byte,short,char相互之间不转换,他们参与运算时首先转换为int类型
数据类型的强制转换
目标类型
变量名
=(目标类型
)(被转换的数据);
- eg:byte c = (byte)(a+b); //int a,byte b;
数据类型中几个小问题
- 1、在定义
Long
或者Float
类型变量时,要加L
或F
。 - 2、
byte
,short
在定义的时候,他们接收的其实是一个int类型的值,如果值超过范围就会报错。 - 3、对于byte类型 -128 对应2进制 10000000 这里1既是符号位又是数值位
- 4、byte,short,char -> int -> long -> float -> double
- long 8 byte ,float :4byte;为什么long会转为float?
- 1、底层存储结构不同
- 2、float表示的数据范围比long的范围要大
- long: 2^63-1
- float: 3.4*10^38 >2*10^38 > 2*8^38 = 2\2^3^38 = 2*2^114 > 2^63
- long 8 byte ,float :4byte;为什么long会转为float?
5、Java中的字符
char
可以存储一个中文汉字,因为java语言中的字符变量占用两个byte。6、Java语言采用的是Unicode编码。
面试题1
- byte b1=3,b2=4;
- b=b1+b2;
- b=3+4;
- 哪句是编译失败的呢?为什么呢?
- 因为b1和b2是变量,因为变量相加首先考虑类型问题,最终把结果赋值时也会考虑类型问题,所以b1+b2后为保证不溢出,默认会转为int类型进行存储。
- 3和4都是常量,常量相加首先做加法,看结果是否超出byte类型的范围。如果没有可以正常赋值。
面试题2
- byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
- 这样写会报错,因为byte的范围是 -128 ~ +127, 130溢出了。
- byte b = (byte)130;编译不会报错,输出结果为-126。
- 分析过程:
- A : 130转为2进制时:00000000 00000000 00000000 10000010(这是130的原码,反码,补码)
- B : 截取操作,截取成byte : 10000010(这个结果是补码)
- C :显示以原码形式呈现 转为原码(除符号位外取反+1)1111110
练习题1
- 求byte b = (byte)300 控制台打印的结果;
- 按照上面的分析过程 :
- 300 -> 00000001_00101100->00101100->44
练习题2,写出下列程序结果
- System.out.println(‘a’); 结果:a
System.out.println(‘a’+1);结果:97
System.out.println(“hello”+’a’+1);
- System.out.println(‘a’+1+”hello”);
- System.out.println(“5+5=”+5+5);
System.out.println(5+5+”=5+5”);
注:
1、字符串数据和其他数据做+
,结果是字符串类型.但是要注意运算的顺序。- 答案:
- helloa1
- 98hello
- 5+5=55
- 10=5+5
补充float存储格式
float类型数字在计算机中用4个字节存储。遵循
IEEE-754
格式标准:
* 一个浮点数有2部分组成:底数m和指数e
- 底数部分 使用二进制数来表示此浮点数的实际值
- 指数部分 占用8bit的二进制数,可表示数值范围为0-255
但是
指数
可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
所以,float类型的指数可从-126到128底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法格式:
- S_EEE EEEE E_MMM MMMM MMMM MMMM MMMM MMMM
- S表示浮点数正负
- E指数加上127后的值得二进制数据
- M底数
举例:17.625在内存中的存储
- 首先要把17.625换算成二进制:10001.101
- 在将10001.101右移,直到小数点前只剩1位:1.0001101 * 2^4 因为右移动了四位
- 底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
- 指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
相关文章
- 暂无相关文章
用户点评