2019-11-18 · Java面向对象编程(属性与局部变量对比)

一,属性和局部变量的对比

属性(也称成员变量) vs 局部变量


1.相同点:

1.1 定义变量的格式一样:数据类型 变量名 = 变量值。
1.2 先声明,后使用。
1.3 变量都有其对应的作用域,出了作用域就没有这个变量了。

2.不同点:

2.1在类中声明的位置不同
  • 属性(或成员变量):直接定义在类的一对{}里。
  • 局部变量:声明在方法中,方法形参,代码块内,构造器形参,构造器内部的变量。
2.2 关于权限修饰符的不同
  • 属性:可以在声明属性时,使用权限修饰符。
    常用的权限修饰符:private,public,缺省(默认),protected (封装性)。
  • 局部变量:不可以使用权限修饰符。
2.3 默认初始化值的情况:
  • 属性:类的属性,根据其类型都有默认初始化值。
    整型:0
    浮点型:0.0
    字符型char:0 或者 '\u0000'
    布尔型:false
    引用数据类型(类,数组,接口):null

  • 局部(local)变量:没有默认初始化值。
    意味着我们在调用局部变量的时候,要提前赋值
    特别的:形参在调用时给赋值即可。

2.4 在内存中的位置也不一样
  • 属性:加载到堆空间中
  • 局部变量:加载到栈空间


代码演示:

/*
 * 属性和局部变量的对比1
 * 
 * 属性(成员变量) VS  局部变量
 * 1.相同点:
 *      1.1定义变量的格式一样:数据类型   变量名   =   变量值
 *      1.2先声明,后使用
 *      1.3变量都有其对应的作用域,出了作用域就没有这个变量了
 * 
 * 
 * 2.不同点:
 *      2.1在类中声明的位置不同
 *      属性(或成员变量):直接定义在类的一对{}里
 *      局部变量:声明在方法中,方法形参,代码块内,构造器形参,构造器内部的变量
 * 
 *      2.2 关于权限修饰符的不同
 *      属性:可以在声明属性时,使用权限修饰符
 *          常用的权限修饰符:private,public,缺省(默认),protected        ---》封装性
 *      局部变量:不可以使用权限修饰符
 *      
 *      2.3默认初始化值的情况:
 *      属性:类的属性,根据其类型都有默认初始化值。
 *          整型:0
 *          浮点型:0.0
 *          字符型char:0 或者 '\u0000'
 *          布尔型:false
 *          引用数据类型(类,数组,接口):null
 * 
 *      局部(local)变量:没有默认初始化值。
 *          意味着我们在调用局部变量的时候,要提前赋值
 *          特别的:形参在调用时给赋值即可
 * 
 *      2.4在内存中的位置也不一样
 *      属性:加载到堆空间中
 *      局部变量:加载到栈空间
 * 
 */
public class Test2 {
    public static void main(String[] args) {
        User u1 = new User();
        System.out.println(u1.name);
        System.out.println(u1.isMale);
        System.out.println(u1.age);
    }
}

class User{
    //2.1   属性(或成员变量):直接定义在类的一对{}里
    //2.2   属性:可以在声明属性时,使用权限修饰符。现在没有加权限修饰符就是缺省状态。
    //2.3   属性:类的属性,根据其类型都有默认初始化值。
    //2.4   在内存中的位置也不一样。属性:加载到堆空间中
    String name;
    int age;
    boolean isMale;
    
    
    
    //2.1   language:局部变量,声明在方法形参中
    //2.2   局部变量:不可以使用权限修饰符
    //2.3   局部(local)变量:没有默认初始化值。
    //2.4   在内存中的位置也不一样。局部变量:加载到栈空间
    public void talk(String language) {
        System.out.println("我们使用" + language);
    }
    
    public void eat() {
        //2.1   局部变量,声明在方法中
        //2.2   局部变量:不可以使用权限修饰符
        //2.3   局部(local)变量:没有默认初始化值。意味着我们在调用局部变量的时候,要提前赋值
        //2.4   在内存中的位置也不一样。局部变量:加载到栈空间
        String food = "烙饼";
        System.out.println("北方人喜欢吃" + food);
    }   
}

你可能感兴趣的:(2019-11-18 · Java面向对象编程(属性与局部变量对比))