A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于星星 中级黑马   /  2012-7-26 22:16  /  2738 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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));
        }
       
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
首先,你理解上可能有误区,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是一种权限修饰符
而局部变量的权限是定死的就是在局部使用
内存上体现就是局部变量在栈内存是不可引用的
既然不可引用当然也就不需要权限修饰啦
希望可以对你有所帮助。。。

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主:我想你的静态的概念和final关键字这两个概念理解有点模糊。
static(静态)关键字:
是想要将对象中的相同数据进行对象的共享,就可以对该数据进行修饰,该修饰符就是static
static关键字的特点:
1、被static修饰的成员变量,被所有对象所共享。
2静态随着类的加载而加载,随着类的消失而消失。
3、优先于对象存在。
4、静态成员可以直接被类名所调用。(静态存在时,还没有被调用,要被调用,此时只有类可以完成。静态成员多了一种调用方式 类名.静态成员)

而你这 final String[] str = new String[]{"ad","bc","aa"};//为什么局部变量只能有final关键字?
不懂的原因是因为局部变量加上final后,就变成了常量,所以能后被访问
回复 使用道具 举报
static变量的特点是它位于静态存贮区,在函数调用结束后,它的值仍然存在,并可能影响到下一次调用的过程。当类首次被加载时static定义的变量被分配空间,程序结束后由系统释放
回复 使用道具 举报
侯宪博 发表于 2012-7-27 03:35
首先,你理解上可能有误区,static修饰的方法是比实例的生命周期长
那是相对本类对象来说的,其次我感觉你 ...

有道理!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马