A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高双武 黑马帝   /  2011-11-8 17:31  /  2557 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的代码中为什么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;
        }

}

8 个回复

倒序浏览
在static所修饰的函数和语句块中不能使用非static成员字段,你只能在静态main()方法中调用静态的方法或字段,如果你的方法为非静态的,就要去创建对象,然后再用对象的成员方法去调用!

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞一个!

查看全部评分

回复 使用道具 举报
static 静态方法可以被静态方法直接访问,不需要创建对象

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞!

查看全部评分

回复 使用道具 举报
静态方法只能调用静态的方法,主函数是静态的,函数中调用了getIndex()方法,所以去掉getIndex()方法中的static就会报错
还有一个要注意的是静态方法里不能有this关键字

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞!

查看全部评分

回复 使用道具 举报
去掉了static,就使用创建对象然后才能调用方法,static是静态的,可以直接访问

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 赞。

查看全部评分

回复 使用道具 举报
因为主函数是静态的,.静态方法只能访问静态成员变量,而非静态方法既可以访问静成员变量也可以访问非静态成员变量。另外静态方法中不可以定义this和super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this。
回复 使用道具 举报
柴亚飞 黑马帝 2011-11-8 22:44:05
7#
getIndex()没有static修饰,就只有一种情况被引用,通过对象名.方法名的方式引用。
如果方法被static修饰,那就可以通过类名.方法名的方式被引用。由于引用这个方法的的代码和这个方法本身位于同一个类中,类名用this代替。this是可以省略的。如果使用位于本类之外的其他类的静态方法,则必须加上类名。

回复 使用道具 举报
坚强 黑马帝 2011-11-8 22:19:56
8#
楼上的很全面了,如果你要去掉static 就把它封装起来,然后创建对象,通过对象来应用
回复 使用道具 举报
张翼 黑马帝 2011-11-9 08:03:20
9#
挡在eclipse SDK写出类似这样主函数中直接调用方法的程序,函数声明部分一律要使用static,要不然eclipse上就会说,Cannot make a static reference to the non-static method a() from the type acc,意思就是不能让一个静态类型的方法调用一个非静态的方法,也就是说,一个方法,是一个成员,而成员一定是有类型的,在main中就是static类型的,因此,既然是static类型的怎么能去访问非static类型的方法呢?所以必须加上static.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马