老师说在main里new的对象是存的地址,main里存放的数据是放在栈里,
问题一:也就是说别的都放在堆里? 堆是个什么东西?它是怎么调用数据的,为什么我把main定义在方法之前和之后
都可以调用该方法?
问题二:为什么ab没有用创建,而它定义在main的前后都能直接用?public class abc 
{ private int abc;
        static int ab;  
public void a()
{
            abc=1;
        }
        public static void main(String [] args)
{
     ab=1;
}
}
public class abc 
{ public void a()
{
           abc=1;
        }
        private int abc;
        public static void main(String [] args)
{
ab=2;
}  
        static int ab;
}为什么 a()方法在这两种情况下殾能用abc?

解决方案 »

  1.   

    我也是刚学java,这是我的一点理解,如果有错误,希望大鸟指正
    一:String str = "xxx";此时的str是放在栈内存中的,基本数据是放在栈内存中的,还有对象的引用(注意是对象的引用,不是对象)也是放在栈内存中的。其他的对象的是放在堆内存中(String str = new String()也放在堆内存中)。至于栈和堆是什么,你自己去百度或者看看数据结构的书吧。main放的位置并不会影响你对方法的调用。
    二:你说的意思应该是ab没初始化就可以用吧?因为这里你的ab是成员变量,会自动被赋初值(非成员变量未初始化就使用会报错)。这里是ab=0
      

  2.   

    这老师 也太水了吧java中关于静态类 静态方法 静态代码块这些static的内容你看看  Thingking in java 讲的很明白
      

  3.   

    你以前学c的吧,Java是面向对象编程,不是面向过程,main方法写在哪没什么影响
      

  4.   

    main 虽然是入口函数,但是你没看到吗?它也是定义在你的类里面的啊。为什么不能用 abc 呢?
      

  5.   

    Java code
    public class abc 
    {    private int abc;
            static int ab;     
        public void a()
        {
                abc=1;
            }
            public static void main(String [] args)
        {
             ab=1;
        }
    }==========================
    这里的abc=1是局部变量赋值;并没有对class abc中的abc变量赋值初始化;
      

  6.   

    你定义的abc 是ABC类的成员变量,在这个类的大括号范围类 ,只要不是静态的方法或代码块中 ,其他地方都可以直接调用
    然后ab是这个类的静态的成员变量,这个静态成员变量属于这个类的所有对象共有一个,在这个类的任何地方都可以直接调用,包括静态的main方法
    2个代码里的abc()因为都是在ABC这个类里面,所以可以直接使用成员变量abc
      

  7.   

    Java code
    public class abc 
    {    public void a()
        {
               abc=1;
            }
            private int abc;
            public static void main(String [] args)
        {
            ab=2;
        }     
            static int ab;
    }=================
    这个同样没有调用public void a()函数来对abc变量赋值初始化。