javaSE
Day02
本来觉得se比较简单,如果忘记看一下笔记也可以捡起来,但是时间长了,奈何记性太差,学习之后老是忘记自己曾经都学会过什么,所以即便是基础也决定要虚心对待,记录如果出现错误,随时修改。
在csdn记录一下自己学习的过程。
1.变量
概述:在程序运行的过程中,值能发生改变的数据
作用:可以临时保存一个数据
定义格式
数据类型 变量名 = 值;
或
数据类型 变量名;
变量名 = 值;
或
数据类型 变量名 = 值,变量名 = 值,变量名 = 值 ...;(三/n个变量数据类型相同)
= 为赋值符号(如果有=出现,一定是先看等号右边的)
数据类型 变量名 = 值;
意思就是将等号右边的值赋给等号左边的变量
数据类型分类(面试可能会问,基础)
基本数据类型:4类8种
整型:byte short int long
浮点型:float double
字符型:char
布尔型:boolean
引用数据类型:
类 数组 接口 枚举 注解
数据类型 关键字 内存占用 取值范围(面试可能会问,基础)
字节型 byte 1个字节 -128~127 (算上0一共为256)
短整型 short 2个字节 -32768~32767
整形 int 4个字节 -2^31~2^31-1(正负21亿)
长整型 long 8个字节 -2^63~2^63-1(19位)
单精度浮点数 float 4个字节 1.4013E-45至3.4018E+38
双精度浮点数 double 8个字节 4.9E-324至1.7977E+308
字符型 char 2个字节 0至2^16-1
布尔类型 boolean 1个字节 true,false
也体现了java属于强类型语言。
整数默认类型为int(定义long型的时候一般给后面的数据加L)
小数默认类型为double(定义float的时候一般给后面的数据加f)
按照取值范围从小到大排序
Byte short char -> int ->long -> float -> double
变量和变量之间做运算
加 减 乘 除
变量和常量之间做运算
加 减 乘 除
\ 在java中代表转义字符
\n 在java中代表换行符
\t 在java中代表制表符
\n \t 都代表一个字符,可以直接使用char
用char类型表示一个’
char num = ‘\’’;
System.out.print(num);
变量使用的注意事项
- 变量不初始化,不能直接使用
- 在同一个作用域中,不能定义多个相同名字的变量
- 不同的作用域之间不要相互访问
如果作用域有嵌套:大作用域不能直接使用小作用域中的变量
小作用域可以使用大作用域中之前定义好的变量
2.标识符
概述:给方法,类,变量取的名字
硬性规定(必须遵守)
- 标识符可以包含`英文字母26个`、`0-9数字` 、`$(美元符号)`和`_(下划线)`。
- 标识符不能以数字开头。
- 标识符不能是关键字。
软性建议(建议遵守)
给类取名:每一个单词首字母都大写(大驼峰式)
给方法取名字: 从第二个单词开始往后(包括第二个单词)首字母大写(小驼峰式)
给变量取名字: 从第二个单词开始往后(包括第二个单词)首字母大写(小驼峰式)
取名字的时候最好要:见名知意
3.数据类型转换
什么时候会发生数据类型转换?
等号左右两边的类型不一致时
分类:
自动类型转换
强制类型转换
按照取值范围从小到大排列
byte short char -> int -> long -> float -> double
自动类型转换
表现形式
取值范围大的类型 变量名 = 取值范围小的类型
怎么转?
小类型自动向大类型转换
强制类型转换
表现形式
取值范围小的类型 变量名 = 取值范围大的类型 -> 报错
如何强转
取值范围小的类型 变量名 =(取值范围小的类型)取值范围大的类型
强转的注意事项
开发时不要故意写成强转的形式(除非没有办法),因为会出现精度损失和数据溢出
(精度损失一般是是强转之后数据舍弃后面不在取值范围的部分
数据溢出一般是是强转之后数据舍弃前面不在取值范围的部分)
byte short 如果等号右边是常量,且没有超出byte和short的范围,不用手动强转(jvm自动给强转了),但是等号右边一旦有变量参与,就要先提升为int型,需要手动强转
char类型如果等号右边有变量参与,也会自动提升为int,需要手动强转
char类型一旦提升为int,字符会去一个码表中查询此字符对应的int值->ASCII码表
如果ascii码表中查不到会自动去unicode码表中查询char对应的int值->万国码
(A - > 65 a- > 97)
4.运算符
算数运算符
+ 加
- 减
* 乘
/ 除(取整)
% 除(取余)
以上和数学中学过的用法一致
这其中+,如果是数值相加,就是加法,如果是字符串之间用+,就是拼接
并且任意类型的全部变成字符串
自增自减运算符
++
--
自增自减运算符是算数运算符的一种,只能和变量一起使用,且只变化1
注意事项
单独使用:符号在前后无所谓,都是先运算,然后使用运算后的值
混合使用:和其他语句一起使用了,比如赋值语句,打印语句,此时,
符号在前,先运算,再使用运算后的值
符号在后,先使用原来的值,使用完毕之后,自身++或--
public class Demo{
public static void main(String[] args){
int i = 1;
int result = i++;
System.out.println(result);//1
System.out.println(i);//2
int c = 100;
c = c++;
System.out.println(c);//100
c = c++;
System.out.println(c);//100
result = c;
System.out.println(result);//100
int a = 10;
int b = 20;
int result01 = a++ - --b + ++a;
System.out.println(result01);//3
}
}
赋值运算符
= :基本赋值符号,先看等号右边的
+=
-=
*=
/= :整数相除,取整数部分(商)
%= :取余数部分
注意:复合赋值运算符中,byte short char做运算时,即使有变量参与,也不用我们手动强转(jvm自动转的)
int i = 10 i+=2--> i = i+2
关系运算符
关系运算符专门用于判断,结果为 boolean型
==:判断符号前后是否相等,如果相等,结果为true,否则为false
>:判断符号前的数据是否大于后面的数据,如果大于,为true;否则为false
<:判断符号前的数据是否小于后面的数据,如果小于,为true;否则为false
>=:判断符号前的数据是否大于或者等于后面的数据,如果大于或者等于为true;否则false
<=:判断符号前的数据是否小于或者等于后面的数据,如果小于或者等于为true;否则false
!=:判断符号前后是否不相等,如果不相等,结果为true,否则为false
逻辑运算符
作用:主要是连接关系运算符的 逻辑运算符前后都是boolean型的数据
结果:boolean型
逻辑运算符
&&(与,并且):有假则假
||(或):有真则真
^(异或):符号前后结果一样为false 符号前后结果不一样为true
!(非,取反) 非true为false 非false为true
& | 和 && || 有什么区别:
&:如果符号前后是boolean表达式,称之为逻辑运算符;如果&前后是数值,为位运算符
如果是逻辑运算符:有假则假
如果符号前面为false,jvm照样会执行判断符号后面的
|:如果符号前后是boolean表达式,称之为逻辑运算符;如果|前后是数值,为位运算符
如果是逻辑运算符:有真则真
如果符号前面为true,jvm照样会执行判断符号后面的
&&(短路效果):有假则假,符号前如果是false,jvm后面不会执行判断
||(短路效果):有真则真,符号前如果是true,jvm后面不会执行判断
^:如果符号前后是boolean表达式,称之为逻辑运算符;如果^前后是数值,为位运算符
三元运算符
格式:
boolean表达式?表达式1:表达式2
执行流程
先走boolean表达式,如果是true,返回?后面的表达式1;否则就返回:后面的表达式2
面试练习:
class Exam{
public static void main(String[] args){
int i = 1;
int j = 2;
i += j++;
/*
i += j++;等价于 i = i + j++;
(1)j++,先取j的值2,然后j自增为3
(2) 1 + 2 = 3
(3)把3赋值给i
*/
j = i++ / 2 + ++i * j--;
/*
(1)i++,先取i的值3,然后i自增为4
(2)i++ / 2,3/2结果是1
(3)++i,i先自增为5,然后取i的值5
(4)j--,先取j的值3,然后j自减为2
(5)++i * j--,用取出来的5*3=15
(6)求+加法, 结果是1 + 结果15 = 16
(7)把16赋值给j
*/
System.out.println("i = " + i);//5
System.out.println("j = " + j);//16
}
}