Java-语言基础
Posted 旷世奇才李先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-语言基础相关的知识,希望对你有一定的参考价值。
工欲善其事必先利其器
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
文章目录
一、基本数据类型
java中有8种基本数据类型来存储数值、字符和布尔值。
1、整数类型
整数类型用来存储整数数值,即没有小数部分的数值。可以是正数,也可以是负数。整型数据在Java程序中有3种表示形式,分别为十进制、八进制和十六进制。
十进制:例如100、0、-127(十进制不能用0作为开头,0除外)
八进制:例如0123、-0123(八进制必须以0开头)
十六进制:例如:0x25、0Xb01e(十六进制必须以0X或0x开头)
整型数据根据它所占内存大小的不同,可分为byte、short、int和long,4种类型。他们具有不同的取值范围。
数据类型 | 内存空间 | 取值范围 |
---|---|---|
byte | 8位 | -128至127 |
short | 16位 | -32768至32767 |
int | 32位 | -2147483648至2147483647 |
long | 64位 | -9223372036854775808至9223372036854775807 |
定义一个int型变量
int x; //定义int型变量x
int y; //定义int型变量y
int x = 100,y = 200; //定义int型变量x、y并赋给初始值。
在定义以上4种类型变量时,要注意变量的取值范围,超出相应的范围就会出错。对于long型值,若赋给的值大于int型的最大值或小于int型的最小值,则需要在数字后加L或l,表示该数值为长整数,如long num = 2147483648L
2、浮点类型
浮点类型表示有小数部分的数字。Java语言中浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围。
数据类型 | 内存空间 | 取值范围 |
---|---|---|
float | 32位 | 1.4E-45至3.4028235E38 |
double | 64位 | 4.9E-324至1.7976931348623157E308 |
在默认情况下,小数都被看作double型,若使用float型小数,则需要在小数后面添加F或f。可以使用后缀d或D来明确表明这是一个double类型数据,不加d不会错,但声明float型变量时如果不加f,系统会认为变量是double类型而出错。下面举个例子。
float f1 = 13.23f;
double d1 = 123.12d;
double d2 = 3456.3244;
3、字符类型
1、char型
字符类型(char)用于存储单个字符,占用16位(两个字节)的内存空间。在定义字符型变量时,要以单引号表示,如’s’表示一个字符,而"s"则表示一个字符串,虽然只有一个字符,但由于使用双引号,它仍然表示字符串,而不是字符。
使用char定义一个字符变量,变量的值为’a’
char x = 'a';
由于字符a在unicode表中的排序位置是97,因此允许将上面的语句写成
char x = 97;
java语言可以把字符作为整数对待。由于unicode编码采用无符号编码,可以存储65536个字符,所以java中的字符几乎可以处理所有国家的语言文字。若想得到一个0-65536之间的数所代表的unicode表中相应位置上的字符,也必须使用char型显示转换。
char word = 'd';
System.out.println("d在unicode表中的顺序位置是:" + (int)word);
结果输出为:d在unicode表中的顺序位置是:100
2、转义字符
转义字符是一种特殊的字符变量,它以反斜杠""开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”。例如,printf函数的格式串中用到的“\\n”就是一个转义字符,意思是“回车换行”。Java中的转义字符如下。
转义字符 | 含义 |
---|---|
\\ddd | 1-3位八进制数据所表示的字符,如\\123 |
\\uxxxx | 4位十六进制数据所表示的字符, |
\\\\’ | 单引号字符 |
\\\\ | 反斜杠字符 |
\\t | 垂直制表符,将光标移到下一个制表符的位置 |
\\r | 回车 |
\\n | 换行 |
\\b | 退格 |
\\f | 换页 |
4、布尔类型
布尔类型又称逻辑类型,通过关键字boolean来定义布尔类型变量,只有ture和false两个值,分别代表布尔逻辑中的“真”和“假”。布尔值不能与整数类型进行转换。布尔类型通常被用在流程控制中作为判断条件。
声明boolean类型变量,例如:
boolean b; //定义布尔型变量b
boolean b1,b2; //定义布尔型变量b1、b2
boolean b = true; //定义布尔型变量b,并赋给初始true
二、变量与常量
在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量。变量与常量的命名都必须使用合法的标识符。下面来介绍标识符与关键字、变量与常量的命名。
1、标识符和关键字
1、标识符
标识符可以简单地理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
Java语言规定标识符由任意顺序的字母、下划线(_)、美元符号($)和数字组成,并且第一个字符不能是数字。标识符不能是Java中的保留关键字。
2、关键字
关键字是Java语言中已经被赋予特定意义的一些单词,不可以把这些字作为标识符来使用。关键字如下:
int | public | this | finally | boolean | abstract |
---|---|---|---|---|---|
continue | float | long | short | throw | throws |
return | break | for | static | new | interface |
if | goto | default | byte | do | case |
strictfp | package | super | void | try | switch |
continue | float | long | short | throw | throws |
continue | float | long | short | throw | throws |
continue | float | long | short | throw | throws |
2、声明变量
变量的使用是程序设计中一个十分重要的环节。定义变量就是要告诉编译器这个变量的数据类型,这样编译器才知道需要配置多少空间给它,以及它能存放什么样的数据。在程序运行过程中,空间内的值是变化的,这个内存空间就称为变量。为了便于操作,给这个空间取个名字,称为变量名。变量的命名必须是合法的标识符。内存空间内的值就是变量值。在声明变量时可以是没有赋值,也可以是直接赋给初值。实例如下。
int age; //声明int型变量
char char1 = 'r'; //声明char型变量并赋值
3、声明常量
在程序运行过程中一直不会改变的量称为常量,通常也被称为“final变量”。常量在整个程序中只能被赋值一次。在为所有的对象共享值时,常量是非常有用的。
在Java语言中声明一个常量,除了要指定数据类型外,还需要通过final关键字进行限定。声明常量的标准语法如下:
final 数据类型 常量名称[=值]
常量名通常使用大写字母,但这并不是必需的。很多Java程序员使用大写字母表示常量,是为了清除地表面正在使用常量。
声明常量,实例代码如下:
final double PI = 3.1415926D; //声明double型常量PI并赋值
final boolean BOOL = true; //声明boolean型常量BOOL并赋值
当定义的final变量属于“成员变量”时,必须在定义时就设定它的初值,否则将会产生编译错误。
4、变量的有效范围
由于变量被定义出来后只是暂存在内存中,等到程序执行到某一个点,该变量会被释放掉,也就是说变量有它的生命周期。因此,变量的有效范围是指程序代码能够访问该变量的区域,若超出该区域,则在编译时会出现错误。在程序中,一般会根据变量的“有效范围”将变量分为“成员变量”和“局部变量”。
1、成员变量
在类体中所定义的变量被称为成员变量,成员变量在整个类中都有效。类的成员变量又可分为两种,即静态变量和实例变量。代码如下:
class var
int x = 45;
static int y = 90;
其中x为实例变量,y为静态变量(也称类变量)。如果在成员变量的类型前面加上关键字status,这样的成员变量称为静态变量。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。对于静态变量,除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用。
2、局部变量
在类的方法体中定义的变量称为局部变量,局部变量只在当前代码块中有效。
在类的方法中声明的变量,包括方法的参数,都属于局部变量。局部变量只在当前定义的方法内有效,不能用于类的其他方法中。局部变量的声明周期取决于方法,当方法被调用时,Java虚拟机为方法中的局部变量分配内存空间,当该方法的调用结束后,则会释放方法中局部变量占用的内存空间,局部变量也将会销毁。
局部变量可以与成员变量的名字相同,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效。
三、运算符
运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。Java中提供了丰富的运算符,如赋值运算符、算术运算符、比较运算符等。本节将向读者介绍这些运算符。
1、赋值运算符
赋值运算符以符号“=”表示,它是一个二元运算符(对两个操作数作处理),其功能是将右方操作数所含的值赋给左方的操作数。例如
int a = 100;
该表达式是将100赋值给变量a。左方的操作数必须是一个变量,而右方的操作数则可以是任何表达式,包括变量(如a、number)、常量(如123、‘book’)、有效的表达式(如45*12)。实例如下
int a = 10; //声明int型变量a
int b = 5; //声明int型变量b
int c = a+b; //将变量a与b运算后的结果赋值给c
由于赋值运算符“=”处理时会先取得右方表达式处理后的结果,因此一个表达式中若含有两个以上的“=”运算符,会从最右方的“=”开始处理。
2、算术运算符
Java中的算术运算符主要有+(加)、-(减)、*(乘)、/(除)、%(求余),它们都是二元运算符。
3、自增和自减运算符
自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。自增、自减运算符的作用是使变量的值增1或减1。放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算。放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。例如
++a //表示在使用变量a之前,先使a的值加1
a++ //表示在使用变量a之后,是a的值加1
int a,b = 5;
int c = ++a;
int d = a++;
System.out.println(c);
System.out.println(d);
上面的输出结果c等于6,d等于5;
4、比较运算符
比较运算符属于二元运算符,用于程序中的变量之间、变量和自变量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型。当运算符对应的关系成立时,运算结果为true,否则为false。所有比较运算符通常作为判断的依据用在条件语句中。比较运算符共有6个,如下所示。
运算符 | 作用 | 举例 | 操作数据 | 结果 |
---|---|---|---|---|
> | 比较左方是否大于右方 | ‘a’>‘b’ | 整型、浮点型、字符型 | false |
< | 比较左方是否小于右方 | 156<456 | 整型、浮点型、字符型 | true |
== | 比较左方是否等于右方 | ‘c’==‘c’ | 基本数据类型、引用型 | true |
>= | 比较左方是否大于等于右方 | 479>=426 | 整型、浮点型、字符型 | true |
<= | 比较左方是否小于等于右方 | 12.45<=45.5 | 整型、浮点型、字符型 | true |
!= | 比较左方是否不等于右方 | ‘y’!=‘t’ | 基本数据类型、引用型 | true |
5、逻辑运算符
返回类型为布尔值的表达式,如比较运算符,可以被组合在一起构成一个更复杂的表达式。这是通过逻辑运算符来实现的。逻辑运算符包括&(&&)(逻辑与)、||(逻辑或)、!(逻辑非)。逻辑运算符的操作元必须是boolean型数据。在逻辑运算符中,除了“!”是一元运算符之外,其他都是二元运算符。
运算符 | 含义 | 用法 | 结合方向 |
---|---|---|---|
&&、& | 逻辑与 | op1&&op2 | 从左到右 |
|| | 逻辑或 | op1 | |
! | 逻辑非 | !op | 从右到左 |
结果为boolean型的变量或表达式可以通过逻辑运算符组合为逻辑表达式。
用逻辑运算符进行逻辑运算时,结果如下所示
表达式1 | 表达式2 | 表达式1&&表达式2 | 表达式1 || 表达式2 | !表达式1 |
---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | false |
false | false | false | false | true |
false | true | false | true | true |
逻辑运算符“&&”与“&”都表示“逻辑与”,他们的区别在于当两个表达式都为true时,“逻辑与”的结果才会是true。使用逻辑运算符“&”会判断两个表达式:而逻辑运算符“&&”则是针对boolean类型的类进行判断,当第一个表达式为false时则不去判断第二个表达式,直接输出结果从而节省计算机判断的次数。通常将这种在逻辑表达式中从左端的表达式可推断出整个表达式的值称为“短路”,而那些始终执行逻辑运算符两边的表达式称为“非短路”。“&&”属于“短路”运算符,而“&”则属于“非短路”运算符。
6、位运算符
位运算符除“按位与”和“按位或”运算符外,其他只能用于处理整数的操作数。位运算是完全针对位方面的操作。整数数据在内存中以二进制的形式表示,如int型变量7的二进制表示是00000000 00000000 0000000 00000111。
左边最高位是符号位,最高位是0表示正数,若为1则表示负数。负数采用补码表示,如-8的二进制表示为11111111 11111111 11111111 11111000。这样就可以对整型数据进行按位运算。
1.“按位与”运算(都是1为1)
“按位与”运算的运算符为“&”,为双目运算符。“按位与”运算的运算法则是:如果两个整型数据a、b对应位都是1,则结果位才是1,否则为0。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
2.“按位或”运算(都是0为0)
“按位或”运算的运算符为“|”,为双目运算符。“按位或”运算的运算法则是:如果两个操作数对应位都是0,则结果位才是0,否则为1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
3.“按位取反”运算(1变0,0变1)
“按位取反”运算也称“按位非”运算,运算符为“~”,为单目运算符。“按位取反”就是将操作数二进制中的1修改为0,0修改为1。
4.“按位异或”运算(相同为0,不相同为1)
“按位异或”运算的运算符是“^”,为双目运算符。“按位异或”运算的运算法则是:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0,否则为1。若两个操作数的精度不同,则结果数的精度与精度高的操作数相同。
5.位移操作
除了上述运算符之外,还可以对数据按二进制位进行移位操作。Java中的移位运算符有以下三种。
<<:左移
|>>:右移
|>>>:无符号右移
左移就是将运算符左边的操作数的二进制数据按照运算符右边操作数指定的位数向左移动,右边移空的部分补0。右移则复杂一些。当使用“>>”符号时,如果最高位是0,右移空的位就填入0;如果最高位是1,右移空的位就填入1。
Java还提供了无符号右移“>>>”,无论最高位是0还是1,左侧被移空的高位都填入0。
7、三元运算符
三元运算符的使用格式为:
条件式?值1:值2
三元运算符的运算规则为:若条件式的值为true,则整个表达式取值1,否则取值2。例如
boolean b = 20<45?true:false;
如上例所示,表达式“20<45”的运算结果返回真,那么boolean型变量b取值为true;相反,表达式“45<20”返回为假,则boolean型变量b取值false;
三元运算符等价于if…else语句
8、运算符优先级
Java中的表达式就是使用运算符连接起来的符合Java规则的式子。运算符的优先级决定了表达式中运算执行的先后顺序。通常优先级由高到低的顺序依次是:
增量和减量运算
算术运算
比较运算
逻辑运算
赋值运算
如果两个运算有相同的优先级,那么左边的表达式要比右边的表达式先被处理。下面显示了Java中众多运算符的特定的优先级。
优先级 | 描述 | 运算符 |
---|---|---|
1 | 括号 | () |
2 | 正负号 | +、- |
3 | 一元运算符 | ++、–、! |
4 | 乘除 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | >>、>>>、<< |
7 | 比较大小 | <、>、>=、<= |
8 | 比较是否相等 | ==、!= |
9 | 按位与运算 | & |
10 | 按位异或运算 | ^ |
11 | 按位或运算 | | |
12 | 逻辑与运算 | && |
13 | 逻辑或运算 | || |
14 | 三元运算符 | ?: |
15 | 赋值运算符 | = |
四、数据类型转换
类型转换是将一个值从一种类型更改为另一种类型的过程。例如,可以将String类型数据“457”转换为一个数值型,而且可以将任意类型的数据转换为String类型。
如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换则必然会有信息丢失,有可能失败。
数据类型转换有两种方式,即隐式转换与显式转换。
1、隐式类型转换
从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作。这种类型的转换称为隐式转换。下列基本数据类型会涉及数据转换,不包括逻辑类型和字符类型。这些类型按精度从低到高排序的顺序为byte<short<int<long<float<double。
使用int型变量为float型变量赋值,此时int型变量将隐式转换成float型变量。
int x = 50; //声明int型变量x
float y = x; //将x赋值给y
此时执行输出语句,y的结果将是50.0
2、显示类型转换
当把高精度的变量的值赋给低精度的变量时,必须使用显示类型转换运算(又称强制类型转换)。
语法如下。
(类型名)要转换的值
下面通过几种常见的显示数据类型转换实例来说明。
将不同的数据类型进行显示类型转换,实例代码如下。
int a = (int)45.23; //此时输出a的值为45
long y = (long)456.6F; //此时输出y的值为456
int b = (int)'d'; //此时输出b的值为100
当执行显示类型转换时可能会导致精度损失。只要是boolean类型以外其他基本类型之间的转换,全部都能以显示类型转换的方法达到。
五、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
以上是关于Java-语言基础的主要内容,如果未能解决你的问题,请参考以下文章