【Java基础语法】关键字,标识符,数据类型,常变量
关键字
Q:什么是关键字?
A:组成Java程序 的语法 的单词
Q:关键字都有哪些?
A:如下图:
Q:关键字需要特别记忆吗?
A:不用,代码写的多了就记住了。例如public
Q:使用关键字时,还要注意什么?(共3点)
A:
- 组成关键字的字母全部小写
- 关键字是被Java语言赋予特定含义的单词,所以在我们自定义类名,方法名,变量名时,不能使用关键字。
- 类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观。
如下图:标紫颜色单词即为关键字。
刚接触java时,关键词了解到这就可以啦~
后面我们继续学习时,会陆续对以上关键字一探到底!
标识符
Q:标识符是什么?
在程序中,用户给类,方法,变量,常量所起的名字,都可以称为标识符。同时,我们在代码中见到的名称,例如main,也可以看做是标识符。
Q:标识符的组成规则是什么?
标识符由数字,字母,下划线_,美元符号$组成
1.硬性要求
- 标识符不能数字开头
- 标识符不能是关键字
- 标识符严格区分大小写
2.软性建议(程序员都默认的驼峰式方法命名,见名知意)
-
标识符长度一般不要超过15个字符。
-
常量名:所有字母大写(无论几个单词)
-
标识符只是一个单词时,组成单词的所有字母小写;
-
标识符是两个及以上单词,遵循驼峰命名规则:
1.类名:每个单词的首字母大写(大驼峰),例如HelloWorld
2.方法名/变量名:首字母小写,后面每个单词的首字母大写(小驼峰),例如helloWorld。
以上规则的出现是因为,一个大型的工程一般是由多名工程师协同开发的。
如果每个人都按照自己的方式随意取名,.这会使程序非常混乱。
如果大家在取名时能够遵循一定的规则,那多人写的代码仿佛一个人写的。
3.测一测???
下面哪些标识符是 合法的?答案跳转:1
a:Public
b:public
c:123yc
d:hello:world
e:$hello
f:zxc
在看上文的时候,不知道大家有没有发现:我对关键字的理解就是:组成java语法的单词。对标识符的理解就是:我们在代码中见到的名称。它们都是代码中的很表面的东西。而接下来,我们看到的数据类型,将真正带我们走进代码背后的世界~
数据类型
Q:计算机是怎样保存数据的?
Q:先举个例子:假设你要利用java语言,在计算机上实现两个数的相加。那么要解决的第一个问题就是:如何把这两个数存储到计算机中?
A:电脑使用内存记忆计算时所使用的的数据
Q:如何把数据放到内存中?
A:把内存比作酒店,在内存中存储数据就类似于人入住酒店。
旅客想要入住酒店:
- 在酒店前台开房间,房间类型有单人间,双人间,总统套房
- 根据旅客的需求,选择合适的房间
- 入住
把数据存储当内存中:
- 向内存申请空间,空间(数据)类型有布尔类型,有浮点型,有整型等等。
- 根据数据的类型,选择合适的空间
- 存储数据
Q:数据类型是什么?
A:可以把数据类型形象理解为酒店房间类型
Q:代码中的数据类型会做什么行为?
A:数据是各式各样的。代码中数据类型的作用就是根据数据的类型,在内存中申请一块合适的空间,存储数据。
Q:在java中,数据类型都有哪些?
A:
如图,数据类型可以分为8个基础数据类型和一些引用类型。
Q:单个数据类型详解:
首先我们来看8个基本数据类型:
1.int(整型):
- 无论在16位操作系统下还是32位操作系统下,int类型向内存申请一个大小为4byte的空间,存放数据,数据是范围在-231~231-1之间的整数。
- 这里先简单理解一下变量,后面会具体写。
- 量理解为数据的统称,变就是可变的。变量就是可变的数据。
- 变量名就是这个可变数据的统称。
- 变量的具体内容就是数据值。
- 数据类型,变量名,变量的具体内容,它们三者的联系是:数据类型申请特定空间。该空间中可以存放特定一类数据,这一类数据的统称就是变量名。该空间中实际存放着数据值。所以他们三者体现在语法上就是:数据类型 变量名 = 数据值;
-
java中局部变量的初始数据值不能为空,否则编译不通过!
-
同时,在给变量赋值/设置初始值时,值不能超过int的范围,否则会导致值溢出。值溢出怎么办?通过强制类型转换(后面会说),编译通过,但导致数据丢失。
-
Integer:int的包装类型,通俗的讲,Integer就是int的加大版本,Integer的功能比int更强大。利用Integer在屏幕上打印int型变量所能表示的最大/最小范围
代码演示:
public class Zhengxing {
public static void main(String[] args) {
//演示1.2.
int a = 10;
//int向内存申请一个大小为4byte的空间,可以存放变量a,变量a的初始数据值是10。
//局部变量a
//演示3.
//int c;
//System.out.println(c);
//编译不通过:变量c没有设置初始值
//演示4.
//int b = 12345678977894645;
//编译时报错,初值超过了int的范围,导致数据值溢出
//演示5.
//利用Integer在屏幕上打印int型变量所能表示的最大/最小范围
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
}
}
运行结果:
思考:在演示3中,int不能存储变量b,那我们如何存储变量b呢?点击跳转答案2
2.long(长整型):
- 无论在16位操作系统下还是32位操作系统下,long类型向内存申请一个大小为8byte的空间,存放数据,数据是范围在-263~263-1之间的整数。
- java默认整数的数据类型是int,所以存储long类型数据的时候,一般情况下会在数据后面加L或l,代表该数据是一个长整型。
- Long:long的包装类型。利用Long在屏幕输出long类型能表示的最大和最小范围。
代码演示:
public class Changzhengxing {
public static void main(String[] args) {
//演示1.2.
long num1 = 5l;
long num = 5L;//推荐加L,避免认错数字1和小写字母l
//long向内存申请一个大小为8byte的空间,存放变量num,变量num的值是5。
//演示3
//利用Long在屏幕输出long类型能表示的最大和最小范围。
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
}
}
运行结果:
3.short(短整型):
- 无论在16位操作系统下还是32位操作系统下,short类型向内存申请一个大小为2byte的空间,存放数据,数据是范围在-215~215-1之间的整数。
- Short是short的包装类型。利用Short在屏幕输出short类型能表示的最大和最小范围。
- 使用short类型时,注意不要超过范围(一般使用较少)
代码演示:
public class Duanzhengxing {
public static void main(String[] args) {
//演示1.
short sh = 10;
//short向内存申请一个大小为2byte的空间,存放变量sh,变量num的值是10。
//演示2.
//利用Short在屏幕输出short类型能表示的最大和最小范围。
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
}
}
运行结果:
4.byte(字节型):
- 无论在16位操作系统下还是32位操作系统下,byte类型向内存申请一个大小为1byte的空间,存放数据,数据是范围在-27~27-1之间的整数。
- Byte是byte的包装类型。利用Byte在屏幕输出byte类型能表示的最大和最小范围。
代码演示:
public class Zijiexing {
public static void main(String[] args) {
//演示1.
short m = 10;
//Byte向内存申请一个大小为1byte的空间,存放变量m,变量num的值是10。
//演示2.
//利用Byte在屏幕输出byte类型能表示的最大和最小范围。
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
}
运行结果:
思考:byte、short、int、long都可以定义整形变量,为什么要给出4中不同类型呢?点击查看答案3
5.double(双精度浮点型):
- 无论在16位操作系统下还是32位操作系统下,double类型向内存申请一个大小为8byte的空间,存放数据。
- double向内存申请的空间中存放的数据同样有范围,但具体范围我们不做关注。因为 浮点数和整数在内存中的存储方式4不同,不能单纯使用2n的形式来计算double空间下数据的范围。
- double 类型的内存布局遵守 IEEE 754 标准(二进制浮点数算术标准), 即尝试使用有限的内存空间(64bit)表示可能无限的小数,。这势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
- Double是double的包装类型。
代码演示:
public class Fudianshu {
public static void main(String[] args) {
//演示1.
//向内存申请一个大小为8byte的空间,存放变量d。
double a = 3.14;
System.out.println(a);
//演示3.
//演示3.1:会输出1.21吗?
double b = 1.1;
System.out.println(b * b);
//演示3.2:会输出0.5吗?
double c = 1.0;
double d = 2.0;
System.out.println(c / d);
//演示3.3:会输出0.5吗?
int e = 1;
int f = 2;
System.out.println(e / f);
//演示4.(一般不关注)
//利用Double在屏幕输出double类型能表示的最大和最小范围。
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
}
}
运行结果:
- 演示3.3运行结果解释:从数学上来说,结果是0.5。但在java中, int 除以 int 的值仍然是 int,int申请的空间中无法保存小数,所以会直接舍弃小数部分。
- 演示3.1和3.2运行结果解释:double类型向内存申请一个大小为8byte的空间,即double类型的数值占用空间大小为64bit。在64个二进制数中,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差,比如演示3.1(除非实际数据恰好是2n,比如演示3.2)。简单来说,就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到数学上精确的结果。
- (可忽略)演示4运行结果解释:4.9E-324是一个无限趋近0,最小的,非负的浮点数。
6.float(单精度浮点型):
- 无论在16位操作系统下还是32位操作系统下,float类型向内存申请一个大小为4byte的空间,存放数据。
- java默认浮点数的数据类型是double,所以存储float类型数据的时候,需要在在数据后面加F或f,代表该数据是一个单精度浮点型。
- float向内存申请的空间中存放的数据同样有范围,但相较于double,float申请空间下的数据精度范围较小(64bit都无法精确表达,何况是32bit)。一般在工程上用到浮点数也都优先考虑 double, 不太推荐使用 float。
- float类型的内存布局也遵守 IEEE 754 标准(二进制浮点数算术标准)。即尝试使用有限的内存空间(32bit)表示可能无限的小数。
- Float是float的包装类型。
代码演示:
public class Fudianshu {
public static void main(String[] args) {
//演示1.
//向内存申请一个大小为4byte的空间,存放变量num。
float num = 1.0F;
System.out.println(num);
//演示5.(一般不关注)
//利用Float在屏幕输出float类型能表示的最大和最小范围。 System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
}
}
演示1运行结果:
趣味思考:小明在某款软件里通过看视频提现红包,软件告知小明还差99.99%就可以提现啦,于是小明认为马上就可以成功提现了!事实真的是这样吗?点击查看答案5
7.char(字符型):
- 无论在16位操作系统下还是32位操作系统下,char类型向内存申请一个大小为2byte的空间,存放数据,数据是范围在0~65535之间的整数。
- 计算机中的字符本质上是一个整数。在C语言中,数据类型char向内存申请一个大小为1byte的空间,存放数据,数据是范围在0~255之间的整数,即使用256个ACSII代码表示字符6。相比之下,在java中,使用65536个Unicode表示字符,并且Unicode代码包含ACSII代码,比如字符’A’的ACSII码值是065,它的Unicode码值也是065。所以,java中的数据类型char能存放的字符种类更多,包括中文。(一个汉字字符占两个字节)
- java中使用 ’ 单个字符 ’ (单引号+单个字符)的形式表示char类型字符字面值。
- Character是char的包装类型。利用Character在屏幕输出character类型能表示的最大和最小值范围。
代码演示:
public class Zifuleixing {
public static void main(String[] args) {
//演示1.3.
char ch1 = 'z';
char ch2 = '1';
char ch3 = '帅';
System.out.println(ch1);
System.out.println(ch2);
System.out.println(ch3);
//演示4.
//利用Character在屏幕输出character类型能表示的最大和最小值范围。
System.out.println(Character.MAX_VALUE);
System.out.println(Character.MIN_VALUE);
}
}
运行结果:
8.boolean(布尔类型):
- 布尔类型的数据值只有两种,true和false,true表示真,false表示假。
- java语法中没有明确规定Boolean类型向内存申请了多大的空间。
- Boolean是boolean的包装类型。
- true和false与数字类型不同,所以布尔类型和其他7个基本数据类型不能进行类型转换。
代码演示:
public class Buerleixing {
public static void main(String[] args) {
//演示1
boolean a = true;
System.out.println(a);
a = false;
System.out.println(a);
//演示4.
//boolean c = true;
//int b = c;
//boolean d = true;
//System.out.println(d+1);
}
}
运行结果:
演示1:
演示2:
演示3:
Q:数据类型转换
A:
- java是一个强类型编程语言。即当不同数据类型(数值型和字符型)下的变量之间进行相互赋值 的时候,会有严格的语法规定。该语法规定即数据类型转换。
- 不相干的数据类型之间由于兼容问题不能相互转换,比如Boolean和另外7种基本数据类型中的任一种之间;比如整型和浮点型之间;浮点型和字符型之间。注意整型和字符型之间可以进行相互转化。
- 数据类型转换分为自动类型转换和强制类型转换。
1.自动数据类型转换(小赋给大)
我们以数据类型向内存申请的空间大小为标准,当小空间中的变量a要赋给大空间中的变量b时,在代码编译过程中,编译器会自动先把变量a的类型提升为变量b的类型,然后再赋值。这就是自动类型转换。
代码演示:
public class Leixingzhuanhuan {
public static void main(String[] args) {
int a = 10;
long b = 100L;
b = a;
System.out.println(b);
// 计算机自动把变量a的类型提升为long类型,再赋给变量b,即自动类型转换。
}
}
运行结果:
2.强制数据类型转换(小赋给大)
- 同样以数据类型向内存申请的空间大小为标准,当大空间中的变量要赋给小空间中的变量时,在编译过程中,一定会导致数据丢失。但是java是一个安全的编程语言,于是就使得其编译器不会自动完成类型转换,同时报错。此时如果想要完成类型转换,需要我们写“确认”代码,进行强制类型转换。
- 需要注意的是:强制类型转换不一定成功。
- 强制类型转换下数据可能导致数据丢失。
代码演示:
public class Leixingzhuanhuan {
public static void main(String[] args) {
//演示1.
int a = 10;
long b = 100L;
//a = b;
// 计算机不能自动把大空间里的变量值赋给小空间里的变量值,于是报错
a = (int)b;
System.out.println(a);
//用户写确认代码,确认把long类型的变量b转换为int类型,然后再把b值赋给变量a。这就是强制类型转换。
//演示3.
//强制类型转换造成数据丢失
byte c = 2;
long d = 500;
c = (byte)d;
System.out.println(c);
}
}
运行结果:
3.把字面常量直接赋给变量
把一个字面常量值(见后面)赋给一个变量时,java会自动根据数字范围进行检查。在范围之内,赋值成功。在范围之外,写“确认”代码,进行强制类型转换,否则报错。
代码演示:
public class Leixingzhuanhaun {
public static void main(String[] args) {
byte a = 10;
byte b = (byte)300;
System.out.println(a);
System.out.println(b);
}
}
运行结果:
Q:数据类型提升
A:类型提升就是:当不同数据类型(数值型和字符型)下的变量之间进行相互运算 的时候,小空间的数据类型会被提升成为大空间的数据类型。
现在,想必大家对于酒店的房间类型(数据类型)已经了解的很清楚了,接下来就让我们继续了解要入住酒店的人(常变量)吧!
可以把接下来要学习的 常变量 形象理解为入住酒店的人
常/变量(这里指局部变量)
Q:常量是什么?
A:程序运行期间,固定不变的量,即为常量。
public class Constant {
public static void main(String[] args) {
System.out.println("100");
System.out.println("hello world");
System.out.println('a');
System.out.println(3.14);
System.out.println(true);
//在上述语句中,无论程序如何运行,
// 输出的都是100,hello world,a,3.14,true,
//100,"hello world",'a',3.14,true它们都是不能改变的量,即字面常量
}
}
Q:字面常量分为哪几类?
与数据类型所对应,字面长量分为整型常量,浮点型常量,字符常量,布尔常量,字符串常量,空常量。
- 整型常量:程序中直接写的数字(注意没有小数点),比如100,1000
- 浮点数常量:程序中直接写的小数,比如3.14,0.49
- 字符常量:由‘’(单引号)括起来的单个字符,比如‘a’,‘1’。
- 字符串常量:由“”(双引号)括起来的多个字符,比如“你好”,“1345”,“helloworld”。
- 布尔常量:只有两种true和false
- 空常量:null
Q:什么是变量?
A:
- 在java程序中,可以被改变的量即变量。一个变量只能存一个值。
- 定义在方法内部的变量叫局部变量。
Q:变量有什么特点?
A: java是强类型语言,即如果我们想使用自定义变量,首先必须确定这个自定义变量的类型。
所以,变量的特点是:先定义数据类型后使用。不定义不使用。
Q:变量使用的语法:
A:数据类型 变量名称 = 值;
在计算机上达到存值的目的
例如:int num = 10;
(基本数据类型int向内存申请了一块大小为4byte的空间,把变量num(num的值是10)存储到了计算机内存中)
代码练习:
public class Variable {
public static void main(String[] args) {
//演示1
//name = "张三";
//System.out.println(name);
//name变量使用前没有定义数据类型
// 程序运行时报错:错误:找不到符号
//演示2
String name = "张三";
System.out.println(name);
//演示3:
String sex = "";
//String sex = "";等同于String sex = Null;
//String默认值是Null,Null是空的意思
sex = "女";
//什么是变量?
//一个变量只能存一个值,sex从默认值Null改变为“女”,即sex是可以改变的量,sex是变量
System.out.println(sex);
//演示4
//int b;
//System.out.println(b);
//变量b没有初始化
//程序运行时报错:可能尚未初始化变量b
//java当中的局部变量一定要赋值,否则编译不通过!
}
}
}
以上就是我对于java基础语法中关键字,标识符,数据类型,常变量的相关理解啦!如有不对的地方,欢迎各位大佬来指正!
本篇完结~
撒花~
aef合法 ↩︎
int类型向内存申请一个大小为4byte的空间,存放范围在-232~232-1之间的整数数据。long类型向内存申请一个大小为8byte的空间,存放范围在 -263~263-1之间的整数数据。所以可以选择long类型存储变量b。 ↩︎
这就好比根据自己的尺码买适合自己的衣服,有4中不同的数据类型是为了根据不同场景下的不同变量,申请更适合它们的空间 。提高空间利用率。 ↩︎
java是面向对象的语言,所以在学习java的过程中,关于数据在内存中究竟是如何存储的,可以不做深入理解。如果想学习数据的存储方式,详情移步C语言专栏。 ↩︎
小明离成功提现还差的很远。这里的99.99%可能是99.990000000009%。在程序的世界中,不存在任何一个精确的小数。我们常说的精确到小数点后XX位,意思也仅指:小数点后这XX位是最精确的,但是浮点数的小数点后不止有XX位,剩余的位数都是不精确的。 ↩︎
ACSII代码简单理解就是,给电脑上的字符分别用数字编个号码。这些数字号码即ACSII码值。知道ACSII码值,就能对应找到符号。下面是常用字符与ASCII代码对照表:
↩︎