Java之标识符、数据类型与表达式
文章目录
提示:以下是本篇文章正文内容。
一、标识符与数据类型
1.1 Java的基本语法单位
1.1.1 注释
//这是单行注释
/* 这
是
多行注释
*/
/* 这样也行 */
关于HelloWorld:
程序如下:
public class HelloWorld { //第一行的第三个单词必须和所在的文件名称
//完全一样,大小写也要一样。public class后面代表定义一个类的
//名称,类是Java当中所以源代码的基本组织单位。
public static void main(String[] args) { //第二行的内容是万年不变的固定写法,代表main方法
//这一行代表程序执行的起点
System.out.println("Hello,World!"); //第三行代表打印输出语句(即屏幕显示)
}
}
2.1.3 关键字
关键字的特点:
1.完全小写的字母。
2.在一些软件中有特殊颜色。
2.1.4 标识符
标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,
都是标识符。
- 命名规则:(硬性要求)
- 标识符可以包含英文字母26个(区分大小写)、0-9数字、$(美元符号)和 _(下划线)。
- 标识符不能以数字开头。
- 标识符不能是关键字。
- 命名规范:(软性建议)
- 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。例:HelloWorld。
- 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。例:helloWorld。
- 方法名规范:同变量名。
2.2 Java的基本数据类型
2.2.1 常量
常量:在程序运行期间,固定不变的量。
常量的分类:
(1)字符串常量:凡是双引号引起来的部分,叫做字符串。例如:“abc”、“Hello”、“123”(双引号中数量不限,0个,1个,多个。。。)
(2)字符常量:凡是用单引号引起来的单个字符,叫做字符常量。例如:‘A’、‘b’、‘9’、‘中’(单引号中只能有一个字符,也不能一个都不写)
(3)整数常量:直接写上的数字,没有小数点。例如:100、200、0、-250
(4)浮点数常量:直接写上的数字,有小数点。例如:2.5、-3.14、0.0
(5)布尔常量:只有量中取值。true、false
(6)空常量:null。代表没有任何数据。空常量不能直接用来打印输出。
2.2.2 数据类型
Java的数据类型分为两大类:
- 基本数据类型:包括整数型、浮点型、字符型、布尔型
- 引用数据类型:包括字符串、类、数组、接口、Lambda
基本数据类型:
- 整数型 byte short int long
- 浮点型 float double
- 字符型 char
- 布尔型 boolean
注意事项:
(1)字符串不是基本类型,而是引用类型;
(2)浮点型可能只是一个近似值,并非精确的值;
(3)数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但float是4字节,long是8字节;
(4)浮点数当中默认类型是double,如果一定要使用float类型,需要加上一个后缀F;
若是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。推荐使用大写字母后缀。
2.2.3 变量
变量:程序运行期间,内容可以发生改变的量。
创建一个变量并且使用的格式:
数据类型 变量名称; //创建了一个变量
变量名称 = 数据值; //赋值,将右边的数据值,赋值给左边的变量
一步到位的格式:
数据类型 变量名称 = 数据值; //在创建一个变量的同时,立刻放入指定的数据值
long num1 = 3000000000L;
System.out.println(num1); //3000000000
float num2 = 2.5F;
System.out.println(num1); //2.5
使用变量的注意事项:
(1)如果创建多个变量,那么变量之间的名称不可以重复;
(2)对于float和long类型来说,字母后缀F和L不要丢掉;
(3)如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围;
(4)没有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用;
(5)变量使用不能超过作用域的范围。
【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。
(6)可以通过一个语句来创建多个变量。如下,例如:
原来:int a = 10; --------> int a, b, c; ---------> int a = 10, b = 20, c = 30;
int b = 20; a = 10;
int c = 30; b = 20;
c = 30;
但是一般情况不推荐这么写。
2.2.4 数据类型转换
当数据类型不一样时,将会发生数据类型转换。
一、自动类型转换(隐式)
特点:代码不需要进行特殊处理,自动完成。
规则:数据范围从小到大。 摘自课本:各类型所占用的位数从短到长(或表示范围从小到大)以此为:
小 --------------------------------------------------------------------------> 大
byte ----> short ----> char ----> int ----> long ----> float ----> double
例:
long num1 = 100; //int ----> long
double num2 = 2.5F; //float ----> double
float num3 = 30L; //左边是float类型,右边是long类型,左右不一样
//long ------->float,范围是float更大一些,符合从小到大的规则
//发生了数据的自动类型转换
System.out.println(num2); //30.0
二、 强制类型转换(显式)
- 特点:代码需要进行特殊的格式处理,不能自动完成。
- 格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据;
例: int num = (int) 100L;
注意事项:
- 强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
例:int num2 = 6000000000; //int范围最大大约在21亿左右,而此处明显过大
System.out.println(num2);
例:int num3 = (int) 6000000000L; //对比上例,此时右边格式争取,long型范围够大
//并使用了强制类型转换
System.out.println(num2); //1705032704,此时数据溢出
int num4 = (int) 3.99; //double------>int的强制类型转换
Syetem.out.println(num4); //3 此并非四舍五入,所有的小数位都会被舍弃掉
- byte/short/char这三种类型都可以发生数学运算,例如加法“+”。
例:
char zifu1 = 'A';
System.out.println(zifu1 + 1); //66,大写字母A当作65处理
//一旦char类型进行了数学运算,那么字符就会按照一定的规则翻译成为一个数字
-
byte/short/char这三种类型在运算的时候,都会首先被提升成为int类型,然后再计算。
例: byte num5 = 40; //右侧的数值大小不能超过左侧的类型范围 byte num6 = 50; // byte + byte ---> int + int --->int int result1 = num5 + num6; System.out.println(result1); //90 short num7 = 60; //byte + short ---> int + int ---> int //int强制转换为short:注意必须保证逻辑上真实大小本来就没有超过short范围,否则会发生数据溢出 short result2 = (short) (num5 + num7);
-
boolean类型不能发生数据类型转换。
2.2.5. ASCII码表
ASCII值 | 控制字符 |
---|---|
48 | 0 |
65 | A |
97 | a |
ASCII码表: American Standard Code for Information Interchange,美国信息交换标准代码
Unicode码表:万国码。也就是数字和符号的对照关系,开头0-127部分和ASCII完全一样,但是从
128开始包含有更多字符。
二、表达式
2.1 表达式
2.1.1 运算符与表达式
运算符:进行特定操作的符号。
表达式:用运算符连起来的式子叫做表达式。例如:20 + 5,又例:a + b
四则运算:
- 加 (+)
- 减 (-)
- 乘 (*)
- 除 (/)
取模(取余数): %
除法:被除数 / 除数 = 商 … 余数
对于一个整数的表达式来说,除法用的是整除,整数除以除数,结果仍然是整数。只看商,不看余数。
只有对于整数的除法来说,取模运算才有余数的意义。
注意事项:一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
四则运算中的加号“+”有常见的三种用法:
- 对于数值来说,那就是加法。
- 对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算。
char类型字符,和int类型数字,之间的对照关系表:ASCII、Unicode
- 对于字符串String(首字母大写:并不是关键字)来说,加号代表字符串连接操作。
任何数据类型和字符串进行连接的时候,结果都会变成字符串
例 :
String str = Java;
System.out.println(str + 20 + 30); // Java2030, 从左至右按顺序
自增运算符: ++
自减运算符: –
-
基本含义:让一个变量涨一个数字1,或者让一个变量降一个数字1
-
使用格式:写在变量名称之前,或者写在变量名称之后。例如:++num,也可以num++
-
使用方式:
- 单独使用:不和其他任何操作混合,自己独立
- 混合使用:和其他操作混合,例如与赋值混合,或者与打印操作混合,等
- 单独使用:不和其他任何操作混合,自己独立
-
使用区别:
-
在单独使用时,前++与后++没有任何区别。也就是: ++num;和num++;时完全一样的。
- 在混合的时候,有【重大区别】
A. 如果是【前++】,那么变量【立马+1】,然后拿着结果进行使用。 【先加后用】
例 :
public class zizengzijian { public static void main(String[] args) { int num1 = 10; System.out.println(num1); // 10 ++num1; System.out.println(num1)l // 11 num1++; System.out.println(num1); // 12 } }
- 在混合的时候,有【重大区别】
B. 如果是【后++】,那么首先使用变量本来的数值,【然后再让变量加1】。【先用后加】
例: int num2 = 20; System.out.println(++num2); //21 System.out.println(num2); //21 int num3 = 30; System.out.println(num3++); // 30 System.out.println(num3); // 31 int num4 = 40; int result1 = --num4; System.out.println(result1); // 39 System.out.println(num4); // 39 int num5 = 50; int result2 = num5--; System.out.println(result2); // 50 System.out.println(num5); // 49 注意事项:只有变量才能使用自增、自减运算符。常量不可发生改变,所以不能用。
赋值运算符
赋值运算符分为:
(1)基本赋值运算符:就是一个“=”,代表将右侧的数据交给左侧的变量。
例:int a = 1;
(2) 复合赋值运算符:
+=
-=
*=
/=
%=
注意事项: -
-
只有变量才能使用赋值运算符,常量不能进行赋值。
-
复合赋值运算符其中隐含了一个强制类型转换。
例:
byte num = 30;
num += 5; // num = num + 5;
// num = byte + int;
// num= int + int;
// num = int;
// num = (byte) int;
System.out.println(num); // 35比较运算符:> < == >= <= !=
注意事项:
(1)比较运算符的结果一定是一个boolean值,成立就是true,否则为false;
(2)如果进行多次判断,不能连着写。
数字当中的写法,例如:1 < x < 3
程序当中不允许这种写法。
逻辑运算符与 (&&)
或 (||)
非 ( !)
短路:与“&&”,或(||),具有短路效果;如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。
例:
int a = 10; // false && ... System.out.println(3 > 4 && ++a < 100); //false System.out.println(a); //10 int b = 20; // true || ... System.out.println(3 < 4 || ++b < 100); //true System.out.println(b); //20
TIPS:
对于1 < x < 3的情况,应该拆成两个部分,然后使用与运算符连接起来:
int x = 2;
1 < x && x < 3
三元运算符
一元运算符:只需要一个数据就可以操作的运算符。例如:非!、自增++、自减–
二元运算符:需要两个数据才可以进行操作的运算符。例如:加法+、赋值=
三元运算符:需要三个数据才可以进行操作的运算符。
格式:
数据类型 变量名称 = 条件判断 ? 表达式A : 表达式B;
流程:
首先判断条件是否成立:
- 如果成立为true,那么将表达式A的值赋给左侧的变量; 如果不成立为false,那么将表达式的值赋给左侧的变量; 二者选其一。
注意事项:
1.必须同时保证表达式A和表达式B皆符合左侧数据类型的要求。
2.三元运算符的结果必须被使用。
例1:
public class ThreeYuan {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println('最大值:' + max); //20
}
}
例2:
int result = 3 > 4 ? 2.5 : 10; //错误写法
例3:
System.out.println(a > b ? a : b); //正确写法
例4:
a > b ? a : b; //错误写法
说明
人非生而知之乎。本人学习JavaScript是“师从”哔站阿婆主——黑马程序员,此文记录了本人所听之学习笔记以及自身之思考体悟。发表此拙作,以期同诸位同仁、朋友共享学习成果及经验。有不足或不当之处还请您斧正。