一、面向对象(继)
1.this关键字
---------->代表当前类对象的地址值引用
目的:为了区分局部变量隐藏了成员变量
格式:
this.成员变量 = 局部变量;
例:
public void setName(String name){//局部变量,需要传入实际参数
this.name = name ; //成员变量= 局部变量
}
2.局部变量和成员变量
区别:
1)书写位置不同
成员变量:类中,方法外
局部变量:方法定义中,或者方法声明上
2)内存中位置不同
成员变量:堆内存中,和对象有关系
局部变量:栈内存中,和方法有关系
3)生命周期不同
成员变量:随着对象的创建而存在,随着对象的创建完毕等待jvm的垃圾器空闲时回收而消失
局部变量:随着方法的调用而存在,随着方法的调用而消失;
4)初始值不同
成员变量:是可以不初始化的,需要通过对象来赋值,存在默认初始化
局部变量:必须在使用之前初始化,否则报错
附:
什么时候把一个定义为成员变量的时机?
如果一个类能够描述这个事物的属性,必须为定义成员变量;否则都定义为局部变量
3.匿名对象
---------->没有名字的对象
好处:节省空间
匿名对象可以作为参数传递,创建完毕之后,没有栈内存指向,所以使用完毕立即被GC(垃圾回收器回收)
一般情况:匿名对象使用一次即可,这样不需要过多的开辟堆内存空间,直接被回收
格式:
new 类名();
匿名对象调用方法:
new 类名().成员方法名();
例: //使用匿名对象new 类名()
//new 类名().成员方法名() ; //调用自己方法
sd.method(new Student());
4.构造方法(就是一种方法)
1)这个方法,方法名和类名相同 2)这个方法,连void都没有 3)构造方法是可以重载的;(无参构造方法;有参构造方法)
目的:为了类的成员相关的数据进行初始化
系统默认初始化
显示初始化
注意事项:
当一个类中没有任何构造方法(无参/有参),系统会默认提供无参构造方法;
但如果提供有参构造方法,系统就不会再提供无参构造方法,无参构造就会报错;
一个标准类写法:
成员变量私有化
提供对外的公共访问方法,setXXX()/getXXX()
提供无参构造/有参构造方法(根据需求判断)
小结:
1)方法的形式参数是基本类型,调用方法的时候实际参数需传递对应数据值即可2)方法的形式参数是引用类型:数组,类,接口。实际参数在进行传递需要传递当前数组对象/类的对象/接口的对象
new :创建实例(堆内存开辟空间:空间地址值)
5.static关键字
本身含义:共有,共享的意思
static特点:
1)被静态修饰的随着类的加载而加载,优先与对象存在2)不能和this共存
3)本身含义就是共享,共用;可以有多个对象共享共用
4)被静态修饰的成员变量或者成员方法(静态变量/静态方法)
调用方式: