黑马程序员——Java基础(一)关键字,常量,变量,进制,数据类型

来源:互联网 发布:sai画图软件下载 编辑:程序博客网 时间:2024/06/05 12:46
------- android培训、java培训、期待与您交流! ----------

Java语言基础组成

关键字:被java语言赋予特殊含义的单词。

标识符:在程序中自定义的一些名称。由0-9,26个英文大小写,_ $。但是数字不能开头,不可以使用关键字。

Java中严格区分大小写

Java中的命名规范:包名:xxxyyyzzz,类名:XxxYyyZzz,变量和方法名:xxxYyyZzz,常量名:XXX_YYY_ZZZ

常量:其值在运行过程中,值不变的量。

表示方式:

字面值常量:

整数常量:123-45

实数常量:123.50.13

字符常量:'A''a''1'

字符串常量:"23""ad"

布尔常量:truefalse

空常量:null

自定义常量:

进制

 

为了让表现形式短,有了从二进制到八进制和十六进制的转换。

 

一个二进制数称为1位,bit

1个字节为8bit

1k=1024字节。

1M=1024K

1G=1024M

1T=1024G

1P=1024T

 

JDK7.0以后,

0b开头表示二进制。

0开头表示八进制。

十进制的没有表示。

0x开头表示十六进制。

进制的转换:

 

其他进制转换成十进制一般规律:

系数:就是每一位上的数据。

基数:x进制,基数就是x

权:我们把数据从最后边一位开始给编号,并且从0开始,这个编号就是指定位置的数据的权。

 

结果:把系数*基数^权次幂相加即可。

Eg

1011

计算:1011=1*2^3+0*2^2+1*2^1+1*2^0=11.

作业:

0b100101 = 1*2^5+0*2^4+0*2^3+1*2^2+0*2^1+1*2^0=37.

074 = 7*8^1+4*8^0=60.

0xf4 = 15^16^1+4*16^0=244.

 

十进制到其他进制的转换规则:

除基取余,直到商为0,余数反转。

 

作业:

60 = 074

60 = 0x3C

244 = 0364

244 = 0xF4

 

快速转换方法:8421法!1248163264128,,,。

(原理:如果指定位不是0,则每位都有固定的值)

二进制到八进制:从右到左,每三位一组计算。

二进制到十六进制:从右道左,每四位一组计算。

 

计算机中所有的数据都是以补码的形式存在的。

如何求补码?

正数的反码、补码和原码相同。负数的补码取反加1符号位不变

计算机中符号位也会参与运算,如果数据超出范围,那么舍弃超出的。

 

作业:

已知原码10110100,求反码和补码:

反码:11001011

补码:11001100

已知补码11101110,求源码:

补码:1 1101110

反码:1  1101101

原码:1  0010010

变量:变量是内存中的一个存储区域。

格式:数据类型变量名 =初始值。

 

为什么使用变量?

用来不断的存储同一类型的常量,并可以重复使用它。

使用范围:在它定义的{}内有效!在{}不能重复定义同名变量。

 

如果定义了一个变量,没有初始化直接使用(直接初始化或间接初始化),会报错。

 

定义长整形,必须加l或者L。定义单精度浮点数,必须加f或者F

 

Java中的字符采用的编码是Unicode编码,中文占两个字节。C语言中中文占1个字节。

 

变量定义的方式有两种:

数据类型变量名 =初始化;

数据类型变量名;

变量名 =新值;

数据类型

基本数据类型:

数值型:

整数类型:byte [1]short[2]int[4]long[8]

浮点类型:float[4]double[8]

字符型:char[2]

布尔型:boolean[没有明确空间]

引用数据类型:

类:class

接口:interface

数组:[]

 

整数的默认是int类型,小数默认是double类型。

Java浮点数两种表示形式:

十进制数形式:123.2  100.23

科学计数形式:123.2E1 1.002310^2

 

强类型:使用数据时必须指定其类型。

弱类型:可以不指定其类型,根据其值而定。如php

 

字符串属于什么类型?引用类型!!

 

 

数据类型的转换

Aboolean类型不可以转换为其他的数据类型。

 

在参与运算过程中:

B:隐式转换(从小到大)。

byteshortchar在参与运算的时候先转换成int

byte--short--char--int-------long--------float--------fouble.

 

为什么float能表示的范围比long大?

因为float符号位1位,小数位23位(存的数不大于1),还剩8位的取值范围-128~127,幂2^127

long类型是2^63幂,-1

注意:long8个字节,float4个字节。

long是整数,float是浮点数,整数和浮点数的存储规则不一样。

long的范围是小于float的。

 

C:强制转换(从大到小)。

如果你明确知道数据是可以表示的,就可以使用强制转换。

(强转类型)变量。

 

从大数据类型强制转换成小数据类型的时候,这个数据不要超过小数据类型的表示范围,如果超过会有不同的结果输出。

 

一般不推荐使用强转。

 

byte可以默认转换成char吗?short可以默认转换成char吗?

shortchar不能相互转换。

bytechar不能相互转换。

byte可以转成shortshort不能转成byte

 

char是两个字节的无符号数据,0~65535,byte的范围是-128~127,所以char的表示范围没有包含byte,所以不能隐式转换。

charshort不相互包含,byte包含不了short,所以转换不了。

 

Eg

byte b2 = (byte)130;

 

数据:130默认是int类型的十进制数据。

第一步:十进制的130转换成二进制数据为10000010

第二步:130在内存中的表示形式(补码形式):

00000000 00000000 0000000 10000010

这时强转成byte的话,截取:10000010

第三步:二进制数据10000010,是个负数

补码:1 0000010

反码:1 0000001

原码:1 1111110

 

最终结果:11111110 = -126

 

通过这样可以知道一个整数的二进制是多少:

Inteter.toBinaryString(6);

 

一道面试题

下面的语句有没有问题?如果有,请解释!

byte b1 = 3;

byte b2 = 4;

byte b3 = b1 + b2;

byte b4 = 3 + 4;

 

有问题,在byte b3 = b1 + b2;报错

解释:

b1+b2在参与运算的时候,首先会自动转换转换成int型,在这个时候,b1b2其实都被提升了类型。所以,所以他们的计算结果也应该是int类型。最终就相当于直接把int类型赋值给byte类型。所以,会损失精度。

如果参与运算的是常量,编译器会先计算值,在看该值是否是左边能够表示的范围。如果是,就不报错。


0 0
原创粉丝点击