首页 > 代码库 > 2.java学习_基础知识(标识符、常量、变量、运算符)

2.java学习_基础知识(标识符、常量、变量、运算符)

标识符

定义

在程序中我们自定义的一些名称
在编程的过程中,经常需要在程序中定义一些符号来标记一些名称,
如包名、类名、方法名、参数名、变量名,这些符号被称为标识符。

组成元素

英文大小写字母

数字0~9

下划线_和美元符号$

规则


不可以以数字打头,如:4student ,×
不可以使用java的关键字,如class不能使用
严格区分大小写,如Xxx和xxx,是两个变量

原则

见名知意,驼峰命名

规范

掌握
包名
多个单词组成时,所有单词都小写。
举例:xxxyyyzzz
类名和接口名
多个单词组成时,所有单词的首字母大写。
举例:XxxYyyZzz
变量名和函数名

多个单词组成时,第一个单词的首字母小写,
后面的单词的首字母都大写。举例:xxxYyyZzz
常量名
所有字母都大写,多单词时每个单词用下划线_连接。
举例:XXX_YYY_ZZZ
总共64个,这是一幅扑克啊
关键字
关键字:被java语言赋予特定含义的单词。
特点:组成关键字单词的字母全部小写。
注意:
A:goto和const是保留字
B:类似于Notepad++、editplus这样的高级记事本,针对关键字都有特殊的颜色标记。

技术分享

   

常量

定义
java中固定不变的数值。
分类
字面值常量
整数常量
二进制binary:以0b打头
由0,1组成。以0b开头。JDK7以后的新特性。
八进制octal :以0打头
由0-7组成。以0开头。
十进制decimal
由0-9组成。默认就是十进制。
十六进制hex:以0x打头
由0-9,A-F(不区分大小写)组成,以0x开头。
小数常量
单精度浮点数float:以F结尾
双精度浮点数double:以D结尾或者省略
字符串常量
将一个或者多个字符用双引号("")标识声明,
""空内容的字符串,是长度为0的字符串常量
字符常量
将一个数字、字母或者符号、汉字用单引号(‘‘)
标识声明,以及由转义序列来表示的特殊字符。
只能放单个字符‘a‘;‘4‘;‘+‘;‘我‘;‘\r‘;‘\u0000‘;
‘\u0000‘表示一个空白字符,即单引号之间无任何字符。
一个char是大小占两个字节,
而一个中文也是两个字节。
布尔常量
较为特有,只有两个数值:true | false,是Java关键字
null常量
只有一个值null,表示对象的引用为空。
自定义常量
注意事项
常量可以直接被输出。
转义字符
定义
在字符常量中,反斜杠\是一个特殊的字符,被称为转义字符
作用
用来转义后面一个字符
常见转义字符
\r:表示回车符,将光标定位到当前行的开头,不会跳到下一行return
\n:表示换行符,光标换到下一行开头 next
\t:表示制表符,将光标移到下一个制表符tab的位置
\b:表示退格符号,就像键盘上的Backspace键
转义特殊符号
\‘:表示单引号字符
\":表示双引号字符
\\:表示反斜杠字符
进制特点与转换
进制的由来
规律
进制越大,表现形式越短
分类
二进制
由0和1组成的数字序列,以0b或者0B打头
八进制
以0开头并且其后由0~7范围的整数组成的数字序列
十进制
由数字0~9范围的整数组成的数字序列
十六进制
以0x或者0X开头并且其后由0~9、A~F组成的数字序列
进制间转换
其他进制到十进制
结论:把系数*(基数的权次幂)相加即可。
系数:就是每一位上的数据。
基数:X进制,基数就是X。
权:在右边,从0开始编号,对应位上的编号即为该位的权。
十进制到其他进制
除基取余,直到商为0,余数反转。
快速转换
8421码:二进制与十进制互转
二进制--八进制(3位组合)
二进制--十六进制(4位组合)
拆分组合法
变量
定义
就是将不确定的数据进行存储,也就是在内存中开辟一个空间。
开辟内存空间就是通过明确数据类型,变量名称,数值来完成的。
数据类型 变量名称 = 数值;
特点
1.内存中的一个存储区域
2.该区域有自己的名称(变量)和类型(数据类型)
3.该区域的数据(数值)可以在同一类型范围内不断变换
作用
用来不断的存放同一类型的常量并可以重复使用
注意事项

1.变量的作用范围(作用域):

一对{}之间有效
并且,在同一个大括号内不能同时定义同名的变量。
2.初始化值:
特别注意:
使用变量前,一定要初始化
必须有初始值才可以参与运算,无默认初始化值。
没有初始化值的变量不能直接使用。
你只要在使用前给值就行,不一定非要在定义的时候立即给值。
推荐在定义的时候给值。
3.在一行上建议只定义一个变量
可以定义多个,但是不建议

//在一行上定义多个变量
//int a = 10; int b = 20; int c = 30;
//上面的写法可以,但是不建议。
int a = 10;
int b = 20;
int c = 30;
下面的定义方式允许:
int x=3,y;
y=x+3;
int x=y=z=5;//这是错误的
int x=y=z;//这是错误的

int x,y,z;
x=y=z=5;
定义格式

a:数据类型 变量名 = 初始化值;
声明变量时直接初始化
b:数据类型 变量名;
变量名 = 初始化值;
先声明变量,在使用变量前完成初始化
定义变量的注意问题:

什么时候定义变量:
当你知道这是一个变化的内容的时候。
一般定义的范围:
首先是在小范围内,如果不合理,在考虑大范围...
变量的数据类型
基本数据类型
四类8种
数值型
整数类型
byte 1字节 -128 (-2^7)~127 (2^7-1)
short 2字节 -32768(-2^15)~32767(2^15-1)
int 4字节(默认类型)
long 8字节
以L结尾
原码
反码
补码
2、符号位为1的二进制转十进制负数
相信大家已经知道如何个转法了,不过在此还是说明一下。
补码 1111-1111
①除去符号位减1; 反码 1111-1110
②除去符号位,按位取反;结果就是负数的源码; 原码 1000-0001
③原码转成相应的十进制。十进制:-1
浮点类型
float 4个字节
以F结尾
float f=2.3f;
(默认)double 8个字节
底数E为10
字符型char
字符型char 在内存中占两个字节,取值范围0~65535
布尔型boolean
只有两个取值true|false,在Java运算中,不参与类型转换,可以认为是一个字节
引用数据类型
类class
接口interface
数组[]
注意

整数默认是int类型
浮点数默认是double类型。

长整型后缀用L或者l标记。建议使用L。
单精度浮点数用F或者f标记。建议使用F。
数据类型转换

数据类型自动提升
(隐式转换)

两种类型兼容
或者目标类型取值大于源类型

byte b = 6;
int i =b;
数据类型强制转换
(强制转换)
两种类型不兼容
或者目标类型取值小于源类型
显示声明强转格式:目标类型 变量名=(目标类型) 值;
注意:在使用赋值运算符(=除外)时,也可自动提升,不需要显示声明
不要随意的去使用强制转换,因为它隐含了精度损失问题。
注意事项
取值范围
(小→大)
byte,short,char < int < long < float < double
byte,short,char相互之间不转换,但是他们参与运算会首先转换为int类型
boolean类型不参与转换。
char可以赋值给int --long -- float -- double
数值溢出必须声明强转
如果赋值运算符右边的表达式是字面值常量运算,
那么先运算,若超出左边定义变量的取值范围
那么需要强转,若未超出那么可以接收。不报错。
举例: byte b4 = 3 + 4; //编译通过 。

若等号右边的表达式有int变量参与运算的话(因为自动提升),还是需要经过强制类型转换(只要有变量参与,就会自动提升)
举例:
int i = 3;
// byte b = i + 4; // 编译错误,
byte b = (byte) (i + 4);
案例
多读
思考题

思考题1:请问下面这个有没有问题
double d = 12.345;
float f = d;
--------------------------
//把double赋值给float,需要强制类型转换
double d = 12.345;
float f = (float)d;

思考题2:看看下面两个定义有没有区别呢?
float f1 = (float)12.345;
float f2 = 12.345f;
————————————————————
f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。
byte b = 130;有没有问题?如果我想让赋值正确,
可以怎么做?结果是多少呢? // -126
练习:byte b = (byte)300;
计算机中数据的运算都是补码进行的
A:获取130这个数据的二进制。
0000-0000 0000-0000 0000-0000 1000-0010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
10000010
这个结果是补码。
C:已知补码求原码。
符号位 数值位
补码: 1 000-0010

反码: 1 000-0001

原码: 1 111-1110
1 1 1 - 1 1 1 0
64 32 16 8 4 2 0 = -126
看程序写结果
通过字符和一个整数相加,我们给出一张表:ASCII码表。
通过看完这张表以后,我们要记住三个值:
‘a‘ 97
‘A‘ 65
‘0‘ 48
//直接输出一个字符
System.out.println(‘a‘); //a
//输出一个字符和一个整数做加法
System.out.println(‘a‘+1); //98
字符串数据和其他数据做+,结果是字符串类型。
这里的+不是加法运算,而是字符串连接符。


System.out.println("hello"+‘a‘+1); //helloa1
System.out.println(‘a‘+1+"hello"); //98hello
————————————————————
System.out.println("5+5="+5+5); //5+5=55
System.out.println(5+5+"=5+5"); //10=5+5
注意:
如果字符串在最前边,那么+号就是连接符;
如果前面是可以进行运算的表达式,
那么+号是算术运算符,先运算再连接
注意:
与类的向上转型(自动提升)、
向下转型(强制转换)
进行区分
运算符
【掌握】
算术运算符
11个:+正号,-负号,+加,-减,*乘,
/除:整数相除,结果为整数,忽略小数部分(不四舍五入)
若其中有小数参与运算,结果为小数
%取模(即求余):正负号只与左边被模数有关
++自增(前后有别):前先自增后运算,后先运算后自增
--自减(前后有别):前先自减后运算,后先运算后自减

+字符串相加:
(是否与字符串的前后顺序有关系???
经验证有关系,他的优先级只对字符串+后边的数据起作用)
字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
System.out.println("5+5="+(5+5)); 结果为"5+5=10"
System.out.println("5+5="+5+5); 结果为"5+5=55"
/:整数相除,结果只能是整数。
如果你想要小数,那么参与运算的
数据必须有一个是浮点数类型。
%: 取得余数
左边的数据大于右边,结果是余数。
左边的数据小于右边,结果是左边。
左边的数据等于右边,结果是0。
符号跟左边一致。
++,--:
单独使用:效果一致,隐含了强制类型转换功能【】
参与运算使用:前后不一致,
前,会先++/--,后,是后++/--

乐飞讲过一点:关于这个
后++,与是否引入第二个变量有关系:
无,打印输入,是未自增的值;
有,打印输出,是自增后的值
赋值运算符
6个:=赋值,+=加等于,-=减等于,*=乘等于,/=除等于,%=模等于
int x=y=z=5;//这是错误的
int x=y=z;//这是错误的
__________________
int x,y,z;
x=y=z=5;
+=这种运算符,内含了强制类型转换功能。
short s = 2;
s+=2;
等价于
s = (short)(s+2);
比较运算符
运算结果为布尔型
6个:==相等于,!=不等于,<小于,>大于,<=小于等于,>=大于等于
特点:关系运算符的结果都是boolean类型。
请千万注意:== 不要写成 =
逻辑运算符
对结果为布尔型的数据进行操作,结果仍为布尔型
6个:&与,|或,!非,^异或,&&短路与,||短路或
&:有false则false
|:有true则true
!:true变false,false变true
^:相同false,不同true
______________________
&&:有false则false
||:有true则true
____________________
&&和&的区别是:如果左边有false了,右边将不再执行。
||和|的区别是:如果左边有true了,右边将不再执行。
开发中常用:
&&, ||, ! (s+3);
位运算符

针对二进制数的每一位进行运算的符号
7个:&按位与,|按位或,~取反,^按位异或,
<<左移,>>右移,>>>无符号右移
<<左移
原值乘以2的移动的位数次幂,值左移变大
左边的高位舍弃,右边空出的部分补齐0。
>>右移
原值除以2的移动的位数次幂,值右移变小
如果最高位是0,左边被移空的位就填入0;
如果最高位是1,左边被移空的位就填入1
>>>无符号右移
无论高位是什么,右移后都补0
^按位异或
一个数异或另一个数两次,结果还是那个数
向左移动或者向右移动,
其实就是把数据增大或者缩小2的指定次幂。
三元运算符
三目运算符

格式:
(条件表达式)?表达式1:表达式2;
执行流程
如果条件表达式返回true,就把表达式1作为结果。
如果条件表达式返回false,就把表达式2作为结果。
嵌套三元表达式
int a = 20;
int b = 40;
int c = 30;

方式1:
int d = a>b?a:b;
int e = d>c?d:c;
方式2:
int f = (a>b)?(a>c?a:c):(b>c?b:c);
注意:

条件表达式说明这里将来只能是结果为true或者false的表达式。
三元运算符的操作都可以使用if语句改进,反之不成立

什么时候不成立呢?
当if语句控制的语句体是一条输出语句的时候,
就不成立。因为三元运算符是一个运算符,
必须要求有一个结果返回。
而输出语句却不能作为一个返回结果。
补充知识
表达式
表达式:用运算符连接的式子(有变量,常量组成)。
a+b 算术表达式
5>4 比较表达式
书写规范
及注意事项

比较运算符:比较运算符的结果都是boolean型,
也就是要么是true,要么是false
==,!=,>,>=,<,<=
分隔符:
分号;表示语句结束。可以在一行上写多条语句,
但是,建议一行上只写一条语句。
空格 :
关键字的前后必须有空格;
运算符的时候,在运算符两端可有可无。建议有。
注意:
千万不要把用等于号的地方,
写出了"==",否则可能不是你想要的结果。
注意事项:
a = a + 20;
a += 20;
结果是等价的,理解不是等价的。

因为+=这种运算符,内含了强制类型转换功能。
比如:
short s = 2;
s+=2;
等价于
s = (short)(s+2);
面试题
面试题1:
请用最高的效率写出2乘以8这个式子。
2*8 -- 2<<3
面试题2:
请把两个数据交换。
举例:
int a = 10;
int b = 20;
结果:
a = 20;
b = 10;

开发使用第三方变量的形式【掌握】。
面试使用位^运算符。
记忆:假设变量是a,b
左边:a,b,a
右边;a^b

2.java学习_基础知识(标识符、常量、变量、运算符)