黑马程序员技术交流社区

标题: static静态小问题 [打印本页]

作者: 四川男人    时间: 2014-4-19 00:32
标题: static静态小问题
本帖最后由 四川男人 于 2014-4-19 09:40 编辑

main()是静态的,为何在main中能调用非静态成员跟方法呢?

作者: Tking    时间: 2014-4-19 00:38
谁说可以调用了?你举个例子
作者: 程序爱好者    时间: 2014-4-19 01:01
public class TT{

    public static void main(String[] args){

        TT t = new TT();

        t.fun();

    }   

    void fun(){

        System.out.println("hehe");

    }

}
对于一般的非static成员变量或方法,需要有一个对象的实例才能调用,所以要先生成对象的实例,他们才会实际的分配内存空间。而对于static的对象或方法,在程序载入时便已经分配了内存空间,他只和特定的类想关联,无需实例化。
作者: vtming    时间: 2014-4-19 01:22
你那是实例化对象后,通过对象调用的
作者: Royvan    时间: 2014-4-19 08:54
你能调用的不是main函数所属类中的非静态成员,而是在main函数中实例化的对象成员,通过对象调用的。
楼主可以试试在main函数所属的类中定义一个非静态的方法,编译时会提示你错误。
作者: 2528870651    时间: 2014-4-19 09:12
  1. package it.cast;


  2. public class Test1{

  3.     public static void main(String[] args){

  4.        Test1 t = new Test1();   //这里是创建本类对象

  5.         t.fun(); //通过创建的本类对象来调用本类对象的成员函数
  6.                         //所以,这里不是main函数来调用非静态函数的问题

  7.     }   

  8.     void fun(){

  9.         System.out.println("hehe");

  10.     }

  11. }
复制代码
这里有截图的

捕获.PNG (109.25 KB, 下载次数: 20)

捕获.PNG

捕获2.PNG (129.98 KB, 下载次数: 23)

捕获2.PNG

作者: 左拉    时间: 2014-4-19 09:13
本帖最后由 左拉 于 2014-4-19 09:15 编辑
  1. public class Test{
  2.      public static void main(String[]] args){
  3.         //静态方法调用静态方法
  4.         fun();
  5.        //不能在main中直接调用非静态方法,必须使用对象调用
  6.        new Test().show();
  7. }
  8.      public static void fun(){
  9.          System.out.,println("静态方法");
  10.      }

  11.      public  void show(){
  12.           System.out.println("非静态方法");
  13.     }
  14. }
复制代码
你的意思是main()中可以调用普通方法,但是忘了每个普通非静态方法都是通过实例化对象调用的,而不是直接通过main()调用

作者: 2528870651    时间: 2014-4-19 09:22
2528870651 发表于 2014-4-19 09:12
这里有截图的

为了技术分就是要生动 详细
作者: 四川男人    时间: 2014-4-19 09:34
程序爱好者 发表于 2014-4-19 01:01
public class TT{

    public static void main(String[] args){

额,了解了
作者: 四川男人    时间: 2014-4-19 09:35
Royvan 发表于 2014-4-19 08:54
你能调用的不是main函数所属类中的非静态成员,而是在main函数中实例化的对象成员,通过对象调用的。
楼主 ...

跟你说的一样
作者: 四川男人    时间: 2014-4-19 09:38
2528870651 发表于 2014-4-19 09:12
这里有截图的

学习了。。。
作者: 四川男人    时间: 2014-4-19 09:40
左拉 发表于 2014-4-19 09:13
你的意思是main()中可以调用普通方法,但是忘了每个普通非静态方法都是通过实例化对象调用的,而不是直接通 ...

嗯。感谢




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