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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 肖瑞军 黑马帝   /  2011-11-8 23:23  /  3462 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 肖瑞军 于 2013-8-27 23:26 编辑

?????
为什么?

7 个回复

倒序浏览
当然可以对非静态方法的调用呀,就拿main()方法为例,你如果要调用非静态的,那要去实例化一个对象,再用对象去调这个方法,因为每一个成员方法都是对象所具有的。
回复 使用道具 举报
必须通过对象名.方法名的方式对非static方法进行调用。
必须通过类名.方法名的方式对static的方法进行调用。如果调用static方法的方法与这个static方法位于同一个类内,那么可以省略被调用的static方法的类名。例如main()方法内部经常通过直接调用方法名的方式对位于同一个类中的static方法直接调用。这里其实是使用了默认的本身类名。
回复 使用道具 举报
上面的写法有问题。
应该是
必须通过对象名.方法名的方式对非static方法进行调用。

”可以“通过类名.方法名的方式对static的方法进行调用。如果调用static方法的方法与这个static方法位于同一个类内,那么可以省略被调用的static方法的类名。例如main()方法内部经常通过直接调用方法名的方式对位于同一个类中的static方法直接调用。这里其实是使用了默认的本身类名。也可以通过对象名。方法名的方式调用。你可以试试。

评分

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

查看全部评分

回复 使用道具 举报
实例化一个对象就可以调用静态方法就可以访问非静态的变量和函数了!
回复 使用道具 举报
    可以,几乎每个Java程序都会使用,主方法main就是static类型的,而通过声明对象,可以对非static成员方法进行调用。
   在Java中有个重要的语法,静态变量不仅仅实例方法访问还可以被类方法调用,而实例变量仅仅可以被实例方法调用,从这句话可以看出,实际上static变量是类级别,也就是高于对象级别,因为它层次更高,所以可以调用层次更低的成员,但是层次更低的却不一定可调用层次更高的成员。   
回复 使用道具 举报
坚强 黑马帝 2011-11-9 07:45:18
7#
这是毕老师的讲义摘要:static 是一个修饰符,用于修饰成员(成员变量 成员函数)
当成员被静态修饰后,就多了一个的调用方式,除了可以被对象调用外
还可以直接被类名掉用 写法:类名.静态成员

static特点:1 随着类的加载而加载 也随着类消失而消失      一般的成员是随着对象的,被static修饰的可以不要对象直接调用
            2 优先与对象存在
            3 被所有对象共有
            4 可以直接被类名所调用。
实例变量和类变量的区别:
1 存放位置  类变量随着类的加载而存在与方法区中
            实例变量随着对象的建立而存在与堆内存中

2 生命周期  类变量生命周期最长 随着类的消失而消失
            实例变量随着对象的消失而消失

注意:静态方法只能访问静态成员
      非静态方法可以访问静态也可以访问非静态
      静态方法中不可以定义this super 关键字(因为静态优先与对象 主函数是静态的。)

静态的利弊:
利:对对象共享数据进行单独空间的存储,减少内存,没有必要每个对象中都存一份
    可以直接被类名调用

弊:生命周期过长  访问出现局限性(静态虽好,只能访问静态)
什么时候使用静态?
  当对象中出现共享数据时,该数据被静态所休息
  对象自己特有的数据要定义成非静态存在于堆内存中

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 很详细。学习下。

查看全部评分

回复 使用道具 举报
高双武 黑马帝 2011-11-9 07:54:50
8#
静态方法内部调用的方法如果是静态的可以直接调用,例如
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;
        }

}
就是直接调用了静态方法,但是如果调用的那个方法不是静态的,则需要先声明一个对象,通过该对象调用那个非静态的方法。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马