基本类型

一、变量

1.定义:变量是存储数据的,内存中的一片存储空间。

2.变量声明:包含两个部分一个是变量类型一个是变量名;可以一次声明多个变量,int a,b,c; 表示声明了三个整型的变量,分别为abc。

3.变量的命名规则:1)只能由字母、数字、_、$四种符号组成,且不能以数字开头;2)java是严格区分大小写的;3)不能使用已经存在的关键字;4)可以使用中文来命名,但是不推荐用,变量命名可遵循"驼峰命名法"(首字母为小写字母,多个单词组成时,后面的单词首字母皆为大写)。项目名和类名则采用"帕斯卡命名法"(所有单词首字母皆为大写)。

4.变量初始化:即第一次赋值。1)变量在声明的同时进行初始化,int a = 5;声明了一个整型变量a,并赋值为5;2)变量声明之后再进行初始化, int a;//声明了一个整型变量a a=5;//给变量a赋值为5

备注:1)存在一种特殊情况,就是成员变量会在创建对象时被系统默认初始化,但建议还是要手动初始化一下,因为默认初始化的值没什么意义(默认初始化也是初始化,此时也就是说使用变量前一定得先初始化);2)if、for这种需要满足条件才会赋值的,java编译器不会认可这种语句块中的初始化行为,会报错,即需要在语句块外面进行初始化,在语句块中的忽略不计,不然编译无法通过。

5.变量的使用:1)对变量的使用即对其内,存着的那个数的使用;2)变量的使用要与数据类型匹配;3)变量在使用前必须要声明并初始化(包括自己初始化和默认初始化的);


二、基本数据类型(常用的有int、long、double、boolean、char)

八种基本类型:byte short/char int long float double boolean

七种基本数据类型:byte short/char int long float double

1、int:整型,4个字节,-21亿到21亿(即最长为10位数,此时最大为数字2)

1)整数直接量默认为int类型(即一个赤裸裸的整数放在那边一定是int类型的,此时它必定要在int可表示的范围内不然就会编译不通过的,此时编译器会对其进行编译检查),所以此数的范围不能超过正负21亿,超范围则编译错误。整数运算时超出范围则会发生溢出,溢出是需要避免的。这个和编译报错是不一样的,溢出是不会报错的,但是是危险的,因为结果错误了。

2.long:长整型,8个字节,19位数且最高位为92(若long还不够用,还有个类型BigInteger---任意大,不过一般用不到)

1)长整型直接量需要在数字后面加L或l(常见情况下,long l=10;是不会编译报错的,为啥呢?因为右边是int类型,左边是long类型,让小的范围到大的范围像小盒子的内容装到大盒子的内容里一样是自动进行转换的,是允许的;而Long l=10;则会报错,这是因为Long为包装类,包装类的自动装箱与拆箱只能与对应的基本类型之间转换。解决办法为Long l=10l;即在直接量后面加上l以表示为long类型,或者右边进行强制转换(long)10;);2)运算时若有可能溢出,则应该在第一个数后就加L(long a=1000000000*3*10l,首先"1000000000*3"为int*int,得到的是int,结果溢出了,此时再乘以10l再变为long类型也无济于事了,所以在最开始就要奠定其long的类型而不是出错了再来弥补啊。这个在后面对Date进行setTime操作就碰到了问题,因为对年份进行毫秒值换算的时候数据溢出了,导致其最后的值变成了负数,再然后的结果就是1970之前的数了,结果就不对咯就很离谱);3)System.currentTimeMillis()用于获取自1970.1.1零时到此时此刻的毫秒数(是long类型的哦);

3.double:浮点数,8个字节,16位小数。1)浮点数直接量的默认值为double,若想表示float需要在数字后面加上f或F(这个跟int直接量赋值给long是不一样的,为什么呢,因为int是四个字节呀,long是8个字节,小范围的数赋给大范围是正规的自动类型转换;而这里的double直接量就不能直接赋值给float,因为double是8字节的大范围类型,float是4字节的小类型,自动转型失败,需要表示为float,则在double直接量后面加上f以表示float直接量。或者这里强制转换也是可以的);2)double(16位小数)、float(8位小数)型数据参与运算时,会出现舍入误差(四舍五入或其他方式取近似值),而精确运算场合需要BigDecimal(比如像银行系统这种,银行系统中一点点误差都是不被允许的,因为一点点的误差累积起来就是很大的差了);float和double类型主要是为科学和工程计算而设计的,他们执行的是二进制浮点运算,由于二进制的局限性,有时候无法得到准确地结果。在二进制中无法精确地表示10的任何负数次方值,这和十进制中无法精确表示1/3是一个道理,所以越到像金融货币计算的问题,我们不得不舍弃float和double,而改成BigDecimal类(而且此时对于BigDecimal必须要用String来构造不可)

4.boolean:布尔型,1个字节。只能取值为true和false。

5.char:字符型,2个字节。1)java中的char采用Unicode编码(由两个字节表示)格式,一个字符char对应一个码(可以对应到int值的0-65535);'a'--97,'A'--65,'0'--48,注这些需要在单引号里边的,而无单引号的数字0对应的就是0了;2)字符直接量必须放到单引号,有且只能有一个字符(多个空格都不行,没值也不行);3)特殊字符需要通过"\"来转译;例如:char c='国';sout(Integer.toHexString(c));--->答案为56fd,此时输出的即为Unicode编码(就是转16进制了);char c = '\u56fd';注意为单引号,sout(c);--->答案为"国"。我想来分析一下,为什么"国"像这种由单引号引起来的字符,还可以用int来接收?字符类型实际上是一个16位无符号整数,即为0-65535,这里就剔除了byte以及short类型了,而我发现,0-65535之间整数直接量可以直接赋值给char类型变量,那么任何可以赋值给char的字符也是可以直接赋值给int类型变量的,经过试验,int和char之间可以乱搞,不会有问题。


三、基本数据类型间的转换

存储空间由小到大的排序:byte short/char int long float double.

1.两种转换方式:1)自动类型转换:从小到大(不需要多余的操作,是系统帮你完成的,也不会报错,就是把小盒子里的东西放到了大盒子里了呗);2)强制类型转换:从大到小(这个系统是不会自动做的,因为有精度的丢失或者是溢出,可能导致不可描述的结果,所以需要人为来做哦,不然就报错了呢);语法:(要转换为的类型)变量;而强转有可能会溢出或者精度丢失,double-->int是截断式的;double-->float是16位小数变成8位小数,然后第8位小数是原来double的第8位小数还+1.

2.两点规则(特别的,就是上面的那个两种转换是普遍的,大家都可以遵循的都可以使用不会有问题,但是下面这些简单的方法是特有的,使用时是有限制的)。1)整数直接量可以直接赋值给byte、short、char但不能超范围(使用这种直接赋值的时候是不能超出范围的,一旦超出范围就编译报错,此时超出返回的时候你用上面的强制转换就没什么问题);2)byte/short/char型数据参与运算时,先一律转换为int再进行运算(若左边有一个非int类型的变量来接收的话,需要将int转换为那个类型);例如:sout('2'+'2')运算过程是先将'2'转换为50再相加,最后结果呢?输出的是int因为没有转换类型回去,此时结果为int类型100.这些先转换为int再运算的,最终运算结果肯定是int类型了呀,所以针对这三种类型你把这个结果赋值给左边的时候就需要进行强制转换了,另外若是扩展赋值则省去了最后一步强制转换,因为这个扩展赋值给了你自动转换,是系统做的不用你来做。

四、零碎小点

1.Linux一般是使用命令的,那么对于可执行文件呢?如何开启它?输入程序的完整路径即可,特殊情况下,若打开终端后,当前路径与可执行文件在同一个目录下,可直接使用./eclipse就能启动eclipse程序了(即使用了相对路径);

2.Linux实际上是分了两种的:1)真正的服务器系统--不带图形界面的(全部使用命令来操作,远程管理);2)带图形界面的(直接双击就可以打开);而一般公司,用的windows/mac这种系统,因为除了编程,咱们还需要业务上的交流,比如编写文档、ppt等,这样在windows上操作更加方便。

3.ide中的run as的实质是,调用了jdk的java命令,用更加友好的图形化界面方式实现运行java程序。

4.根据java整除的特性,计算百分比的时候,由于分子大部分情况下都比分母小,所以直接分子/分母的结果始终为0。那么当你只需要整数部分时,此时最好是要先乘再去做除法,若小数部分也需要则在第一个操作数加小数点。

5.直接量(即一个赤裸裸的整数)超出范围,编译马上会报错;而在运算过程中,如果出现了超范围的情况,除了计算出来的结果很诡异之外,编译运行皆不报错。

6.字符类型事实上是一个16位无符号整数,这个值是对应字符的编码,java中字符类型采用的是unicode字符集编码。char类型的值可直接作为整数类型的值使用,其为正数,可直接为int类型的变量赋值,整数直接量也可直接为char变量赋值(但范围在0-65535之间)。

7.double persent = 80/100;结果为0.0。这个计算的过程是这样的,右边先进行两个int类型的运算,而int类型运算的结果一定是int类型的,此时就为0,再最后进行赋值操作,赋值给左边,是int类型转换为大范围的double类型进行了自动转换,那么结果就是带小数点的了。

8.byte、char、short三种类型实际存储的数据都是整数,在实际使用过程中,遵循如下规则:a.int直接量可以直接赋值给byte、char和short,只要不超过其表示范围,超范围就会编译报错;b.byte、char、short三种类型参与运算时,先一律转换为int类型再进行运算,为什么这里的int就不能赋给左边的byte了呢?因为这里使用的是变量,不知道范围,编译就会失败了。就是右边是int类型直接量且在对应类型的范围内时是可以直接赋值给左边的,然而若右边是int类型变量此时无论如何都是编译错误的,因为编译器不知道具体的值!(这个跟后面的字符串常量池是一样的,只要右边是常量计算的结果赋值给左边就行,一旦有一个变量就不行了)byte/short/char等参与运算时会先转成int,然后其运算结果也被提升为int且无法自动转成char、short、byte这些。

9.%的应用:任何数%2的结果要么为0要么为1,可用于开关的切换。还比如让结果控制在10之内呢?%10即可。

10.a++、++a可以理解为这样。对于a++,先用temp=a,再做a=a+1,再把temp这个值参与到其他运算当中去。其中对于++a,temp的值为a+1。

11.对于向这种运算:num=num>>>4;由于右边的是num这个变量,不确定范围,则会编译失败;而num>>>=4的话系统会自动转换就不会编译失败了。这个还是要看num的原始类型的吧,如果是int前一种运算也没有问题,否则像byte、short、char就有问题了。

12.所有的类型分类。1)基本数据类型:数值型(整数、浮点)、字符、布尔;2)引用数据类型(class interface);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值