1、局部变量
【问题1】:什么是局部变量?
答:定义在局部位置的变量就是局部变量。
【问题2】:什么是局部位置?
答:方法的形参位置、方法体的内部。
【位置关系图】:
class Xxx {
?? ?//成员位置
?? ?public ...(局部位置) {
?? ??? ?//局部位置
?? ?}
?? ?//成员位置
}
作用:限制变量的使用范围
成员变量和局部变量的区别:
1).代码定义位置
成员变量:定义在类的成员位置;
局部变量:定义在类的局部位置;
2).作用域
成员变量:作用域大,可以在整个class的大括号内部被使用;
局部变量:作用域小,只能在定义的作用范围内被使用;
3).内存所在位置
成员变量:在堆中;
局部变量:在栈中;
4).默认值
成员变量:有默认值;
局部变量:没有默认值;
5).生命周期现象
成员变量:随着对象在堆中被创建也一并生成,随着对象被gc回收一并被清理;
局部变量:随着方法进栈在栈中创建空间区域,随着方法的弹栈也一并被回收;
2、类和对象的关系
搭建场景:
?? ?对象:某人、某车、某房子...
?? ?类型:老师(Teacher)
类型:
?? ?由多个对象共性内容进行抽取得到的抽象描述,称为:类型;
?? ?类可以理解为一张设计图,创建对象的模板。
对象:
?? ?通过类的实例化得到,在内存中占用资源 ==> 实实在在的个体;
?? ?一旦得到了对象就可以访问类中的成员完成需求。
3、面向对象特性之封装性
生活层面:食品、快递、机箱...
作用:提高安全性
程序层面:
?? ?1)、类、方法
?? ?2)、私有化与隐藏
关键字:private
实例化对象完毕后,使用对象名.属性名的方式为对象属性进行显示赋值操作,
很有可能赋的值会违背生活的逻辑和常态 ==> 数据不安全
所以我们考虑没收外界对象名访问属性的权利,私有化该属性 ==> 使用private修饰
在本类中提供外界访问属性的一组公共的方法(getter&setter)
格式如下:
?? ?getter方法
?? ??? ?public 数据类型 get属性名(){
?? ??? ??? ?return 属性名;
?? ??? ?}
?? ?setter方法
?? ??? ?public void set属性名(数据类型 形参名){
?? ??? ??? ?属性名 = 形参名;
?? ??? ?}
举例:
?? ?属性:private double money;
?? ?getter方法:
?? ??? ?public double getMoney(){
?? ??? ??? ?return money;
?? ??? ?}
?? ?setter方法:
?? ??? ?public void setMoney(double m){
?? ??? ??? ?money = m;
?? ??? ?}
【结论】:
?? ?在之后的学习和开发环境下,绝大多数情况,类中的属性都需要被私有化,
?? ?并且提供对应的getter&setter方法,记住:上述两个方法内部都不需要提供数据合理性校验操作
4、this关键字
使用在三个领域/三个作用:
1)、记录了正在被创建或者已经创建完毕对象的内存地址;
2)、区分同名的成员变量和局部变量;
3)、本类重载构造方法之间相互调用。
5、this关键字
第三个作用:本类构造方法之间相互调用
格式:
?? ?this(...);
注意:
?? ?1)、构造方法内部调用本类重载构造,只能在首行位置进行调用
?? ?2)、构造方法之间相互调用不能形成闭合回路
6、static关键字
解释:静态的
核心理解:
?? ?1)、静态的成员和类有关,非静态的成员和对象有关;
?? ?2)、类加载要远远早于对象加载 ==> 先有类,后有对象;
?? ?3)、早出现的不能调用晚出现的,晚出现的可以调用早出现的。
修饰的领域:
1)、修饰方法
称为:静态方法、类方法
格式:
?? ?类名.静态方法名(...);
好处:
?? ?不依赖于对象,即不需要创建对象,类名直接调用
?? ?理解:
?? ??? ?1)、代码定义更加简洁;
?? ??? ?2)、更加节省内存资源,提高开发效率。
【问题】:什么方法需要设计为静态方法,什么方法需要设计为非静态方法?
? ? ? 答:在设计自定义方法的过程中:
?? ? ?发现方法体中不需要访问调用非静态成员(属性、方法),则该方法可以设计为静态方法,
?? ? ?返之一旦方法体中有访问调用非静态成员(属性、方法),则该方法就必须设计为非静态方法。
2)、修饰属性
称为:静态属性、类属性
访问静态属性的格式:
?? ?类名.静态属性名
好处:
?? ?静态属性和类有关,不依赖于对象,不需要创建对象
?? ?理解:
?? ??? ?1)、代码定义更加简洁;
?? ??? ?2)、更加节省内存资源,提高开发效率。
【问题】:什么属性可以被定义为静态属性,什么属性可以被定义为非静态属性?
? ? ? 答:某属性对于该类所有对象都是唯一的值,则该属性可以被定义为静态属性;
?? ? ?否则就必须定义为非静态属性。
本电子书目录:《Java基础的重点知识点全集》