黑马程序员技术交流社区

标题: 【新手提问】static 的问题 [打印本页]

作者: 嘿马    时间: 2013-11-25 22:31
标题: 【新手提问】static 的问题
方法中,如果没有出现过特有数据的话,那么就可以给方法前面加上static,表示静态方法;突然想到,主函数public static void main(String[] args)中就有static,那么就说明主函数中不能调用特有数据?但是可以在主函数中创建对象,如Student s=new Student();s.age=17;这个s.age不是堆里面的特有数据吗?那么为什么在static的静态方法中可以调用特有数据?举例如下:
class Student
{
        int age;
}
class Demo
{
        public static void main(String[] args)
        {
                Student s=new Student();
                s.age=17;
                System.out.println(s.age);
        }
}
               
作者: 胡陈思    时间: 2013-11-25 23:17
"方法中,如果没有出现过特有数据的话,那么就可以给方法前面加上static,表示静态方法;"
这个说法没错,没有特有数据,没有创建对象的必要。
static修饰静态方法,主要是为了方便类名直接调用方法,可以省去创建对象后,再用对象调用的步骤。

主函数public static void main(String[] args)  中的static正是为了让虚拟机直接用类名.main,调用main方法。
你所说的“主函数中调用了特有数据”,看一下在具有主函数的Demo类中,并没有特有数据。

public class Demo
{
        int x =0 ;//没有这样的特有数据
        public static void main(String[] args) {

               
        }
}
s.age是创建了Student对象后,用对象调用的Student类的特有数据,与主函数的static无关。
作者: 胡陈思    时间: 2013-11-25 23:17
我写两个小例子看下。
第一个:static静态调用
class Student
{
       
        public static  void show()
        {
                System.out.println("张三");
        }
}
public class Test
{
        public static void main(String[] args) {
                Student.show();
               
        }
}
第二个:创建对象调用
class Student
{
        String name ;
       
        public Student(String name)
        {
                this.name = name;
        }
        public void show()
        {
                System.out.println("name:"+name);
        }
}
public class Test
{
        public static void main(String[] args) {
//                Student2.name = "张三";//不是static修饰时,这两个就不可行了
//                Student2.show();
                Student s = new Student("张三");
                s.show();
               
               
        }
}















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