黑马程序员技术交流社区

标题: 关于静态函数的问题 [打印本页]

作者: 高双武    时间: 2011-11-8 17:31
标题: 关于静态函数的问题
下面的代码中为什么getIndex()函数必须是static类型的,去掉了就出错?
package execisetest;
public class ArrEquals {
       
        public static void main(String[] args) {
                int key=9;
                int [] arr=new int[]{2,3,5,7,8,4};
                System.out.println(getIndex(arr,key));       
        }
        public static  int  getIndex(int [] arr,int key) {
                for(int i=0;i<arr.length;i++){
                        if(arr[i]==key){
                                return i;
                        }                       
                }
                return -1;
        }

}
作者: 王德云    时间: 2011-11-8 17:40
在static所修饰的函数和语句块中不能使用非static成员字段,你只能在静态main()方法中调用静态的方法或字段,如果你的方法为非静态的,就要去创建对象,然后再用对象的成员方法去调用!
作者: 张邦庆    时间: 2011-11-8 17:42
static 静态方法可以被静态方法直接访问,不需要创建对象
作者: 陈时峰    时间: 2011-11-8 18:19
静态方法只能调用静态的方法,主函数是静态的,函数中调用了getIndex()方法,所以去掉getIndex()方法中的static就会报错
还有一个要注意的是静态方法里不能有this关键字
作者: 咖啡    时间: 2011-11-8 18:35
去掉了static,就使用创建对象然后才能调用方法,static是静态的,可以直接访问
作者: wangqing    时间: 2011-11-8 18:55
因为主函数是静态的,.静态方法只能访问静态成员变量,而非静态方法既可以访问静成员变量也可以访问非静态成员变量。另外静态方法中不可以定义this和super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this。
作者: 坚强    时间: 2011-11-8 22:19
楼上的很全面了,如果你要去掉static 就把它封装起来,然后创建对象,通过对象来应用
作者: 柴亚飞    时间: 2011-11-8 22:44
getIndex()没有static修饰,就只有一种情况被引用,通过对象名.方法名的方式引用。
如果方法被static修饰,那就可以通过类名.方法名的方式被引用。由于引用这个方法的的代码和这个方法本身位于同一个类中,类名用this代替。this是可以省略的。如果使用位于本类之外的其他类的静态方法,则必须加上类名。


作者: 张翼    时间: 2011-11-9 08:03
挡在eclipse SDK写出类似这样主函数中直接调用方法的程序,函数声明部分一律要使用static,要不然eclipse上就会说,Cannot make a static reference to the non-static method a() from the type acc,意思就是不能让一个静态类型的方法调用一个非静态的方法,也就是说,一个方法,是一个成员,而成员一定是有类型的,在main中就是static类型的,因此,既然是static类型的怎么能去访问非static类型的方法呢?所以必须加上static.




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