变量:
-
成员变量:直接声明在类中的变量,可以在方法的上方或者下方,成员变量与方法是同级的
- 作用:用来解释面向对象这个类中的属性
- 特点:
- 范围:整个类中都可以使用这个成员变量
- 成员变量没有使用前,都会有一个默认值
- 整数型默认值:0
- 浮点型默认值:0.0
- 字符型默认值:空字符
- 布尔型默认值:fasle
- 引用型默认值:null
- main方法中用到成员变量,该成员变量必须使用stati修饰,因为静态变量不能引用上下文的非静态变量
- 怎么理解成员变量是在堆内存的 ?
- 堆内存的生命周期长,是从程序开始到结束,才会消失的。而成员变量也是同理,在声明成员变量的时候,是在整个类中都可以使用的,也就是说,他的声明周期痛堆内存一样,也是从程序开始到结束才消失的,所以才说成员变量是在堆内存的。
-
局部变量:声明在方法内部的变量
-
概念:就是声明在方法()内或者{ }中,都是局部变量
- 这里的方法()表示的是方法的形参。{ }表示方法的主体或者代码块
-
作用:
- 辅助完成一个方法的功能比如说我们需要用一个变量来完成方法内部的逻辑实现,我们就可以使用局部变量进行辅助
-
特点:
- 作用域范围:在声明位置的下方,到 }结束,都可以使用局部变量。
- 局部变量没有默认值,所以在使用前,我们必须先赋值,不然会报错
-
怎么理解局部变量是在栈内存的?
- 因为栈内存的生命周期比较短,是即用即消失,而局部变量也是一样,只有在辅助方法或者其他使用的时候才声明,用完就没有,所以局部变量是放在栈内存的
-
局部变量和成员变量的区别:
-
声明位置:
- 成员变量在整个类中,局部变量声明在方法的内部或者花括号{ }内部结构体中
-
作用范围:
- 成员变量的作用范围是在 整个类中都可以使用,但是局部变量只能在当前的方法中或者花括号{ }中有效使用、
-
初始值:
- 成员变量有默认值,但是局部变量没有默认值,再使用局部变量前,必须给局部变量赋值,否则会报错
-
特别注意:在同一个类中,如果成员变量和局部变量命名相同,那么使用到的是就近的局部变量的值
-
-
数据类型转换:
-
概念:一种格式或者结构向另一种格式或者结构转换的过程
-
作用:
- 节约内存空间
- 将一些项目类型转换为项目所需的类型
-
数据类型大小的比较:
-
byte < short < int < long < float < double
-
此处,因为浮点型的存储方式和整型的存储方式不一样,因此尽管float尽管只是占4个字节,也要比整型的大
-
数据类型转换的分类:
-
自动隐式转换:
-
概念:
- 就是从当前数据类型自动转换为另一个数据类型
-
小转大:从数据类型小的转向数据类型大的 直接自动隐式转换
- byte —> short —>int —>long —>float —>double
- char —>int —> long —> float —> double
- 这里注意:byte和char不能自动转换 char和short不能自动转换 Boolean和其他七种类型不能参与自动转换 char类型想更高长度类型(比如 int型)转换时,会换成对应的ASCII码值 在做其他类型的自动转换
-
特例:编译时,只看类型不看值
-
int a = 129; byte b = (byte)a;// 编译器只看容器不看值 System.out.println(b);// 结果为-127
-
为什么会得到-127?
- 因为编译器在编译的时候只看类型的转换,这里的int 类型向下强转没报错是因为,编译器会默认为他们是可以进行转换的,但是并不会注意byte和int 范围的差异,因此,输出的结果为 -127
-
-
-
强制类型转换:
-
概念:
-
从大的数据类型转换为小的数据类型。
-
语法:小数据类型变量 变量名 = (小数据类型)大类型值/大类型变量名;
-
特别注意:
-
高转低的时候,会导致精度丢失,有数据溢出的风险
-
在实际开发中,我们进行强制转换的时候,要知道被强制转换的数据类型的范围,再去进行强制转换
-
当int 类型的具体的值,向byte、short、char类型转换的时候,值只要表示值在其范围内,就会进行自动隐式转换
-
eg:
-
int i1 = 123; int i2 = 456; float f1 = (float)((i1 + i2) * 1.2);// 类型大的转换为类型小的时,要加上强制转换符
因为(i1 + i2) * 1.2是在double类型的范围里面,会自动进行隐式转换,所以这里才有这个float进行强转
-
-
-
-
-
-
表达式:
-
概念:
- 由常量、变量、()、运算符等组合而成的算术式
- () 可以提高运算的优先级
-
表达式规律:
- 当表达式中变量类型类型小于int型的时候,运算的结果都会自动转为int型
- 当表达式中有变量类型大于int型的时候,运算的结果以表达式中精度最高的为准
运算符:
-
算术运算符:Arithmetic Operation
-
加号(+):只有String字符串参与的运算,才有拼接功能,在String之前,表示加法运算,只有在之后才表示拼接
-
减(-) 乘(*) 除(/) 模、取余(%)
-
-
自增自减运算符(++ --):
-
使用:
- 自增自减只能够用于变量,不能用于常量
- 自增自减的优先级比其他运算符的优先级高
- 常用在循环语句中
-
a++
-
变量在前,先用后增
-
++a
- 变量在后,先增后用
-
– 同++的执行原理一样
-
两者都是变量的值 +1
-
-
赋值运算符:
- 赋值运算符都是先进行运算再进行赋值
- 语法:变量1 += 值/变量2
- +=(累加) -=(累减) *= /= %=
- 运算时的注意事项:
- 从左往右,把符号右边的值赋值到左边的变量当中
- 符号看成是一个整体: 例如 += 看成是一个符号,不要看成两个
- 赋值运算有强制转换功能,可以避免类型提升.会有溢出风险
- 赋值运算符都是先进行运算再进行赋值
-
比较运算符:
-
返回结果一定是Boolean类型
-
“>” “< ” “>=” “<=” “==” “!=”
-
== 恒等于
- 比较基本类型,比较的是两个值是否相等
- 比较引用类型,比较的是地址是否相等
-
!= 不等于
- 比较基本类型,比较的是两个值是否不相等
- 比较引用类型,比较的是地址是否不相等
-
-
instanceof
-
只能比较引用类型,表示判断一个变量或者值是否属于某一个引用数据类型
-
语法:
-
值/变量 instanceof 引用数据类型
-
eg:
-
1.System.out.println("约" instanceof String); 2.String str = "不约"; System.out.println(str instanceof String);
-
-
-
-
-
三目运算符:
-
语法:
-
x ? y : z;
-
表示如果x为true,执行y,x为false则执行z。
-
x是boolean类型值或者boolean表达式。
-
y、z: 可以是表达式,也可以是值或者变量。
-
y和z可以是不同的数据类型,但是如果要接收三目运算的结果,必须要求y和z的类型完全一致
-
三目运算可以嵌套使用
-
-