初学java的菜鸟,关于静态方法只能访问静态成员有个小疑问,请老手指教。范例1、主方法静态,其引用的方法sop()必须为静态,这个好理解。
class YinYong
{ public static void main(String[] args)
 {
  sop("从键盘输入一串字符");
  } static void sop(String s)
 {
  System.out.println(s);
 }}范例2、主方法静态,yy为局部变量,其调用sop()方法不需要是静态的,这个也能理解。
class YinYong
{ public static void main(String[] args)
 {
  YinYong yy = new YinYong();
  yy.sop("从键盘输入一串字符");
 } void sop(String s)
 {
  System.out.println(s);
 }}范例3、主方法静态,yy为成员变量,因此必须是静态的。但是主方法和成员都是静态的,其调用sop()方法却不需要是静态的,这是为什么?
class YinYong
{
 static YinYong yy = new YinYong(); public static void main(String[] args)
 {
   yy.sop("从键盘输入一串字符");
  
 } void sop(String s)
 {
  System.out.println(s);
 }}

解决方案 »

  1.   

    列3是因为yy是类变量,当然可以调用自己类中的方法,而例1中是因为main方法直接调用同类中方法,静态方法只能调用同类中的静态变量和静态方法。
      

  2.   

    调用sop()方法跟调用yy对象的sop()方法是两个东西。静态方法只能调用静态对象,这个对象指的是yy。
      

  3.   

    静态方法只能访问静态成员,第三个例子中静态成员是yy,不是stop(方法)
      

  4.   

    new 了之后 是已经加载过方法了,所以可以调用; 你把main 方法 和这个类分开写,就好理解了
      

  5.   

    yy是YinYong的实例,实例就可以调用非静态方法了
      

  6.   

    main为什么能直接使用yy,因为yy是static,即静态成员
    main为什么能使用soap,因为是通过yy.soap的方式调用的,即通过调用静态成员(已实例化)的方法来调用的,而不是直接调用soap方法
      

  7.   

    因为这个yy有钱,static YinYong yy = new YinYong();
    就跟你只要有钱,你叫女孩子就会理你,
    而静态方法臭屌丝一个,穷的不行,只能叫跟他一样的女孩;
    但是那个yy开局你给了他钱了,所以你在哪都能叫动所有女孩子;开局充钱无解的