java-有关Java static的疑问(凑字数的...)

问题描述

有关Java static的疑问(凑字数的...)

public class StaticTest {

private static List<String> listA;
private static List<String> listB;

static {
    listA = new ArrayList<String>();
    listA.add("aaa");

    setB(listB);
}

public static void main(String[] args) {
    System.out.println(listA == null);
    System.out.println(listB == null);
}

private static void setB(List<String> listB) {
    if (listB == null) {
        listB= new ArrayList<String>();
        listB.add("bbb");
    }
}

}

我不知道为什么listB是空的,谁能详细解释下?

解决方案

setB方法里面的listB被你重新new了,就和private那个不是同一个对象了,所以listB是空的

解决方案二:

 public class test_1 {
private static ArrayList<String> listA;
private static ArrayList<String> listB;

static {
    listA = new ArrayList<String>();
    listA.add("aaa");

    listB = setB(listB);
}

public static void main(String[] args) {
    System.out.println(listA == null);
    System.out.println(listB == null);
}

private static ArrayList<String> setB(ArrayList<String> listB) {
    if (listB == null) {
        listB = new ArrayList<String>();
        listB.add("bbb");
        System.out.println("asdasd");
    }
    return listB;
}
}

你是在子函数里new的,改变的是子函数里的listB,要把引用传回来再赋值给listB。

解决方案三:

因为你方法里面初始化的是方法的参数listB,而不是类的属性listB。

解决方案四:

setb中new的对象,只是局部变量,不会影响到外面的listB,所以你要想有数据,不要new ,直接用外面的就行

解决方案五:

因为被局部变量覆盖了

 private static void setB(List<String> listB) {//这里定义的listB覆盖了外部定义的static,把这改成private static void setB(List<String> listB1)
    if (listB == null) {
        listB= new ArrayList<String>();
        listB.add("bbb");
    }
}

解决方案六:

局部的变量使用完 就回收了

时间: 2024-10-31 16:45:37

java-有关Java static的疑问(凑字数的...)的相关文章

百度知道-【java算法题】凑凑凑凑凑凑字数

问题描述 [java算法题]凑凑凑凑凑凑字数 题目:标题:猜字母???把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串.???接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母.??得到的新串再进行删除奇数位置字母的动作.如此下去,最后只剩下一个字母,请写出该字母./-----------------------------------从百度知道查看但是不懂 1024 和他的思维求大神解惑 /----------------------

Java中的static关键字全面解析_java

static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin05

Java中的static关键字解析

static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题. 以下是本文的目录大纲: 一.static关键字的用途  二.static关键字的误区  三.常见的笔试面试题 一.static关键字的用途   在<Java编程思想>P86页有这样一段话: "static方法就是没有this的方法.在st

Java中的static的使用指南_java

一.Java中的static使用之静态变量 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象存在.静态成员可以使用类名直接访问,也可以使用对象名进行访问.使用 static 可以修饰变量.方法和代码块. 2.public 修饰符表示公开的.公有的,静态变量使用static修饰 3.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员. public class HellWorld{ String

java File中 相关path疑问

问题描述 java File中 相关path疑问 File中的 getPath()和 getAbsolutePath(),getCanonicalPath() 有什么区别? 我自己验证是打印出的路径都一样,谁能举例或者能说出区别 ? 非常感谢 D:STSworkspace-stsinvoicingtargettest-classescnhyxiofiletesttest1.hyx.csv D:STSworkspace-stsinvoicingtargettest-classescnhyxiofi

下面java代码:static Value3 v1, v2; 该怎么理解?请各位帮忙分析下。谢谢

问题描述 下面java代码:static Value3 v1, v2; 该怎么理解?请各位帮忙分析下.谢谢 class Value3 { static int c = 0; Value3() { c = 15; } Value3(int i) { c = i; } static void inc() { c++; } } public class Count { public static void prt(String s) { System.out.println(s); } Value3

java类的static修饰的变量,函数属于哪种内存?

问题描述 java类的static修饰的变量,函数属于哪种内存?是栈内存还是堆内存?请给个讲解链接,谢谢 解决方案 http://wenku.baidu.com/view/8775d826482fb4daa58d4b31.html

实例分析Java中public static void main(String args[])是什么意思_java

本文实例讲述了Java中public static void main(String args[])的来龙去脉.分享给大家供大家参考,具体如下: public static void main(String[] args) 这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要. jvm在试图运行一个类之前,先检查该类是否包含一个特殊方法.这个方法必须是公有的,以便在任何位置都能访问得到.这个方法必须是static的,因为这个方法不能依赖任何该类的实例即可运行,而非stati

详解Java编程中static关键字和final关键字的使用_java

Java static关键字以及Java静态变量和静态方法 static 修饰符能够与变量.方法一起使用,表示是"静态"的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态变量与实例变量不同,实例变量总是通过对象来访问,因为它们的值在对象和对象之间有所不同. 请看下面的例子: public class Demo { static int i = 10; int j; Demo() { this.j