局部变量的作用域是该变量所在的{} 。 局部变量的生命期: 基本类型:超出局部变量定义的{},就会被标识为无效,等待GC来回收。 引用类型:超出局部变量定义的{},会引用计数-1,如果引用计数为0,就会被GC下次扫描时回收。 2.成员变量(对象变量) 成员变量是定义咋方法外的变量。public class Pet { private String name; // 宠物的名字 成员变量 private String sex; // 宠物的性别 成员变量 /** * 方法 * 宠物都可以玩游戏 * @param pet */ public void playGame(String cc){ System.out.println(cc); } }成员变量的作用域:就是所在class内的所有方法 成员变量的生命期:与它所在的对象的生命期一致在没有static静态变量的情况下程序运行顺序如下: 1.系统给属性赋默认值 2.用户在成员变量级直接赋默认值 3.在构造函数中对成员变量进行初始化。 static变量: 1.称为类变量,它是所有对象共享的内存; 2.不需要类的实例,可以直接通过类的名字调用。 3.作用域类似于全局变量 4.在第一次调用这个变量时,分配内存。下面是几个小例子:public class Test { public static final double PAI = 3.1415926; //静态常量 public final double PAI2 = 3.1415926;//常量 public static double PAI3 = 3.1415926;//静态变量
public Test(){
} }public class Test { public static final double PAI; public final double PAI2; public static double PAI3;
public Test(){ this.PAI = 3.1415926; //错误,必须在定义时就赋值 this.PAI2 = 3.1415926; //可以,初始化赋值。 this.PAI3 = 3.1415926;//不可以 不能再构造方法中给静态变量赋值,因为静态变量加载时可能这个类并没有被加载。 } }public class Test { public static final double PAI = 3.1415926; public final double PAI2 = 3.1415926;; public static double PAI3 = 3.1415926;; public double PAI4 = 3.1415926;
public static void test(){ this.PAI = 3.14; this.PAI2 = 3.14; this.PAI3 = 3.14; this.PAI4 = 3.14; //均存在错误,因为静态方法中不可以用this关键字 } }public class Test { public static final double PAI; public final double PAI2; public static double PAI3 = 3.1415926;;
public static void test(){ PAI = 3.14; //编译期常量不能在这赋值 PAI2 = 3.14; //静态方法不能直接调用成员变量,原因是这个成员变量还没有分配内存,需要通过对象调用 PAI3 = 3.14; //静态方法调用静态变量OK }package com.chen.test; /** * 说出输出顺序 * @author 陈家小哥 * */ public class Test extends A { int num = 7777; private static A mm = new A(); static { System.out.println("1111"); } { System.out.println("2222"); } public Test() { System.out.println("3333"); } public static void main(String[] args) { Test t = new Test(); System.out.println(t.num); } }class A { int num = 5555; public A() { System.out.println(num); } } 输出结果: 5555 1111 5555 2222 3333 7777解释:当类被加载时,先初始化静态的变量,输出5555和1111,然后调用父类的构造函数,输出5555,然后输出2222,最后调用子类的构造函数,输出子类的成员变量。更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-08/134438p2.htm