A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 四川男人 中级黑马   /  2014-4-19 00:32  /  1194 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 四川男人 于 2014-4-19 09:40 编辑

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

12 个回复

倒序浏览
谁说可以调用了?你举个例子
回复 使用道具 举报
public class TT{

    public static void main(String[] args){

        TT t = new TT();

        t.fun();

    }   

    void fun(){

        System.out.println("hehe");

    }

}
对于一般的非static成员变量或方法,需要有一个对象的实例才能调用,所以要先生成对象的实例,他们才会实际的分配内存空间。而对于static的对象或方法,在程序载入时便已经分配了内存空间,他只和特定的类想关联,无需实例化。
回复 使用道具 举报
你那是实例化对象后,通过对象调用的
回复 使用道具 举报
你能调用的不是main函数所属类中的非静态成员,而是在main函数中实例化的对象成员,通过对象调用的。
楼主可以试试在main函数所属的类中定义一个非静态的方法,编译时会提示你错误。
回复 使用道具 举报
  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, 下载次数: 22)

捕获.PNG

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

捕获2.PNG

点评

很生动的  发表于 2014-4-19 09:20

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 很给力!

查看全部评分

回复 使用道具 举报
左拉 中级黑马 2014-4-19 09:13:11
7#
本帖最后由 左拉 于 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()调用

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报

为了技术分就是要生动 详细
回复 使用道具 举报
程序爱好者 发表于 2014-4-19 01:01
public class TT{

    public static void main(String[] args){

额,了解了
回复 使用道具 举报
Royvan 发表于 2014-4-19 08:54
你能调用的不是main函数所属类中的非静态成员,而是在main函数中实例化的对象成员,通过对象调用的。
楼主 ...

跟你说的一样
回复 使用道具 举报

学习了。。。
回复 使用道具 举报
左拉 发表于 2014-4-19 09:13
你的意思是main()中可以调用普通方法,但是忘了每个普通非静态方法都是通过实例化对象调用的,而不是直接通 ...

嗯。感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马