public class zb38
{
public static void main(String args[]){
Person p[]=new Person[3];
System.out.println("=========数组声明==========");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i]+"、");
}
p[0].setName("张三"); //不同之处
p[1].setName("李四"); //不同之处
p[2].setName("王五"); //不同之处
System.out.println("\n==========对象实例化=============");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i].getName()+"、");
} }
};
class Person
{
private String name;
public Person(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
};这样调用可以编译通过,但是执行时就会出现空指针异常,然而下面的方法调用就可以编译和运行都通过public class zb38
{
public static void main(String args[]){
Person p[]=new Person[3];
System.out.println("=========数组声明==========");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i]+"、");
}
p[0]=new Person("张三"); //不同之处
p[1]=new Person("李四"); //不同之处
p[2]=new Person("王五"); //不同之处
System.out.println("\n==========对象实例化=============");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i].getName()+"、");
} }
};
class Person
{
private String name;
public Person(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
};两种方式不是都通过Person p[]=new Person[3];进行了初始化了吗?为什么第一张方式会出现空指针异常呢?难道对象数组就不能用getName()来获得参数吗?希望高手帮我解答下哈~我刚学java不久,谢谢
{
public static void main(String args[]){
Person p[]=new Person[3];
System.out.println("=========数组声明==========");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i]+"、");
}
p[0].setName("张三"); //不同之处
p[1].setName("李四"); //不同之处
p[2].setName("王五"); //不同之处
System.out.println("\n==========对象实例化=============");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i].getName()+"、");
} }
};
class Person
{
private String name;
public Person(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
};这样调用可以编译通过,但是执行时就会出现空指针异常,然而下面的方法调用就可以编译和运行都通过public class zb38
{
public static void main(String args[]){
Person p[]=new Person[3];
System.out.println("=========数组声明==========");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i]+"、");
}
p[0]=new Person("张三"); //不同之处
p[1]=new Person("李四"); //不同之处
p[2]=new Person("王五"); //不同之处
System.out.println("\n==========对象实例化=============");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i].getName()+"、");
} }
};
class Person
{
private String name;
public Person(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
};两种方式不是都通过Person p[]=new Person[3];进行了初始化了吗?为什么第一张方式会出现空指针异常呢?难道对象数组就不能用getName()来获得参数吗?希望高手帮我解答下哈~我刚学java不久,谢谢
解决方案 »
- 请问一下各位关于java编程声音文件处理
- 怎么用java实现扇形图 柱形图
- 请教JAVA中递归函数的过程解释[在线等]
- activemq5.1的怪问题,一批消息不能接收完全,bug?感觉activemq问题很多
- 内存 溢出问题、
- 求Tapestry+Spring+Hibernate的详细中文资料!
- 求jbx在linux底下的注册文件
- 用JBUILDER写程序的朋友帮忙看一下?????????
- 在j2ee环境下,如何处理多用户并发活动,是不是用事务来处理,请那位大侠详细说明一下??
- dbcp 连接池 connection is closed
- java ee精英群,欢迎各路高手加入
- android 音频 大写MID 问题
System.out.println("=========数组声明==========");
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i]+"、");
}
你这里new了一个3个元素的Person数组,此时p数组里面都是null的,因为你没有给数组赋值,此时你去把p[i]打印出来,当然就是空指针异常啦
根本原因应该是:Person类须要经由new生成类的实例,生成实例的初始化过程必须便是调用Person类中对应的初始化方法,你在Person类当中只有带参数的初始化方法,而你在第一个new的时候实际上是在调用空参数的初始化方法(该方法在Person类中未定义),所以第一种代码对Person类的实例化实际上并未成功,在Person类中加上空参数的Person(){}初始化方法看看。
根本原因应该是:Person类须要经由new生成类的实例,生成实例的初始化过程必须便是调用Person类中对应的初始化方法,你在Person类当中只有带参数的初始化方法,而你在第一个new的时候实际上是在调用空参数的初始化方法(该方法在Person类中未定义),所以第一种代码对Person类的实例化实际上并未成功,在Person类中加上空参数的Person(){}初始化方法看看。
for (int i=0;i<p.length ;i++ )
{
System.out.print(p[i]+"、");
}
.
.
.
.
}
Person p[]=new Person[3];这是你实例化的一个Person对象的数组
我把这行改成Person p=new Person(null);下面就用p.setName("xxxx");来传值就可以了这里的p是一个对象
而p[0]是一个数值。数值怎么调用方法啊?
p[0]=new Person("张三");这里是对p[0]实例化
我是这样理解- -!