java SE 入门之八大内置基本类型(第二篇)

本文采用eclipse 工具演示,如果您对eclipse 工具不了解,请先学习下 eclipse 工具的使用,这个里面只是简单的介绍下输出和注释;

安装完成eclipse 以后,双击进入 后一次点击 file -->new project 在出来的框上点击

java SE 入门之八大内置基本类型(第二篇)

输入项目名称,选择你安装eclipse 之前安装的jdk 的jre,本文使用1.8进行演示。然后点击finish 完成创建项目。

java SE 入门之八大内置基本类型(第二篇)

在完成(finish)的页面中我们输入如下代码,然后仔细阅读图片上的文字,看下图

public static void main(String[] args ) {

System.out.println("HelloWord");
}

java SE 入门之八大内置基本类型(第二篇)

java SE 入门之八大内置基本类型(第二篇)

在java 中很多符号都是成对出现的,比如 (),{},【】,“”,‘’等,其中双引号代表字符串,后续会单独讲解。闲话少说,咱们开始学习java中的八大基本类型,

在java 中有八个基本类型,他们都是值类型,分别是  long, int, short,byte ,double float,boolean char 。其中  long, int, short,byte 为整数型。

其实这八个类型叫基本类型,在java 中只有两种类型,基本类型和引用类型. 值类型是存储在内存堆栈上的.

如下图

java SE 入门之八大内置基本类型(第二篇)

在学习八大基本类型前,我们应当学习下计算机的机器语言 二进制

在计算机内部,所有信息都是采用二进制表示,每个二进制有0和1两种状态,一个字节有8位,也就是说由8个0或者1组合而成。一个short 类型为连个字节,也就是16位,那么表示为 00000000 00000110,

int 类型同理,int l类型为32位4字节,表示形式为 00000000 00000000 00000000 00000110,

很多编程的人,都知道数学或者代数上的十进制,那么十进制是怎么转换为二进制的呢?。

十进制转换二进制

规则: 除以2取余 ,逆序输出,直到除数为小数的时候为止。位数不够补0

如十进制6二进制输出转换方式如下

6除以2=3余0

3除以2=1余1

1除以2=1余1

那么逆序的结果为:110.

二进制转换成为十进制

规则:取出二进制的最后一位,从2的0次方开始乘,将得到的结果相加就为十进制。

如二进制的110十进制换算。

0乘以2的0次方等于0,

1乘以2的一次方等于2,

1乘以2的平方(二次方)=4

则110的十进制为 0+2+4=6.

8大内置基本类型在java 中如何定义和使用的

变量

在说类型使用之前,我们要想学习下java 的类型定义规则,在java 中不允许使用未赋值的类型。定义一个类型,在使用之前必须给他赋值,赋值使用等号定义变量结束使用分号结尾,分号代表一行代码的结束。

如果不赋值会报如下错误信息

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable a may not have been initialized

必须要赋值才能使用。

我们定义的类型语法如下:

类型 名字 = 值;如 int i=5; long j = 100 ,int a,b=100,这里的变量a 声明了,但是没有赋值,这里的b声明了赋值100,

在java中变量只能以字母,下划线和美元符号开头,不能以数字开头。

int 7a=67;这种写法是错误的。

这种声明叫定义变量,变量是可以在使用过程中从新赋值的。

int a=0;
a=100;

变量的作用域

作用域指的是大括号,打括号里面定义的变量,在大括号外面就无法访问,但是在大括号外面定义的,可以在大括号里面访问,

根据变量的位置,我们分为局部变量和成员变量。

.成员变量:在类体中,方法体之外声明的变量 。也有些不规范的叫法,从其他语言延伸过来的,叫全局变量,
局部变量:在方法体中出现的变量,包括方法的形式参数列表

1.long 类型

long 类型在内存中占有8个字节,二进制表示需要64位。

我们定义一个long 类型进行输出。

long i=5;

long i=5;

System.out.println(i);

java SE 入门之八大内置基本类型(第二篇)

long b=7L; 和long a=7;的输出结果是一致的,那有什么区别呢?

第一个直接定义一个长整形 b并且赋值长整形7 ,第二个是定义一个长整形 a ,并且赋值一个整形7,整形值7进行了 自动转换

自动转换定义:小类型转换到大类型的转换叫自动转换。大类型到小类型的转换叫强制类型转换。

好比一桶水倒入水缸里,水缸能装下,这就叫做自动转换,反之水桶装不下水缸的水,所以叫做强类型转换.

强制类型转换的语法事列 ; int b=(int)i;用一个英文的圆括号括起来。强制转换  当short byte char int进行混合运算时先转化为int在计算。这句话很重要,

如:

short s = 11;

s = (short) (s + 10);//short + int

s += 10;// --> s = s+10;

其实s 是在内存中的操作是先转换成为整形int 在计算的.

如果要给一个长整形赋值,我们要在值得末尾加上 一个字母L,这个字母是不区分大小写的。但是建议大写,因为小写字母很容易给开发人员造成混淆。这也是一种编码规范吧..这个L叫做类型缩写.

2 int

int 是4个字节,用二进制表示为32位。

用法等同long 不予演示。

前面我们讲解了二进制,我们在这里学习点新的东西,

在计算机中,不单单是只有二进制和十进制的。还有八进制和十六进制两种,不管是8进制,10进制还是16进制,最后在计算机执行过程中,最后都是需要转换成为二进制的。

int num1 = 10;//十进制
int num2 = 010;//八进制
int num3 = 0x10;//十六进制

System.out.println(num1);//10
System.out.println(num2);//8
System.out.println(num3);//16

他们的输出结果分别是 10,8,16. ,当然他们也可以用在ilong short byte 整形类型上。
 
 2.1表现方式(3种)
 十进制 默认
 八进制 以0开头
 十六进制 以0x开头
如  long n=010L;

3. short

short 是两个字节 用二进制表示需要 十六位。

当我们在编译器 定义一个short n=100; System.out.println(n);的时候,是可以输出的。

难道 short 就没有什么特别的地方吗?

如果是细心的人,会看到前边讲解long 类型的时候 “自动转换”和“强制转换”的定义。可是现在100是int 类型,100是大类型,大类型到小类型是需要强制类型转换的,可是我这没有进行强制类型转换,也可以输出,难道是工具坏掉了??

其实不是,这个是java 中的一个规定。

在byte,short,char的取值范围内,int可以直接复制给byte,short、char

4 byte 类型

byte 在内存中占用一个字节 ,二进制表示要8位.

那么byte 类型有什么特殊的呢?

byte 类型在 -128到正的127之间,含边界。总共跨度256,看到256如果计算机基础好的人,一定会很熟悉,256,255 是不是内存的存储单元啊。

上边我们学习过了,如果是 byte 类型取值区间内,可以直接赋值int .那超出区间可以赋值吗,下边我就来试试

当在编译器一写 byte a=133得时候直接报错.

java SE 入门之八大内置基本类型(第二篇)

有人会说了,自动赋值不行,那就强制转换,那我们强制转换试试.

java SE 入门之八大内置基本类型(第二篇)

int a=128;
byte b=(byte)a;
System.out.println(b);

当我们输入这几行代码的时候,发现运行结构变成-128了,这叫精度丢失,就是大类型转换成为小类型的时候,会造成精度丢失..

到现在为止4个整形,我们就学习完成了,下边我们学习下两个小数类型

5. double 和folat

其实double  和folat 应当分开演练的,个人认为分开没有放在一起对比去讲解要好.

double 8字节,用二进制表示为64位,folat 4字节,用二进制表示为32位.其中double 叫双精度浮点型,而float叫单精度浮点型.这是他们的名字,他们都是小数类型。

根据前面的学习经验,我们先赋值小数试试,

java SE 入门之八大内置基本类型(第二篇)

会发现double 是可以直接赋值小数的,但是float是不可以直接赋值的。那可不可以像long 类型那样直接赋值带缩写的值呢。答案是肯定的.

double d=3.99d;//直接赋值
float f=3.14f;//直接赋值

这个d 和f 是不区分大小写的,但是建议小写,因为这也是一个不成文的规矩,一个默认规范。

下面我么再来看一组事列:

java SE 入门之八大内置基本类型(第二篇)

java SE 入门之八大内置基本类型(第二篇)

我们会发现,第一个变量d我们直接赋值一个整形数字3,但是输出的结果是 3.0,也就是说,double 直接赋值的时候,自动转换时给我们默认转换成为了小数。

而第二个变量f我们是先强制转换在赋值.

6.boolean

boolean型  有且只有两个值,值 true 表示真,值 false 表示假, 一般出现在判断语句中.

boolean sex = false;

if(sex){
System.out.println("男");
}else{
System.out.println("女");
}

当打印输出的时候,我们会发现输出的是“女”,其中if判断语句,这个以后会细说。

7 char类型

要学习char 类型我们必须要先了解什么是字符编码

7.1 java中的字符编码
     ASCII编码    主要 针对英文 
    ISO-8859-1 有人称为 latin-1,是国际化标准或组织ISO定制的,主要是为了西欧语言和ASCII码兼容。
   GB2312现代中文汉字,    GBK  中文汉字,GB!8030 *或者繁体字 ,这三种编码主要是针对汉字,从容量上看,他们属于包含关系。
   UinCOde 统一了世界上所有的编码,从展现形式上和UInCode的实现上,可以分为 UTF-8,UTF-16和UTF-32

* java中的char 字符型 采用UNICODE编码 ,底层占2个字节
* 字母占1个字节
* 汉字占2个字节
 那么char 类型是几个字节多少位的呢,其实char 在java 中是两个字节16位,有兴趣的基友可以研究下,下边的代码,这里不做解释,后期会讲解这个。

java SE 入门之八大内置基本类型(第二篇)

下边我们来学习下 char 类型的特性

java SE 入门之八大内置基本类型(第二篇)

当你在eclipse上练习这几行代码的时候,你会发现,当输出变量a的时候是争取的,但是当输出变量ab的时候会报错,这是因为ab 在uincode中没有叫ab的编码 。

但是当输出变量c的时候,得到的结果是字母"a",这是因为,前面我已经说过了,看图。

限期,我们只需要记住如下 
* 0 的int值为 48
* a 的int值为 97
* A 的int值为 65

我们再来看下下边的代码:

java SE 入门之八大内置基本类型(第二篇)

当输出变量c我们已经知道了,是取值区间可以直接赋值。

那输出变量i 是为什么呢?是因为把char转换成为int 是走的自动转换.

第三个,有的基友会矛盾了,不是在取值区间,可以直接赋值给变量num1吗?,可是为什么要加强制类型转换呢.你是把数字98赋值给了一个整形变量,可是这个变量的值是不变的吗?文章开头部分介绍了变量,这里在从新说下。System.out.Println("10");,//这个10叫做字面值,而我们定义的int num=98,这个num叫做变量,变量的值可以改变的。所以需要强制类型转换.

自此,我写的第一篇博客,已经完成了,后续会一到三个月更新一次。个人打算把这七年来的工作经验,从入门到精通,完全写下来.如有描述错误,清联系本人,告知改正.

在此总结下:

1)四种整数类型(byte、short、int、long):

byte:8 位,用于表示最小数据单位,如文件中数据,-128~127

short:16 位,很少用,-32768 ~ 32767

int:32 位、最常用,-2^31-1~2^31  (21 亿)

long:64 位、次常用    注意事项:    int i=5; // 5 叫直接量(或字面量或字面值),即 直接写出的常数。    整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l建议使用大写L。    小于 32 位数的变量,都按 int 结果计算。    强转符比数学运算符优先级高。

2)两种浮点数类型(float、double):

float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数。

double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾

注意事项:    二 进 制 浮 点 数 : 1010100010=101010001.0*2=10101000.10*2^10(2次方)=1010100.010*2^11(3次方)= . 1010100010*2^1010(10次方)    尾数:  . 1010100010   指数:1010   基数:2    浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加F 或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X    float  的精度没有 double高,有效位数(尾数)短。    float  的范围大于 long  指数可以很大。    浮点数是不精确的,不能对浮点数进行精确比较。

3)一种字符类型(char):    char:16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。    注意事项:    不能为 0个字符。    转义字符:\n  换行  \r  回车  \t Tab 字符  \" 双引号  \\ 表示一个\    两字符 char 中间用“+”连接,内部先把字符转成 int 类型,再进行加法运算,char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。

4)一种布尔类型(boolean):true 真  和 false 假,有且只有这两个值。

5)记忆:8位:Byte(字节型)          16位:short(短整型)、char(字符型)          32位:int(整型)、float(单精度型/浮点型)          64位:long(长整型)、double(双精度型)          最后一个:boolean(布尔类型

6)类型转换:       char-->    自动转换:byte-->short-->int-->long-->float-->double                   强制转换:①会损失精度,产生误差,小数点以后的数字全部舍弃。②容易超过取值范围。

2017年10月27日晚有更新

上一篇:DS博客作业02—线性表


下一篇:洛谷-P5357-【模板】AC自动机(二次加强版)