黑马程序员技术交流社区

标题: 数组本身也是对象,为什么int maxElement = getMax_2(arr); [打印本页]

作者: 姜姗姗    时间: 2014-4-8 22:21
标题: 数组本身也是对象,为什么int maxElement = getMax_2(arr);
本帖最后由 姜姗姗 于 2014-4-13 15:48 编辑

package test;
public class test24 {
        public static void main(String args[]){
                int[] arr = {-23,-34,-65,-23,-78,-234,-6};
                int maxElement = getMax_2(arr);//为什么int maxElement =arr.getMax();不对
               
                System.out.println(maxElement);
        }
        
        public static int getMax(int [] arr ){
                int maxElement = arr[0];//定义变量记录较大的值
                for(int x=1;x<arr.length;x++){//注意不要x<arr.length-1那样最后一个元素取不到,
                        
               
                        if(arr[x]>maxElement)
                                maxElement = arr[x];                                
                }        
               
                return  maxElement;
        }
        
        //getMax_2() 是求最大值的另一种思想、方法
        public static int getMax_2(int []arr){
                int maxIndex = 0;//定义变量记录较大的值的角标
                for(int x=1;x<arr.length ;x++){
                        if(arr[x]>arr[maxIndex])
                                maxIndex = x;
                }
               
               
                return arr[maxIndex];
        }
        
        //getMax()是通过控制元素来进行的比较,而getMax_2()是通过控制元素角标来进行元素的比较

}






数组本身也是对象,为什么int maxElement = getMax_2(arr);不能写成  int maxElement =arr.getMax();
作者: ._抬眉﹏    时间: 2014-4-11 10:10
数组对象中根本就没有getMax();这个方法,你这个方法只是定义在test24这个类当中了,是静态的,要使用这个方法的话,要用类名.方法名,例如test24.getMax(arr ) 这样就可以了

下面的这个方法并不是数组对象中有的方法,也不会牵扯到方法的覆盖

     public static int getMax(int [] arr ){
                int maxElement = arr[0];//定义变量记录较大的值
                for(int x=1;x<arr.length;x++){//注意不要x<arr.length-1那样最后一个元素取不到,
                        
               
                        if(arr[x]>maxElement)
                                maxElement = arr[x];                                
                }        
               
                return  maxElement;
        }

作者: 姜姗姗    时间: 2014-4-11 22:24
搜噶,秒懂,这个题困了我两天了,大牛,膜拜啊,:handshake
作者: zms2100    时间: 2014-4-11 22:50
差不多如LS所言,讲点详细其他的就是:
   1、数组是对象,所以它与Java大部分类一样继承自Object类,我印象中它又好像没有从属于哪个类(虽然在JDK里有java.lang.reflect.Array这个类,不过属于类似java.util.Arrays的工具类一类,即无法创建该类实例对象,但对外提供操作功能的静态方法,就像你这里Test24这个类,就有getMax(int[] arr)与getMax_2(int[] arr)两个静态方法)。
  2、(因为数组是对象,算是Object子类,)因此数组可以调用Object类中的方法,例如: arr.toString(); 或 arr.getClass()等方法。
  3、提个醒,在Java观念中万物皆对象,但不是对象之间就可以随意调用其他的方法,而要看它是属于哪个类或哪些类的子类(子类可以调用该继承体系中其他父类们的方法)。例: String类实例对象不能调用专属于Integer类的方法(强调专属是因为它们都是Object类的子类)。
  说得太唠叨了,详细LZ妹子也只是一时犯糊涂,O(∩_∩)O~

作者: 姜姗姗    时间: 2014-4-13 15:48
zms2100 发表于 2014-4-11 22:50
差不多如LS所言,讲点详细其他的就是:
   1、数组是对象,所以它与Java大部分类一样继承自Object类,我印象 ...

哦哦,原来关键是数组不能实例化对象。搜噶,/强
作者: zms2100    时间: 2014-4-14 06:34
姜姗姗 发表于 2014-4-13 15:48
哦哦,原来关键是数组不能实例化对象。搜噶,/强

不能这么概括吧,int[] arr = new int[5];这也算实例化对象,只不过是int[]等数组是个序列,不同于集合,在Java中没有与其对应的类(除了能调用Object类的方法外没有专门的类的方法可调用)。
例如: 字符串在Java里有String这个类,而在C语言等里面是算字符序列,也是没有专门对应的类(PS: 这比方打的不是很好,因为C语言面向过程,方法通常是过程型的,没有Java所谓的属于谁,仅供理解参考)。
可能我解释的有些唠叨又不清楚了,简单点就按"沙发"的童鞋的思路去理解,那个getMax()方法属于test24这个类(话说这类名建议首字母大写),而不是数组对象的方法。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2