刚学java,对类中,数据传递不是很明白,上代码://data类
public class Data{
int[] custNo=new int[4];
//数据初始值
public void dataset(){
custNo[0]=500;
custNo[1]=600;
}
}
-------------------------------------------------------
//initial类  用于初始化数据,并显示数据
public class initial {
Data data = new Data(); public void show() {
data.dataset();  //初始化数据
for (int i=0;i<data.custNo.length;i++){
System.out.print(data.custNo[i]+"\t");
}
}
}
---------------------------------------------------------
\\insertData类
public class insertData{
Data data=new Data();
//插入数据
public void inset(){
data.custNo[2]=700;
data.custNo[3]=800;

}
}
----------------------------------------------------------
\\程序入口
public class test{
public static void main(String[] args){
Data data=new Data();
initial init =new initial();
insertData insert=new insertData();
init.show();
insert.inset();
System.out.print("\n插入的数据为:"+data.custNo[2]+"\t"+data.custNo[3]+"\n");
init.show();
}
}程序功能: 程序初始化时,向custNo[0]写入500,custNo[1]写入600,并输入出到控制台
调用insertData类,向custNo[2]写入700,custNo[3]写入800,再次向控制台输入
想象中结果应为:
500 600 0 0
插入的数据为:700 800
500 600 700 800
然而实际显示为:
500 600 0 0
插入的数据为:0 0
500 600 0 0感觉像是insertData类中的数据没有插入到cusNo数组中去. 我知道如果把insert()方向放到initial类中,是能正确显示的,使用init.inset(),是可以向数组插入元素的. 如果不放进去,有什么结解方法么?

解决方案 »

  1.   

    \\程序入口
    public class test{
    public static void main(String[] args){
    Data data=new Data(); 
    initial init =new initial();
    insertData insert=new insertData();
    init.show();
    insert.inset();
    System.out.print("\n插入的数据为:"+data.custNo[2]+"\t"+data.custNo[3]+"\n");
    init.show();
    }你生成了2个对象,这两个对象分别了各自的Data对象
    其实你在main方法中new的那个Data对象完全没有意义,
    你打印出来的是通过(initial)init的show方法,初始化的(initial)init内部的Data对象
    而你没有把(insertData)insert中的的Data打印出来,所以你也看不到你的700、800
      

  2.   

    把initial类和insertData类改成如下//initial类 用于初始化数据,并显示数据
    public class initial {
    private Data data;
    public initial(Data data) {
    this.data = data;
    data.dataset();
    }

    public void show() {
    for (int i=0;i<data.custNo.length;i++){
    System.out.print(data.custNo[i]+"\t");
    }
    }
    }//insertData类
    public class insertData{
    private Data data;
    public insertData(Data data) {
    this.data = data;
    }

    public void inset(){
    data.custNo[2]=700;
    data.custNo[3]=800;
    }
    }
    test:public class test {
        public static void main(String[] args)
        {    
         Data data=new Data();
         initial init =new initial(data);
         insertData insert=new insertData(data);
         init.show();
         insert.inset();
         System.out.print("\n插入的数据为:"+data.custNo[2]+"\t"+data.custNo[3]+"\n");
         init.show();
        }
    }
    把你生成的data传递给initial和insertData,这样他们对data的改变才能像你想的那样
      

  3.   

    楼主要记住
    一旦你new一个对象,
    这将会是一个新的对象
    它不会是你在new之前生成的任何一个对象
      

  4.   


    //data类
    public class Data {
    int[] custNo = new int[4]; // 数据初始值
    public void dataset() {
    custNo[0] = 500;
    custNo[1] = 600;
    }
    }//initial类 用于初始化数据,并显示数据
    public class initial {
    Data data;//不要new,在test里面赋值,insertData类同理 public void show() {
    data.dataset(); // 初始化数据
    for (int i = 0; i < data.custNo.length; i++) {
    System.out.print(data.custNo[i] + "\t");
    }
    }
    }//insertData类
    public class insertData {
    Data data; // 插入数据
    public void inset() {
    data.custNo[2] = 700;
    data.custNo[3] = 800;
    }
    }
    //程序入口
    public class test {
    public static void main(String[] args) {
    Data data = new Data();
    initial init = new initial();
    init.data = data;//给initial类设置data,这样三个雷共享一个data,所以才能满足要求
    insertData insert = new insertData();
    insert.data = data;
    init.show();
    insert.inset();
    System.out.print("\n插入的数据为:" + data.custNo[2] + "\t" + data.custNo[3]
    + "\n");
    init.show();
    }
    }
      

  5.   

    弱弱的问下:
     Data data;是什么意思? 是将 Data类实例化为data么? 和 Data data=Data有啥区别呢(不知道有没这种写法)?
      

  6.   

    private Data data;
    public initial(Data data){} 
    这个完全看不懂了,哎,基础太差了
      

  7.   

    private Data data;
    这句是声明一个未初始化的 Data类的对象--data
    这个时候也可以对data进行初始化
    比如
    private Data data = new Data();
    这样就是生成了一个新的对象了public initial(Data data){}
    这个是实现initial的一个构造方法;
    你定义一个类,如果不定义构造方法,
    java会有一个默认的构造方法;
    当然你也可以自己写构造方法
      

  8.   

    不管你明不明白,先记住这句话:java传递的是引用。
      

  9.   

    Data data 
    前一个Data为类名,后一个data为变量名
    就像 int x 一样,Data就像是一种类型, data为变量名
    private Data data;
    private 表示 data这个变量是私有的,只能在这个类中使用,在别的类里面不能调用
    public initial(Data data){}  
    public是公有的标识符,说明initial(){//"这里面写方法的内容"}这个方法是公有的,在别的类里面可以调用,括号里的 Data data 就是一个形参
      

  10.   

    每次New一个对象时都会在内存中开辟一块新的存储空间,楼主好好琢磨一下吧
      

  11.   

    弱弱的问下:
    Data data是什么意思? 是将Data类实列化为 data么? 
    insert.data = data是什么意思?
    private Data data;//下面这又是啥意思?
    public initial(Data data) {
    this.data = data;
    }基础太差,看不懂,哎~
      

  12.   

    楼主可以这样理解
    Data data;
    这只是声明,还没有实例化
    在data = new Data() 的时候才被实例化private Data data;
    public initial(Data data) {
    this.data = data;
    }
    首先,这是一个构造方法this.data = data;
    前面的this.data就是指private Data data;声明的这个data
    后面一个data是构造函数的参数,传入的(Data data)中的参数
    起始这样写你就可以理解了public initial(Data data1) {
    data = data1;
    }

    public initial(Data data) {
    this.data = data;
    }
    是效果一样的this可以理解成一个指针,指向自己
      

  13.   

    Data data 是创建一个名字为data的Data对象,但是没有实例化,还不能调用Data里的属性public initial(Data data) {
    this.data = data;
    }
    这是一个构造有参函数(也就是方法),这个函数必顺和类名一样,并且没有返回类型,他的意思是为Initial类里属性赋值
    当你 Initial initial=new Initial(new Data())后,initial.data就有值了.