标签:静态成员变量 默认 学生 子类初始化 成员变量 extends 区别 上下 技术分享
一、成员变量和局部变量(思考)
类中位置不同:成员变量在类中,方法外; 局部变量在方法内或方法声明上
内存中位置不同:成员变量堆内存,局部变量栈内存;
生命周期不同:成员变量随着对象存在而存在,局部变量变量随方法调用而存在,方法调用完毕结束而消失
初始化值不同:成员变量有默认的初始化值,局部变量没有,先定义赋值才能使用。
参数传递时传递的值
二、类的初始化
加载class进内存
==》在栈内存中为s开空间
==》在堆内存中为学生对象开辟空间(new 类)
==》对学生对象的成员变量进行默认初始化;
==》对学生对象的成员进行默认、显示初始化;
==》通过构造方法对 对象的成员变量进行赋值;
==》学生对象初始化完毕,把杜希昂地址赋值给s变量。
三、static关键字
修饰成员变量和成员方法
特点
随着类的加载而加载
优先于对象存在(加载在class的静态区)
被类的所有对象共享(判断是否使用静态关键字的条件)
可以通过类名调用(Student.say();)
作用
在静态方法中没有this关键字
静态方法只能访问静态的成员变量和静态的成员方法
1.静态方法不能访问非静态成员变量
2.非静态方法可以访问静态成员变量
四、静态变量和成员变量的区别
所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
五、static代码块 构造代码块 局部代码块
局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
构造代码块 格式:{执行语句}
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
静态代码块 (在类中方法外出现,加了static修饰)
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且值执行一次。
静态代码块优先于构造代码块,而创建对象就会执行构造代码块,
1 /*动态成员方法 2 非静态成员方法访问静态成员变量 3 */ 4 class Demo_3 5 { 6 public static void main(String[] args) 7 { 8 Students s = new Students(); 9 s.b = 13; 10 s.say(); 11 } 12 } 13 class Students 14 { 15 int a; 16 static int b; 17 //非静态成员方法访问静态成员变量; 18 public void say(){ 19 System.out.println(b); 20 } 21 }
/*静态成员方法 静态成员方法访问非静态成员变量 结果:无法访问从静态上下文应用非静态变量 */ class Demo_5 { public static void main(String[] args) { Students s = new Students(); s.a = 13; s.say(); } } class Students { int a; static int b; //静态成员方法访问非静态成员变量; public static void say(){ System.out.println(a); } }
五、继承的概念
1.继承
特点:只支持单继承,不支持多继承(只能有一个父类)
支持多层继承,class a{} class b extends a{} class c extends b{}
作用:提高代码的复用性
提高代码的维护性
让类与类之间产生关系,是多态的前提(继承的弊端,耦合性特别强)
2.super的用法和this
定义:this代表本类对应的引用,
super代表父类存储空间的标识(父类引用)
用法:访问成员变量 this.成员变量 super.成员变量
访问构造方法 this(...) super(...)
访问成员方法 this.成员方法() super成员方法()
注意:在子类继承父类中的数据,会使用父类的数据,子类初始化之前要完成父类数据的初始化
每一个构造方法的第一条语句默认是super()
标签:静态成员变量 默认 学生 子类初始化 成员变量 extends 区别 上下 技术分享
原文地址:https://www.cnblogs.com/JulyTail/p/9054009.html