黑马程序员技术交流社区

标题: 静态方法不能访问静态变量问题 [打印本页]

作者: 郎泽东    时间: 2013-4-20 17:28
标题: 静态方法不能访问静态变量问题
class Date1{
        private int day;
        private int month;
        private int year;
        public Date1(int d, int m, int y){
                this.day = d;
                this.month = m;
                this.year = y;
        }
        public void setday(int i){
                day = i;
        }
        public void setmonth(int i){
                        month = i;
                }       
        public void setyear(int i){
                        year = i;
                }       
        public int getday(){
         return day;
        }
  public int getmonth(){
  return month;
  }
  public int getyear(){
  return         year;
  }
  public  static void display(Date1 s){
  System.out.println(s.year +"-"+s.month+"-"+s.day);
  }

}
public class Test{
  public static void main(String [] args){
  Date1 d1= new Date1(1,2,3);
  Date1 d2= new Date1(2,3,4);
  Date1.display(d1);
  Date1.display(d2);
  }

}
这是我今天测试的一段代码;为什么静态方法display可以访问s.day和s.month和s.year。我个人认为它们不是静态变量
作者: 董维明    时间: 2013-4-20 17:38
真让人蛋碎啊,,你这个问题我是真碎了,,首先在display();方法中你传入了一个引用类型的数据 作为形参,,并调用了 该形参的自己的私有属性,当你用类名.直接调用display 时 你传 入了实参 对象d1,这个时候打印的就应该是 传进去的对象的 私有属性。
作者: JavaUtil    时间: 2013-4-20 18:07
static的特点是在你加载类的时候一并加载进虚拟机。
所以当你在它修饰的时候使用自身的非静态变量会报错,
因为加载类的时候你还没有对象。这些属性就更不可能存在。
但是你的静态方法里给他传递了该类的对象,他自然乐意运行了。
作者: 黄玉昆    时间: 2013-4-21 12:18
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
作者: 朝花夕拾_黑马    时间: 2014-4-16 11:40
静态方法属于一个类,因为静态方法和静态成员在编译时就存在,所以是属于一个类的,所以在vs中main函数中只能类名.调用静态方法、或者实例化一个对象.静态方法或成员,

静态方法里只能调用静态方法,不能调用非静态方法,因为非静态方法属于一个实例化的一个对象,静态方法中如果调用非静态方法,可能此时并未实例化一个对象,所以不能调用,除非,将一个实例化的对象作为参数传入到静态方法中,此时静态方法中就可以间接的调用非静态方法了

非静态方法可以访问类的静态成员,也可以访问类的非静态成员,因为此时调用非静态方法时,静态方法编译后已经存在,可以调用





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