黑马程序员技术交流社区

标题: public非静态变量问题 [打印本页]

作者: 于潇    时间: 2012-4-24 09:46
标题: public非静态变量问题
请看……

public class Shit {
  public int i=2;
  public static int j=3;
  public static void main(String[] args) {
    System.out.println(i);//有错
    System.out.println(j);
  }

}

怎样才能输出非静态的那个呢?
作者: 黄或俊    时间: 2012-4-24 09:48
static的方法只能访问静态成员(成员变量、成员函数)
因为static随着类的加载而加载
作者: Friends★    时间: 2012-4-24 09:58
静态方法不能访问非静态成员。
修改后的代码
public class Shit {
  public int i=2;
  public static int j=3;
  public static void main(String[] args) {
    System.out.println(new  Shit().i );//这样就不会有错了
    System.out.println(j);
  }

}
运行结果
2
3
作者: 黑马-刘昌文    时间: 2012-4-24 10:01
静态的表示是类所有的,直接用类就可访问,非静态的是对象所有的,必须创建出对象后再用对象去访问
作者: 于潇    时间: 2012-4-24 10:01
Friends★ 发表于 2012-4-24 09:58
静态方法不能访问非静态成员。
修改后的代码
public class Shit {

如果改为
Shit s = new Shit();
System.out.println(s.i);

这样可以么?
作者: 王运科    时间: 2012-4-24 10:08
类中非静态成员变量是在创建对象后才能调用的,需要创建对象后进行调用,代码如下;
public class Hello{
          public int i=2;
          public static int j=3;
          public static void main(String[] args){
                          Hello h=new Hello();
                          int n=h.i;
                         System.out.println(n);
                         System.out.println(j);
        }
}

作者: Friends★    时间: 2012-4-24 10:13
于潇 发表于 2012-4-24 10:01
如果改为
Shit s = new Shit();
System.out.println(s.i);

呵呵……可以的,和我那个是一个意思!只是我的那个是一步完成,你这种是分开来写的。
作者: 邱俊杰    时间: 2012-4-24 11:32
public class Shit {
  public int i=2;
  public static int j=3;
  public static void main(String[] args) {
    System.out.println(i);//有错 楼主注意,int不是静态。主函数是静态的。所以静态不能直接访问非静态变量 i 的,可以改成静态或者创建对象调用
    System.out.println(j);
  }
}

作者: 彭威    时间: 2012-4-24 13:10
你的 i 属于shit类里面的 非静态成员, 要想调用的话必须建立一个对象;才能用
可以这样:
public class Shit
{
  public int i=2;
  public static int j=3;
  public static void main(String[] args)
{
    System.out.println(new  Shit().i );
    System.out.println(j);
  }
}





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