黑马程序员技术交流社区
标题: 关于static 方法中对象的生命周期问题 [打印本页]
作者: 于星星 时间: 2012-7-26 22:16
标题: 关于static 方法中对象的生命周期问题
import java.util.Arrays;
//我想问的是,静态方法里面用new 创建的变量,它的生命周期会是怎样的呢?是在类加载的时候就创建了这
//个对象?用new 创建的对象不是比static 的生命周期短吗?为什么不会报错?
public class ArraysDemo {
public static void main(String[] args) {
final String[] str = new String[]{"ad","bc","aa"};
//private String[] str = new String[]{"ad","bc","aa"}; 为什么局部变量只能有final关键字?
Arrays.sort(str);
System.out.println(Arrays.asList(str));
}
}
作者: 侯宪博 时间: 2012-7-27 03:35
首先,你理解上可能有误区,static修饰的方法是比实例的生命周期长
那是相对本类对象来说的,其次我感觉你所说的报错是关于引用的
final String[] str = new String[]{"ad","bc","aa"};这句在方法加载进内存时只是创建了final String[] str
new String[]{"ad","bc","aa"};是调用这个函数时才创建了对象,才进行了赋值操作
静态方法只是随着类的加载而加载,并不是随着类的加载而运行
再者final String[] str 是局部的变量,他就在这个函数内
与这个函数共存亡的
假若在mian函数之前定义final String[] str
想在main函数内实现对str的赋值定义的时候就必须用static
另外,局部变量为什么只能被final修饰,可能你是想问为什么不能用private修饰吧
因为private是一种权限修饰符
而局部变量的权限是定死的就是在局部使用
内存上体现就是局部变量在栈内存是不可引用的
既然不可引用当然也就不需要权限修饰啦
希望可以对你有所帮助。。。
作者: 曹俊 时间: 2012-7-27 04:45
楼主:我想你的静态的概念和final关键字这两个概念理解有点模糊。
static(静态)关键字:
是想要将对象中的相同数据进行对象的共享,就可以对该数据进行修饰,该修饰符就是static。
static关键字的特点:
1、被static修饰的成员变量,被所有对象所共享。
2、静态随着类的加载而加载,随着类的消失而消失。
3、优先于对象存在。
4、静态成员可以直接被类名所调用。(静态存在时,还没有被调用,要被调用,此时只有类可以完成。静态成员多了一种调用方式 类名.静态成员)
而你这 final String[] str = new String[]{"ad","bc","aa"};//为什么局部变量只能有final关键字?
不懂的原因是因为局部变量加上final后,就变成了常量,所以能后被访问
作者: 刘海源 时间: 2012-7-27 07:29
static变量的特点是它位于静态存贮区,在函数调用结束后,它的值仍然存在,并可能影响到下一次调用的过程。当类首次被加载时static定义的变量被分配空间,程序结束后由系统释放
作者: 于星星 时间: 2012-7-27 14:19
侯宪博 发表于 2012-7-27 03:35
首先,你理解上可能有误区,static修饰的方法是比实例的生命周期长
那是相对本类对象来说的,其次我感觉你 ...
有道理!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |