局部变量与成员变量的区别、匿名对象

一、局部变量与成员变量的区别:
1、定义的位置上区别:
1)成员变量是定义在方法之外,类之内的。
2)局部变量是定义在方法之内。
代码示例:

class Car{
    //成员变量name
    String name;
    public void run(){
        //局部变量i
        for(int i = 0;i<10;i++){
            System.out.println("跑了"+i+"圈");
        }
    }
}

2、作用上的区别:
1)成员变量的作用是用于描述一类事物的公共属性的。
2)局部变量的作用就是提供一个变量给方法内部使用而已。

3、生命周期区别:
1) 成员变量随着对象的创建而存在,随着对象的消失而消失。
2)局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域那么就马上从内存中消失。

4、初始值的区别:
1)成员变量是有默认的初始值。
数据类型———————— 默认的初始值
int———————————— 0
float———————————0.0f
double——————————0.0
boolean—————————false
char——————————— ’ ’
String(引用数据类型)———null
2) 局部变量是没有默认的初始值的,必须要先初始化才能使用。
3)注意:这两种情况的比较,更好的理解局部变量初始化问题。
情况一:
局部变量与成员变量的区别、匿名对象_第1张图片
情况二:
局部变量与成员变量的区别、匿名对象_第2张图片

二、匿名对象:
1、定义:没有引用类型变量指向的对象称作为匿名对象。

2、匿名对象要注意的事项:
1)我们一般不会给匿名对象赋予属性值,因为永远无法获取的到。
局部变量与成员变量的区别、匿名对象_第3张图片
2)两个匿名对象永远都不可能是同一个对象。
局部变量与成员变量的区别、匿名对象_第4张图片

3、匿名对象的好处:
1)简化书写。
2)可以尽快的释放内存空间(使用完后,可能就会被马上回收)节省了内存空间。
局部变量与成员变量的区别、匿名对象_第5张图片

4、匿名对象的应用场景:
1)如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用匿名对象。
2)可以作为实参调用一个函数。

举例说明:
上一篇有一个汽车的例子,其中的CarFactory类有一个repair()方法,并且含有形参Car c,那么如果我满足这样的一个条件(该对象调用完一个方法之后,这个对象就不再使用了),那么我可以进行这样的操作在使用这个方法的时候:

//对这个汽车修理厂类进行对象的实例化
CarFactory cf = new CarFactory();
//调用repair()方法,使用匿名对象
cf.repair(new Car());

完整代码:

class Car{
    String name;
    String color;
    int wheel;

    public void run(){
        if(wheel==4){
            System.out.println("车况正常,高速飞驰");
        }else{
            System.out.println("缺少轮子,需要修理");
            CarFactory cf = new CarFactory();
            cf.repair(this);
        }
    }
}   

class CarFactory{
    String name;
    String address;
    String phone;

    public void repair(Car c){
        if(c.wheel!=4){
            c.wheel = 4;
            System.out.println("车修好了!");
        }
    }
}

//与Car类的关系很少,仅为实现代码效果,所以提供了Car类
class Demo1{
    public static void main(String[] args){
        CarFactory cf = new CarFactory();
        //匿名对象作为实参调用方法
        cf.repair(new Car());
    }
}

你可能感兴趣的:(Java随记)