java 入门之八大内置基本类型
Posted 王柏成
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 入门之八大内置基本类型相关的知识,希望对你有一定的参考价值。
本文采用eclipse 工具演示,如果您对eclipse 工具不了解,请先学习下 eclipse 工具的使用,这个里面只是简单的介绍下输出和注释;
安装完成eclipse 以后,双击进入 后一次点击 file -->new project 在出来的框上点击
输入项目名称,选择你安装eclipse 之前安装的jdk 的jre,本文使用1.8进行演示。然后点击finish 完成创建项目。
在完成(finish)的页面中我们输入如下代码,然后仔细阅读图片上的文字,看下图
public static void main(String[] args ) {
System.out.println("HelloWord");
}
、
在java 中很多符号都是成对出现的,比如 (),{},【】,“”,‘’等,其中双引号代表字符串,后续会单独讲解。闲话少说,咱们开始学习java中的八大基本类型,
在java 中有八个基本类型,他们都是值类型,分别是 long, int, short,byte ,double float,boolean char 。其中 long, int, short,byte 为整数型。
其实这八个类型叫基本类型,在java 中只有两种类型,基本类型和引用类型. 值类型是存储在内存堆栈上的.
如下图
在学习八大基本类型前,我们应当学习下计算机的机器语言 二进制
在计算机内部,所有信息都是采用二进制表示,每个二进制有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);
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得时候直接报错.
有人会说了,自动赋值不行,那就强制转换,那我们强制转换试试.
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叫单精度浮点型.这是他们的名字,他们都是小数类型。
根据前面的学习经验,我们先赋值小数试试,
会发现double 是可以直接赋值小数的,但是float是不可以直接赋值的。那可不可以像long 类型那样直接赋值带缩写的值呢。答案是肯定的.
double d=3.99d;//直接赋值
float f=3.14f;//直接赋值
这个d 和f 是不区分大小写的,但是建议小写,因为这也是一个不成文的规矩,一个默认规范。
下面我么再来看一组事列:
我们会发现,第一个变量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位,有兴趣的基友可以研究下,下边的代码,这里不做解释,后期会讲解这个。
下边我们来学习下 char 类型的特性
当你在eclipse上练习这几行代码的时候,你会发现,当输出变量a的时候是争取的,但是当输出变量ab的时候会报错,这是因为ab 在uincode中没有叫ab的编码 。
但是当输出变量c的时候,得到的结果是字母"a",这是因为,前面我已经说过了,看图。
限期,我们只需要记住如下
* 0 的int值为 48
* a 的int值为 97
* A 的int值为 65
我们再来看下下边的代码:
当输出变量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日晚有更新
以上是关于java 入门之八大内置基本类型的主要内容,如果未能解决你的问题,请参考以下文章