刚学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(),是可以向数组插入元素的. 如果不放进去,有什么结解方法么?
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(),是可以向数组插入元素的. 如果不放进去,有什么结解方法么?
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
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的改变才能像你想的那样
一旦你new一个对象,
这将会是一个新的对象
它不会是你在new之前生成的任何一个对象
//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();
}
}
Data data;是什么意思? 是将 Data类实例化为data么? 和 Data data=Data有啥区别呢(不知道有没这种写法)?
public initial(Data data){}
这个完全看不懂了,哎,基础太差了
这句是声明一个未初始化的 Data类的对象--data
这个时候也可以对data进行初始化
比如
private Data data = new Data();
这样就是生成了一个新的对象了public initial(Data data){}
这个是实现initial的一个构造方法;
你定义一个类,如果不定义构造方法,
java会有一个默认的构造方法;
当然你也可以自己写构造方法
前一个Data为类名,后一个data为变量名
就像 int x 一样,Data就像是一种类型, data为变量名
private Data data;
private 表示 data这个变量是私有的,只能在这个类中使用,在别的类里面不能调用
public initial(Data data){}
public是公有的标识符,说明initial(){//"这里面写方法的内容"}这个方法是公有的,在别的类里面可以调用,括号里的 Data data 就是一个形参
Data data是什么意思? 是将Data类实列化为 data么?
insert.data = data是什么意思?
private Data data;//下面这又是啥意思?
public initial(Data data) {
this.data = data;
}基础太差,看不懂,哎~
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可以理解成一个指针,指向自己
this.data = data;
}
这是一个构造有参函数(也就是方法),这个函数必顺和类名一样,并且没有返回类型,他的意思是为Initial类里属性赋值
当你 Initial initial=new Initial(new Data())后,initial.data就有值了.