注册 登录
编程论坛 JAVA论坛

关于在静态类调用非静态对象和利用非静态实例变量的问题

邹特强 发布于 2017-03-18 23:27, 1607 次点击
程序中表情位置出现编译错误,原因我知道,不用各位解释,只是想知道
1,除了把原来的非静态类改为static还有什么别的方法在静态类里创建非静态对象(当然也除了把静态类改为非静态类。。)吗?
2,限制条件同上,还有什么其它方法在静态类里引用非静态实例变量吗?
package 多态2;

public class Animal
{
    int i;
    public void roar()
    {
        System.out.println("Ruff!");
    }
    public class Dog extends Animal
    {
        public void roar()
        {
          System.out.println("I am a dog!");
          super.roar();//可以在子类方法中利用super引用父类方法
        }
    }
    public static void main(String args[])//这里如果用static ,表示静态方法,则其在类加载时就会分配内存,就是执行到这个类时,同时分配了内存,而类里面还有
    {                  //还有非静态成员,其必须在类的对象产生时才会分配内存,再通过类的对象去访问,也就意味着如果用dog a=new dog(),计算机在内存中找不到dog
        Dog a=new Dog();//定义的变量没有使用
        Animal b=new Animal();
        a.roar();
        System.out.println(i);
    }
}
3 回复
#2
qq8078867272017-03-20 13:06
设置一个访问内部类的方法,再调用
#3
wuzhiwei2017-03-20 13:56
package 多态2;

public class Animal
{
    int i;
    public void roar()
    {
        System.out.println("Ruff!");
    }
   
    public Object newDog()
    {
        return new Dog();
    }
    public class Dog extends Animal
    {
        public void roar()
        {
          System.out.println("I am a dog!");
          super.roar();//可以在子类方法中利用super引用父类方法
        }
    }
    public static void main(String args[]) throws Exception//这里如果用static ,表示静态方法,则其在类加载时就会分配内存,就是执行到这个类时,同时分配了内存,而类里面还有
    {                  //还有非静态成员,其必须在类的对象产生时才会分配内存,再通过类的对象去访问,也就意味着如果用dog a=new dog(),计算机在内存中找不到dog
        Animal b=new Animal();
        Dog a=(Dog) b.newDog();
        a.roar();
        System.out.println(b.i);
    }
}
#4
九转星河2017-03-21 10:09
这个九九也知道~static用这个关键字只有一个共用内存空间~这就像C的static关键字一样是静态变量~
1