Java基础知识——3.数据类型和标识符和键盘录入

这篇文章,我们来讲一下数据类型

目录

1.由来

2.概述

3.整型

4.浮点型

5.字符型

6.bool型

7.标识符

8.键盘录入

9.小结


1.由来

       写程序与做数学题类似,在数学题中有这样的语句“设X属于R”,它表明X是R类型的数,而不是复数,而Java作为一种强类型语言,它就需要对每个变量进行类型声明,由此引出数据类型。java中的数据类型有两种:基本数据类型、引用数据类型,这篇文章,我们主要讲一下基本数据类型。

2.概述

       为了可以表示所有的数据,Java规定了8种基本数据类型,分别为:byte , short , int , long (四种整型)可以用来定义整数类型的数据float , double(两种浮点型)可以用来定义小数类型的数据;char(字符型)可以用来定义字符类型的数据;boolean(bool型,只有true与false两种取值情况)可以用来定义布尔类型的数据。

3.整型

整型用来表示没有小数部分的数值,它可以是负数,Java提供了4种整型,详细信息见下表:

类型比特数存储需求(字节数)                      范围                      
byte81-128 ~ 127
short162-32768 ~ 32767
int324-2^31 ~ 2^31-1(正好超过20亿)
long648-2^63 ~ 2^63

注意:如果要定义long类型的变量,在数据值的后面需要加一个L作为后缀(包装类Long的数值后面必须加,不然报错),这里可以写l,也可以写L,但是因为l与1容易混淆,所以这里强制要求写L

补充:计算机存储信息的最小单位称之为位,又称为比特,记为bit,1bit数就是1个二进制数,如:10101B 就是5比特数;

存储器中,所包含存储单元的数量称为存储容量,存储容量的基本单位是字节(Byte,简记为B),8比特(二进制数)记为一个字节,除字节外,还有 KB , MB , GB , TB,它们之间的转换关系如下表

1KB=2^10B = 1024B
1MB=2^10KB = 1024KB
1GB=2^10MB = 1024MB
1TB=2^10GB = 1024GB

存储实质:

例如:有如下语句:

byte x = 34 ;

在存储时,内存开辟1字节的存储空间,存下34的二进制数:10010 ,并将其补全至8位,即存储 0 010 0010 ,其中最高位为符号位,0代表它为正,1代表它为负。若语句改为:

byte x = -34 ;

计算机会先求它的原码:即1010 0010,再求它的反码:即1101 1101 ,最后存储它的补码:即1101 1110 ,(关于进制转换,原码,反码,补码的问题可以去看我的另一篇文章)。若语句改为:byte x = 256 ; 则超出范围,计算机在编译时会报错。

牢记:正数存原码,负数存补码,正数原码等于补码。

4.浮点型

问:小数如何用二进制数表示?

答:例如:0.125 = 2^(-5),即用x^(-y)可以表示小数

浮点型用于表示有小数部分的数值,它可以是负数,Java提供了两种浮点型,详细信息见下表

类型比特数存储需求(字节数)范围
float324大约 \pm3.402 823 47E+38F(有效位数6 ~ 7位)
 double648大约 \pm1.797 693 134 862 315 70E+308(有效位数15位)

注意:

  1. float 有效位数6 ~ 7位\Rightarrow数值越大,损失越多,越不精确
  2. 如果要定义float类型的变量,在数据值的后面需要加一个F作为后缀(包装类Float的数值后面必须加,不然报错)

问:float 与 int 同占4B,二者范围为何相差那么大?

答:看下方存储实质

存储实质:

注意:float无法表示所有小数,因为精度特别高的就无法用x,y组合表示了

问:为何用float定义某些数据时,输出的与原数据值不同

答:见下方

假设:float类型的值 即( 2^(x-127) )*y 只能表示下面的这些数(结合表达式的特点)

-15000          -5000          -500          -10          0           10           500           5000          15000

现在有语句:float a = 80 ;而80无法用float表达式表示,于是在其表达式所能表示的数据中选出最接近80的数据赋予a,即 a = 10

(上述均为假设,只为说明其原理,数值的举例不可当真)

对比 int 与 float 的精度问题

int 在数轴上是等距排列的,而 float 根据其表达式( 2^(x-127) )*y ,可知在0附近排列密集,数越大排列越稀疏,所以 float 在0附近精度高(比int 高),离0越远精度越低

double(双精度浮点型)存储实质:

5.字符型

表示字符的变量可以用 char 定义,赋初值时要用 ' ' (注意与String的区别)引起字符,例如:

char a = 'a';

字符型变量所占的内存由编码决定,一般有 8比特,16比特,32比特 三种,关于编码,可以看我的另外一篇文章

6.bool型

类型比特数所需内存(字节数)范围
boolean324      true      或    false      

问:bool类型变量的取值只有0与1两种,1比特就够了,为什么要用4个字节来存储?

答:见下方

计算机的最小存储单元就是1个字节,即使存1比特数据存储数也需要消耗一个字节(其实由于操作系统,实际需要4KB空间),计算机中数据由内存往cpu传递时需要经过高速缓存,高速缓存是有分块的,每块64个字节大小,每块中可以存放许多份数据,而数据的传输是靠高低电压,数据小,份额多,那么传输次数就增多,堵塞的概率就变大,数据大 ,份额少,传输次数少,堵塞概率小,为了降低堵塞概率,那么数据份额就多,则每份所占的内存就大,所以bool类型占4个字节。

7.标识符

标识符:就是给类,方法,变量等起的名字

意思就是凡是我们自己给起的名字都叫标识符

这个详细的可以看我“java开发手册”专栏中的内容,那里面的内容都是摘自《阿里巴巴开发手册》,在这里就简单的说一下。

硬性要求:

  1. 所有的名字都是由:数字,字母,下划线(_)和美元符($)组成
  2. 不能以数字开头
  3. 不能是关键字
  4. 区分大小写

软性建议:

小驼峰命名法:适用于方法、变量的命名

规范:

  1. 标识符为一个单词时,全部小写
  2. 标识符由多个单词组成时,首个单词的首字母小写,后面单词的首字母大写

大驼峰命名法:适用于类名

规范:

  1. 标识符为一个单词时,首字母大写
  2. 标识符由多个单词组成时,每个单词的首字母都大写

最后的要求:不管怎么命名,都要求见名知意

8.键盘录入

键盘录入:就是在键盘输入数值,然后程序中的变量存储数值。

步骤:

  1. 导包,导入Scanner这个类
  2. 创建对象,创建Scanner这个类的对象
  3. 接收数据,使用Scanner这个类的方法

下面看一下具体演示:

代码如下:

import java.util.Scanner;

public class HelloWorld {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        //变量i记录了键盘输入的内容
        int i = scanner.nextInt();
        System.out.println(i);
    }
}

初学者可能看不懂,没关系,后面会讲,这里先记住就行。 

9.小结

这篇文章我们讲了java中的基本数据类型,标识符和简单的键盘录入。重点是java的基本数据类型,下面看这张如来总结一下:

 

上述内容,如有不当,敬请指出!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L纸鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值