Java 随心笔记6

一、成员变量和局部变量(思考)
类中位置不同:成员变量在类中,方法外; 局部变量在方法内或方法声明上
内存中位置不同:成员变量堆内存,局部变量栈内存;
生命周期不同:成员变量随着对象存在而存在,局部变量变量随方法调用而存在,方法调用完毕结束而消失
初始化值不同:成员变量有默认的初始化值,局部变量没有,先定义赋值才能使用。

参数传递时传递的值

二、类的初始化
加载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()

猜你喜欢

转载自www.cnblogs.com/JulyTail/p/9054009.html