关于JAVA 声明数组报错的问题
第一个问题:packagetestdemo;publicclassSongDemo1{publicstaticvoidmain(String[]args){inta[]=...
第一个问题:
package testdemo;
public class SongDemo1{
public static void main(String []args){
int a []=new int[2];
a[0]=1;
a[1]=2;
a[2]=3;
}
}
这个代码不会报错,但是我声明了数组长度为2啊,int a []=new int[2];,为什么当我给这个数组赋3个值时不报错?!
第二个问题:
为什么我在非方法中,也就是直接在类中声明数组:
package testdemo;
public class SongDemo1{
int a []=new int[2]; //这里会报错!!!
a[0]=1;
a[1]=2;
}
改为如下就对了 为什么!?:
package testdemo;
public class SongDemo1{
int a []=new int[2];
{
a[0]=1;
a[1]=2;
}
}
?????????? 展开
package testdemo;
public class SongDemo1{
public static void main(String []args){
int a []=new int[2];
a[0]=1;
a[1]=2;
a[2]=3;
}
}
这个代码不会报错,但是我声明了数组长度为2啊,int a []=new int[2];,为什么当我给这个数组赋3个值时不报错?!
第二个问题:
为什么我在非方法中,也就是直接在类中声明数组:
package testdemo;
public class SongDemo1{
int a []=new int[2]; //这里会报错!!!
a[0]=1;
a[1]=2;
}
改为如下就对了 为什么!?:
package testdemo;
public class SongDemo1{
int a []=new int[2];
{
a[0]=1;
a[1]=2;
}
}
?????????? 展开
3个回答
展开全部
第一个问题:
数组长度你定念滑义的是2,但是,你却对三陆逗个数组成员赋值,也就是说,a[2]是不存在的,new int[2]只有a[0]和a[1]两个成员,数组脚标越界了。
第二个问题:
你定义数组的地方,是成员位置,int a []=new int[2]; 这句并没有仔悉腊错,数组是可以定义在成员位置的,但是,后面的两句对数组成员赋值,要写在方法中。
进5044群5871,求个采纳
数组长度你定念滑义的是2,但是,你却对三陆逗个数组成员赋值,也就是说,a[2]是不存在的,new int[2]只有a[0]和a[1]两个成员,数组脚标越界了。
第二个问题:
你定义数组的地方,是成员位置,int a []=new int[2]; 这句并没有仔悉腊错,数组是可以定义在成员位置的,但是,后面的两句对数组成员赋值,要写在方法中。
进5044群5871,求个采纳
追问
第一个问题,确实越界了,我就是想知道为什么不报错?
第二个问能帮我详细说明下吗,为什么数组赋值要在方法中?一般在类中不是也可以直接给一个变量赋值的吗?
谢谢
追答
第一个问题,数组脚标越界异常,和空指针异常一样,是属于RuntimeException的子类,也就是运行时异常,所以,他在编译阶段不会报错。
第二个问题,你的数组声明在成员位置上,而且明确创建了数组对象int a []=new int[2];,此时,虚拟机会自动对数组进行隐式的初始化动作,也就是所有的元素都初始化为0,但是,你还想同时在成员位置上对数组元素初始化,这就不行,对数组元素执行显示初始化,属于执行语句,而不是声明语句,执行语句必须放在方法体内部或者代码块中,要么,你就把int a []=new int[2];改成int[] a ={0,1,}这种。这样说不知道你能不能理解,去年我也思考过这个问题,如果你那时候问,我的思路更清晰一些,回答的也会好一些,如果不能理解,就进5044群5871讨论吧,现在正在讨论这事
展开全部
public class SongDemo1{
int a []=new int[2]; //这里会报错!!!
a[0]=1;
a[1]=2;
}
这里是在编译时就报错了,证明是语法上的错误。
在加载类的时候,java会对类中的静态属孙绝性进行默认初始化和显式初始化;在新建类对象的时候,java会对类中的非静态属性进行默认初始化和显式初始化。
这里报错的原因我想喊宽大致是这样的:在java中,运算都是在栈内存进行的,则渗姿而对象、数组都是存在于堆内存中的,对于数组的赋值(在默认初始化和显式初始化之后)应该是由栈内存中的方法来实现的。
因为我没有这样写过,所以以上都是猜测,希望能帮助到你
int a []=new int[2]; //这里会报错!!!
a[0]=1;
a[1]=2;
}
这里是在编译时就报错了,证明是语法上的错误。
在加载类的时候,java会对类中的静态属孙绝性进行默认初始化和显式初始化;在新建类对象的时候,java会对类中的非静态属性进行默认初始化和显式初始化。
这里报错的原因我想喊宽大致是这样的:在java中,运算都是在栈内存进行的,则渗姿而对象、数组都是存在于堆内存中的,对于数组的赋值(在默认初始化和显式初始化之后)应该是由栈内存中的方法来实现的。
因为我没有这样写过,所以以上都是猜测,希望能帮助到你
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组是可以动态添加元素的并且可以有一个key值为空所以a[2]=2不报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询