鱼C论坛

 找回密码
 立即注册
查看: 2663|回复: 21

[系列教程] 【Java 教程(原创)】006.标识符和关键字以及基本数据类型

[复制链接]
最佳答案
57 
发表于 2017-1-5 23:38:52 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 零度非安全 于 2017-1-22 11:12 编辑

【Java 教程(原创)】索引帖

在这一部分我分四大块来讲,第一是标识符、第二是关键字、第三是基本数据类型,第四是基本数据类型的转换

标识符
用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。我就简单点说标识符就是一个名字。它的语法规则如下:

1>标识符由字母、下划线、美元符号和数字组成,长度不受限制。


2>标识符的第一个字符不能是数字字符。


3>标识符不能是关键字(在后面我会列出Java中的关键字)。


4>标识符不能是true、false和null(尽管true、false和null不是关键字)。
例如:以下都是标识符哟

Hello_java、Hello_12$、$23Boy

需要特别注意的是:标识符中的字母是区分大小写的,例如,helloHello是不同的标识符。给大家脑补下额外的知识
Java语言使用Unicode标准字符集,Unicode字符集由UNICODE协会管理并接受其技术上的修改,最多可以识别65536个字符,Unicode字符集的前128个字符刚好是ASCII码表。Unicode字符集还不能覆盖全部历史上的文字,但大部分国家的“字母表”的字母都是Unicode字符集中的一个字符,比如汉字中的“你”字就是Unicode字符集中的第20320个字符。Java所谓的字母包括了世界上大部分语言中的“字母表”,因此,Java所使用的字母不仅包括通常的字母a、b、c等,也包括汉语中的汉字、日文的片假名、朝鲜文、俄文、希腊字母以及其他许多语言中的文字。

关键字
关键字是Java语言中已经被赋予特定意义的一类单词,不可以把关键字作为标识符来用,切记,下面是Java的50个关键字:
abstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanceof int interface long native
new package private protected public
return short static strictfp super
switch synchronized this throw throws
transient try void volatile while
鱼油们大致浏览一下这些关键字哈

基本数据类型

基本数据类型也称为简单数据类型。Java语言有8种基本数据类型,分别是booleanbyteshortintlongfloatdoublechar,这8种基本数据类型习惯上可分为4种类型。
逻辑类型 boolean
整数类型 byte、short、int、long
字符类型 char
浮点类型 float、double

逻辑类型:
常量 true、false
变量 使用关键字boolean来声明逻辑变量,声明时也可以赋初值。例如:boolean x,ok = true,关闭 = false;

整数类型:

整数类型分为4种。

1>int型
常量 123、6000()(十进制)、007(八进制)、0x3ABC(十六进制)
变量 使用关键字int来声明int型变量,声明时也可以赋初值。例如:int x = 12,平均 = 9898,jiafei;


关于int型变量的额外说明:
对于int型变量,内存分配4个字节(byte),一个字节由8位(bit)组成,4个字节占32位。对于int x = 7;,内存存储状态如下:
00000000 00000000 00000000 00000111
最高位(左边的第一位)是符号位,用来区分正数或负数,正数使用原码表示,最高位是0;负数用补码表示,最高位是1。例如,对于int x = -8,内存的存储状态如下:
11111111 11111111 11111111 11111000
要得到-8的补码,首先得到7的原码,然后将7的原码中的0变成1,1变成0,就是-8的补码。因此,int型变量的取值范围是-2^31~2^31-1。

2>byte型
变量 使用关键字byte来声明byte型变量。例如:byte x = -12,tom = 28,漂亮 = 98;
常量 Java中不存在byte型常量的表示法,但可以把一定范围内的int型常量赋值给byte型变量。对于byte型变量,内存分配一个字节,占8位,因此byte型变量的取值范围是-2^7~2^7-1。如果需要强调一个整数是byte型数据,可以使用强制转换运算的结果来表示,例如:(byte)-12,(byte)28;


3>short型
变量 使用关键字short来声明short型变量。例如:short x = 12,y = 1234;
常量 和byte型类似,Java中也不存在short型常量的表示法,但可以把一定范围内的int型常量赋值给short型变量。对于short型变量,内存分配给两个字节,占16位,因此,short型变量的取值范围是-2^15~2^15-1。如果需要强调一个整数是short型数据,可以使用强制转换运算的结果来表示,例如:(short)-12,(short)28;

4>long型
常量 long型常量用后缀L来表示,例如108L(十进制)、07123L(八进制)、0x3ABCL(十六进制)。
变量 使用关键字long来声明long型变量。例如:long width = 12L,height = 2005L,length;对于long型变量,内存分配给8个字节,占64位,因此,long型变量的取值范围是-2^63~2^63-1。

字符类型:
常量 'A'、'b'、'?'、'!'、'9'、'好'、'\t'等,即用单引号括起来的Unicode表中的一个字符。
变量 使用关键字char来声明char型变量。例如:char ch = 'A',home = '家',handsome = '酷';
关于char型变量的额外说明:
对于char型变量,内存分配个两个字节,占16位,最高位不是符号位,没有负数的char。char型变量的取值范围是0~65535,。对于下列语句:
char x = 'a';
内存x中存储的是97,97是字符a在Unicoode表中的排序位置。因此,允许将上面的语句写成:
char x = 97;
有些字符(如回车符)不能通过键盘输入到字符串或程序中,这时需要使用转义字符常量\n(换行)、\b(退格)、\t(水平制表符)、\'(单引号)、\"(双引号)、\\(反斜线)等。例如:
char ch1 = '\n',ch2 = '\"',ch3 = '\\';
再如,字符串"我喜欢使用双引号\"”中含有双引号字符,但是,如果写成“我喜欢使用双引号"”,就是一个非法字符串。
要观察一个字符在Unicode表中的顺序位置,可以使用int型显示转换,如(int)'a'或int p = 'a'。如果要得到一个0~65536的数所代表的Unicode表中相应位置上的字符,必须使用char型显示转换。

在下面的例子当中,分别用显示转换来显示一些字符在Unicode表中的位置,以及某些位置上的字符,运行效果如下图所示:

displayConversion.png

例子代码如下:

displayConversion.java
  1. public class displayConversion{
  2.         public static void main(String args[]){
  3.                 char ch1 = 'w',ch2 = '好';
  4.                 int p1 = 32831,p2 = 30452;
  5.                 System.out.println(""" + ch1 + ""的位置:" + (int)ch1);
  6.                 System.out.println(""" + ch2 + ""的位置:" + (int)ch2);
  7.                 System.out.println("第" + p1 + "个位置上的字符是:" + (char)p1);
  8.                 System.out.println("第" + p2 + "个位置上的字符是:" + (char)p2);
  9.         }
  10. }
复制代码

浮点类型:

浮点类型分为float和double型。

1>float型
常量 453.5439f、21379.987F、231.0f(小数表示法)、2e40f(2*10^40,指数表示法)。需要注意的是,常量后面必须要有后缀 f 或 F 。
变量 使用关键字float来声明float型变量。例如:float x = 22.76f,tom=1234.987f,weight=1e-12F;
关于float型变量的额外说明:
float变量在存储float型数据时保留8位有效数字,实际精度取决于具体数值。例如,将常量12345.123456789f赋值给float变量x:
x = 12345.123456789f
那么,x存储的实际值是12345.123046875(保留8位有效数字)。
对于float型变量,内存分配给4个字节,占32位,float型变量的取值范围是10^-38~10^38和-10^38~10^-38。

2>double型
常量 2389.539d、2318908.987、0.05(小数表示)、1e-90(1*10^-90,指数表示法)。对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。
变量 使用关键字double来声明double型变量。例如:double height = 23.345,width = 34.56D,length = 1e12;
关于double型变量的额外说明:
double变量在存储double型数据时保留16位有效数字,实际精度取决于具体数值。对于double型变量,内存分配给8个字节,占64位,double型变量的取值范围是10^-308~10^308和-10^-308~10^308。

基本数据类型的转换
当把一种基本数据类型变量的值赋给另一种基本类型变量时,会涉及数据转换。在Java中,有些基本类型会涉及数据转换(不包括逻辑类型),将这些类型按精度从“低”到“高”排列为byte、short、char、int、long、float、double。
当把级别低的变量赋给级别高的变量时,系统会自动完成数据类型的转换。例如:
  1. float x = 100;
复制代码
如果输出x的值,结果将是100.0。
例如:
  1. int x = 50;
  2. float y;
  3. y = x;
复制代码

如果输出y的值,结果将是50.0。
当把级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算。显示转换的格式如下:
(类型名)要转换的值;
例如:
  1. int x = (int)34.89;
  2. long y = (long)56.98F;
  3. int z = (int)1999L;
复制代码
如果输出x、y和z的值,它们将是34、56和1999,强制转换运算可能导致精度的损失。

当把一个int型常量赋值给一个byte和short型变量时,不可以超出这些变量的取值范围,否则必须进行类型转换运算。例如,常量128属于int型常量,超出byte变量的取值范围,如果赋值给byte型变量,必须进行byte类型转换运算(将导致精度的损失),如下所示:
  1. byte a = (byte)128;
  2. byte b = (byte)(-129);
复制代码

那么a和b得到的值分别是-128和127。
另外,一个常见的错误是把一个double型常量赋值给float型变量时没有进行强制转换运算,例如:
  1. float x = 12.4;
复制代码

将导致语法错误,编译器将提示“possible loss of precision”。正确的做法是:
  1. float x = 12.4F;或float x = (float)12.4;
复制代码
下面这个例子演示了基本数据类型转换的相互转换,运行效果如下图:

mutualTransformation.png

例子代码如下:

mutualTransformation.java
  1. public class mutualTransformation{
  2.         public static void main(String args[]){
  3.                 int c = 128;
  4.                 long d = 77777;
  5.                 float f = 2e3F;
  6.                 double g = 3.14e-300;                                       //指数表示法
  7.                 double result = f * g;
  8.                 System.out.println("f = " + f);
  9.                 System.out.println("g = " + g);
  10.                 System.out.println("result = " + result);
  11.                 g = 1234.123456789;                                        //小数表示法
  12.                 c = (int)d;
  13.                 f = (float)g;                                              //导致精度的损失
  14.                 System.out.println("c = " + c);
  15.                 System.out.println("d = " + d);
  16.                 System.out.println("f = " + f);
  17.                 System.out.println("g = " + g);
  18.         }
  19. }
复制代码


【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。





本帖被以下淘专辑推荐:

最佳答案
54 
发表于 2017-1-6 07:42:50 | 显示全部楼层
哇!又出新的了
最佳答案
0 
发表于 2017-1-6 09:19:21 | 显示全部楼层
加油加油,出到6了,继续坚持

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 热爱鱼C^_^

查看全部评分

最佳答案
57 
 楼主| 发表于 2017-1-6 12:49:02 | 显示全部楼层

嗯哪,最近有点忙,只能在晚上抽点时间来整理整理
最佳答案
57 
 楼主| 发表于 2017-1-6 12:49:50 | 显示全部楼层
ston77 发表于 2017-1-6 09:19
加油加油,出到6了,继续坚持

我这老司机开车稳不会翻的
最佳答案
12 
发表于 2017-1-6 21:57:35 | 显示全部楼层
来支持学习了!

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5 热爱鱼C^_^

查看全部评分

最佳答案
0 
发表于 2017-1-20 11:53:09 | 显示全部楼层
跟C/C++区别有点大。学习了。

评分

参与人数 1鱼币 +5 收起 理由
零度非安全 + 5

查看全部评分

最佳答案
57 
 楼主| 发表于 2017-1-20 12:29:53 | 显示全部楼层
小小七 发表于 2017-1-20 11:53
跟C/C++区别有点大。学习了。

加油学吧,骚年
最佳答案
0 
发表于 2017-1-22 11:01:51 | 显示全部楼层
我感觉很多人都不知道这个版块的
非安全哥赶紧的去公众号打个广告啊
最佳答案
57 
 楼主| 发表于 2017-1-22 11:06:47 | 显示全部楼层
464318257 发表于 2017-1-22 11:01
我感觉很多人都不知道这个版块的
非安全哥赶紧的去公众号打个广告啊

起初【JAVA语言交流】版块是放在【综合交流区】内,后来把这个版块单独从【综合交流】版块分出放在【技术交流区】大版块。
最佳答案
0 
发表于 2017-1-22 11:51:21 | 显示全部楼层
零度非安全 发表于 2017-1-22 11:06
起初【JAVA语言交流】版块是放在【综合交流区】内,后来把这个版块单独从【综合交流】版块分出放在【技术 ...

这个
你不说俺还真是不知道哎
最佳答案
57 
 楼主| 发表于 2017-1-22 11:58:01 | 显示全部楼层
464318257 发表于 2017-1-22 11:51
这个
你不说俺还真是不知道哎

现在【综合交流区】里新出了一个【PS学堂】版块,学 PS 的,你可以去看下!!!
最佳答案
0 
发表于 2017-1-22 13:40:18 | 显示全部楼层
零度非安全 发表于 2017-1-22 11:58
现在【综合交流区】里新出了一个【PS学堂】版块,学 PS 的,你可以去看下!!!


这个我知道,毕竟甲鱼哥有打广告
最佳答案
0 
发表于 2017-2-22 13:43:14 | 显示全部楼层
在网易云课堂上开课了吗?
最佳答案
57 
 楼主| 发表于 2017-2-22 16:15:36 | 显示全部楼层
凸凸凸兔 发表于 2017-2-22 13:43
在网易云课堂上开课了吗?

木有咯
最佳答案
0 
发表于 2017-3-18 12:57:28 | 显示全部楼层
以前都没有注意到标识符是汉字的可能,赞!

评分

参与人数 1鱼币 +4 收起 理由
零度非安全 + 4 热爱鱼C^_^

查看全部评分

最佳答案
57 
 楼主| 发表于 2017-3-18 12:59:16 | 显示全部楼层
CarpLyy 发表于 2017-3-18 12:57
以前都没有注意到标识符是汉字的可能,赞!

可以的,亲!!!
最佳答案
3 
发表于 2017-4-11 11:08:00 | 显示全部楼层
字符类型的 displayConversion.java中System.out.println("\"" + ch1 + "\"的位置:" + (int)ch1);这句中转义字符那块不是很明白,“\””这种写法会输出‘’,可以解释一下吗?
最佳答案
57 
 楼主| 发表于 2017-4-11 12:03:50 | 显示全部楼层
weiyang__ 发表于 2017-4-11 11:08
字符类型的 displayConversion.java中System.out.println("\"" + ch1 + "\"的位置:" + (int)ch1);这句中转 ...

我知道你的意思是会输出 \",但 \ 是转义字符,\ 对其进行转义,不要想得那么复杂!


最佳答案
0 
发表于 2017-4-27 09:21:45 | 显示全部楼层
006 打卡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2018-8-20 13:21

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表