牛骨文教育服务平台(让学习变的简单)
博文笔记

java怎么通过方法返回二维数组,并接收。

创建时间:2018-02-20 投稿人: 浏览次数:425

先演示错误的方法:

public static  int[][] getIntArr(){
	    int[][] arr={ {1,2,1},{2,1,2} };
	    return arr;
	}
这样看起来是对的,但是继续写的时候会发现接收不了。如下图:

出现的问题是:


静态方法不能访问非静态成员(包括静态方法和静态变量),但非静态方法可以静态成员和非静态成员。
静态成员属于类所有,被类的所有对象共享,它在程序预编译期间就能确定。非静态成员属于对象所有,而对象需要在程序运行期间分配空间。故在预编译期间就能确定的静态成员不能访问需要在程序运行时才能确定的非静态成员。
main是静态方法,它只能访问静态成员,所以它可以访问static的方法,不能访问没有static声明的getIntArr方法,解决方法就是在成员声明前加static关键字,表明该成员是静态成员。

但是,加上static之后,getIntArr方法就不再是构造方法,而是一个成员方法。(没有写构造方法的时候,程序会自动增加一个看不见的无参数无操作的构造函数。)

所以正确的方法应该是:

public class getIntArr {
	public static  int[][] getIntArr(){
	    int[][] arr={ {1,2,1},{2,1,2} };
	    return arr;
	}
	public static void main(String[] args){		
		int[][] rs=getIntArr();
		System.out.println(rs);
		for(int i=0,j=0;i<rs.length;){
			System.out.print(rs[i][j]+" ");
			j++;
			if(j>=rs[i].length){
				i++;
				j=0;
				System.out.println();
			}
		}
	}
}

输出结果为:

第一行,是用System.out.println输出的一串字母+数字的字符串,这个字符串就是该数组对象的内存地址。

另外用一层for循环的效率会比用两层for循环效率要高一些。





声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。