数组的赋值只能在方法体内吗?

obamxx 2014-10-04 10:32:42
class Test{
int arr [] = new int [] {2,4,6};
arr[2] = 8; // 报错
}
小弟刚学java,还请大大们解惑啊
...全文
258 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yang_outlook 2014-10-05
  • 打赏
  • 举报
回复
你好 在class所有方法外面可以定义并且赋值变量 这些变量可以是静态变量 也可以是实例变量 初始化可以在constructor中初始化,对于静态变量 可以在静态块儿中初始化 static int i; static { i = 1;} 但是操作变量只能在类中的方法中进行
日知己所无 2014-10-05
  • 打赏
  • 举报
回复
public class Test {
    int arr1[] = new int[] { 2, 4, 6 };
    // arr1[2] = 8; // 报错

    static int arr2[] = new int[] { 2, 4, 6 };

    {
        arr2[2] = 8; // 不报错
    }
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println("test.arr1[2]" + test.arr1[2]);

        System.out.println("arr2[2]" + arr2[2]);
    }

}
6
8
弄清楚,谁隶属于谁就明白了 1)arr1是非静态成员变量(没用static修饰),隶属于:由类定义的对象【调用方有多少个new就有多少份arr1】 2)arr2是静态成员变量(用static修饰了),隶属于:类本身【不管new几次,不管有没有调用方,都可以赋值、引用】 【数组的赋值只能在方法体内吗?】这句话应该转换一下 问题1)【成员变量的赋值只能在方法体内吗?】 回答是:成员变量的赋值只能在方法体内 即使示例中的【arr2[2] = 8; // 不报错】,也得用花括号包围起来,相当于放在了一个匿名方法里 问题2)【成员变量的初始化只能在方法体内吗?】 回答是:不是这样的,如示例所示,成员变量的初始化可以在方法体外进行
gaofuqi 2014-10-04
  • 打赏
  • 举报
回复
引用 2 楼 obamxx 的回复:
我知道这样的规则,只是不明白为什么,之前在看存储区,栈、堆 public class Demo{ int a=3; //存放在栈区? a=33; //报错 public Demo{ a=44; //还在栈操作吗? }}
编译器无法确保成员变量arr已经完成初始化,因此无法在成员方法和构造方法以外引用arr。 成员变量a和arr是一样的道理; int a=3; //a存放的是3的内存地址,而3应该是在常量池中;
gaofuqi 2014-10-04
  • 打赏
  • 举报
回复
编译器无法确保成员变量arr已经完成初始化,因此无法在成员方法和构造方法以外引用arr。
obamxx 2014-10-04
  • 打赏
  • 举报
回复
我知道这样的规则,只是不明白为什么,之前在看存储区,栈、堆 public class Demo{ int a=3; //存放在栈区? a=33; //报错 public Demo{ a=44; //还在栈操作吗? }}
姜小白- 2014-10-04
  • 打赏
  • 举报
回复

public class Test {
	int arr [] = new int [] {2,4,6};
	
	public static void main(String[] args) {
		int arr [] = new int [] {2,4,6};
		arr[2] = 8;   // 报错
	}
}
类中可以定义类级变量,但不可以对变量进行操作 对变量的操作放在方法里面就可以了
GeekStuff 2014-10-04
  • 打赏
  • 举报
回复
arr[2] = 8; 这行代码写到方法里面就ok了
pengepng-scorpion 2014-10-04
  • 打赏
  • 举报
回复
对变量的处理应该都要在方法体内的
william_yao 2014-10-04
  • 打赏
  • 举报
回复
引用 3 楼 gaofuqi 的回复:
编译器无法确保成员变量arr已经完成初始化,因此无法在成员方法和构造方法以外引用arr。
正解
Sauron1 2014-10-04
  • 打赏
  • 举报
回复
个人觉得还是规规矩矩用这两种好

public class Test
{
	public static void main(String args[])
	{
	
		//第一种
		int arr[] = {2,4,6};
		arr[2] = 8;
		
		//第二种
		int arrLength = 3;
		int arr1[] = new int[arrLength];
		arr1[0] = 2;
		arr1[1] = 4;
		arr1[2] = 6;
		
		arr1[2] = 8;
	}
}

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧