黑马程序员技术交流社区

标题: 关于对象的问题 [打印本页]

作者: 郑强强    时间: 2012-4-8 17:23
标题: 关于对象的问题
class ArrayTool
{


        public  void selectSort(int [] arr)
        {
                for (int x=0;x<arr.length;x++ )
                {
                        for (int y=x; y<arr.length;y++ )
                        {
                                if(arr[x]>arr[y])
                                        swap(arr,x,y);
                                for (int x=0;x<arr.length ; x++)
                                {
                                        System.out.print("arr="+arr[x]);

                                }
                       
                       
                        }
                }
        }


        public  void swap(int[] arr,int x,int y)
        {
                int temp=arr[x];
                arr[x]=arr[y];
                arr[y]=temp;
        }

public static void main(String[] args)
{
        int[] arr={3,4,2};
        ArrayTool at=new ArrayTool();
        ArrayTool.selectSort();


}

类中可不可只定义功能函数而不定义属性呢?为什么这样运行会出现错误呢?求详解



作者: 黑马老兵    时间: 2012-4-8 17:31
你这个程序有问题啊ArrayTool.selectSort();你是创建了一个对象出来但调用函数不是这么调用的。你定义的那个函数是带参的所以你调用的时候必须带参数,没有参数你的方法就不知道怎么执行了。

作者: 曾晓文    时间: 2012-4-8 17:37
本帖最后由 曾晓文 于 2012-4-8 17:45 编辑

类中可不可只定义功能函数而不定义属性呢?
当然可以啦。报了什么错,应该是静态方法调用非静态方法而报错。在一个类内静态方法不能调用非静态方法(因为虚拟机加载类是虚拟机先加载静态成员,完了再加载非静态成员。),所以在main方法调用ArrayTool.selectSort();会报错。
你的代码还要2个地方有问题,selectSort里定义类2次x,并且ArrayTool.selectSort();是没有参数,与定义的selectSort方法不批配
作者: 莫运飞    时间: 2012-4-8 18:02



class ArrayTool
{


        public  void selectSort(int[] arr)
        {
                for (int x=0;x<arr.length;x++ )
                {
                        for (int y=x; y<arr.length;y++ )
                        {
                                if(arr[x]>arr[y])
                                        swap(arr,x,y);
                                for (int a=0;a<arr.length ; a++)
                                {
                                        System.out.print("arr="+arr[a]);

                                }
                        
                        
                        }
              }
        }

        public  void swap(int[] arr,int x,int y)
        {
                int temp=arr[x];
                arr[x]=arr[y];
                arr[y]=temp;
        }

public static void main(String[] args)
{
        int[] arr={3,4,2};
        ArrayTool at=new ArrayTool();
      at.selectSort(arr);
}



}



我改动后的地方都用红色标识出来了,这些问题最好是自己去处理,做技术的没有问题就没有进步,问题越多进步越快。


作者: wang耀雨    时间: 2012-4-8 19:55
类中当用不到属性的时候当然可以不用定义,在类中定义属性则都是该类对象的属性,出现错误是你这里的语法错误 ArrayTool.selectSort();调用函数,应该用“对象名.函数名”来调用,而不能使用类名调用,类名只能调用静态函数
作者: 彭威    时间: 2012-4-8 20:16
是可以的。

错误:1,静态方法调用非静态方法报错。在类内静态方法不能调用非静态方法,而你在main方法
调用ArrayTool.selectSort()报错,原因你main是静态的 而selectSor和swap都是非静态的,静态是不能调用非静态的;

2嵌入的第三个for拿出来进行遍历,在里面的话相当于循环了3次,3次中符合的值相乘的个数

3 ArrayTool.selectSort(); 调用类方法时对应的arr加上


作者: 刘保峰    时间: 2012-4-9 08:47
楼上说的很好:毕老师的视频也是这么说的
类中当用不到属性的时候当然可以不用定义,在类中定义属性则都是该类对象的属性,出现错误是你这里的语法错误 ArrayTool.selectSort();调用函数,应该用“对象名.函数名”来调用,而不能使用类名调用,类名只能调用静态函数
作者: pray    时间: 2014-4-26 06:07
我在顶贴~!~




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