标签:
作用范围:
局部变量作用于函数中或者语句中(定义在函数或语句中(比如for语句),必须初始化)
成员变量作用于整个类中(定义在类中,有默认初始化值,可以定义显示初始化值)
在内存中的位置:
成员变量在堆内存中.因为对象的存在,才在内存中存在.
局部变量在栈内存中.
如果成员变量没有定义显示初始化,那么系统默认会初始化(在堆内存中的变量都会有默认初始化值)
byte 0
short 0
int 0
long 0L
double 0.0D
float 0.0f
boolean false
引用数据类型默认初始化值都为null
1 public class VariableDemo { 2 public static void main(String[] args) { 3 Car c=new Car(); 4 c.color="blue"; 5 c.run(); 6 } 7 } 8 class Car{ 9 //成员变量,在类中定义,作用于整个类中,有默认初始化值。(可以定义显示初始化) 10 String color="red"; 11 int num=4; 12 //成员函数 13 void run(){ 14 System.out.println(color+"...."+num); 15 } 16 }
1 class Car{ 2 String color="red"; 3 int num=4; 4 5 void run(){ 6 int num = 9;//如果局部定义了与成员变量一样的(同名)的变量,则访问时,访问的是局部num,如果没有就访问成员中的变量 7 System.out.println(color+"...."+num); 8 } 9 }
一个类访问另一个类中的非静态成员,必须创建该类对象
1 class Person{ 2 int age; 3 public void shurt(){ 4 int age = 89;//局部变量必须初始化 5 System.out.println(age);//因为在该函数中有了一个age变量所以访问的时候访问的是shurt函数内部的age,外部的那么成员变量age被隐藏起来了 6 } 7 } 8 //java回收机制的方法:finalize(); 9 //唤醒java回收机制的方法System.gc();(调用该方法java虚拟机不一定立刻执行垃圾回收机制)
1 public class VariableTest2 { 2 public static void main(String[] args) { 3 int x = 5; 4 change(x); 5 System.out.println(x); 6 } 7 public static int change(int x){ 8 return x = 4; 9 } 10 } 11 //结果还是5,因为x是局部变量,当执行完change方法后,change方法中的x被释放,跟main方法中的x没关系
标签:
原文地址:http://www.cnblogs.com/LO-ME/p/3549940.html