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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李鑫 初级黑马   /  2012-6-3 22:52  /  3912 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

是否可以从一个static方法内部发出对非static方法的调用?与创建对象有无关系?请举例说明一下哈

4 个回复

倒序浏览
 在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。代码:
  1. class Chinese
  2.  {
  3.          static String country="中国";
  4.          String name;
  5.          int age;
  6.          Static void method()
  7.          {
  8.                  System.out.println("啊!,亲爱的" + country);
  9.                  //类中的成员方法也可以直接访问静态成员变量
  10.          }
  11.  }
  12.  class TestChinese
  13.  {
  14.          public Static void main(String [] args)
  15.          {
  16.                  System.out.println("Chinese  country is " + Chinese.method());
  17.                  //直接使用了"类名.成员方法"的格式
  18.                  Chinese ch1 = new Chinese();
  19.                  System.out.println("Chines country is " + ch1.method());
  20.                  //使用了"对象名.成员方法"的格式
  21.                 
  22.          }
  23.  }
复制代码
回复 使用道具 举报
不行,lz记住一点,静态的成员好比先到教室的同学,而非静态的成员好比后到教室的同学。
你想啊,先到的同学能跟后到的同学打招呼吗?当然不能。除非见鬼了。
后到的同学可以跟先到的同学打招呼,这是必须滴。
与创建对象无关系。
class Person
{
        public static void run()
        {
                eat();
        }

        public void eat()
                {
                        System.out.println("haha");
                }
}

class cs
{
        public static void main(String[] args)
        {
                 new Person().run();
               
        }
}
上面代码会报错:
---------- javac ----------
错误: 无法从静态上下文中引用非静态 方法 eat()

不管你new不new对象,只要一调用run(),就会报错。
当然,你也只要通过new对象才能测试你的问题。

回复 使用道具 举报
从概念上来说貌似不能吧 静态类是类一加载的时候就存在的,而这时候对象或者需要用对象调用的方法还没加载;
代码示例:
public class Test {
        public static void main(String[] args) {

        }
        public static void show() {
                show2();  //这儿编译器会报错
                new Test().show2(); //这儿因为new了对象然后调用 没错
        }
        public void show2() {

        }
}
回复 使用道具 举报
其实这个很好理解的static修饰的方法用类名直接就可以调用,也就是说不需要建立对象就可以调用,如果你在此static方法类建立了非static方法,而非静态方法必须实例化才可调用的,这样的话,这个static方法就不能被类所调用,这就与static能被类调用违背,所以不能在里面建立非静态方法,另外,在static方法中只能调用静态成员变量,理由和上面一样...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马