黑马程序员技术交流社区

标题: 对象能否调用静态方法? [打印本页]

作者: →Naxxramas←    时间: 2014-4-12 12:21
标题: 对象能否调用静态方法?
本帖最后由 →Naxxramas← 于 2014-4-12 23:00 编辑

这里不太明白。。
作者: 诠释♂回忆    时间: 2014-4-12 19:33
静态方法只能是类才能调用吧
作者: ò壞尛孩    时间: 2014-4-12 19:35
可以调用!静态方法的调用和非静态方法一样,只是静态方法在写的时候要注意不能出现this super这样的引用!
静态方法还可以直接用类.静态方法调用!记住一下的三句:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法既可以用实例来调用,也可以用类名来调用。
作者: 黒■色    时间: 2014-4-12 20:04
静态方法就是直接用类来调用,不能用对象来调用静态方法

  1. class Program
  2.     {
  3.         /// <summary>
  4.         /// 一个类中,static方法能用static对象,不能直接调非static的对象。
  5.         /// 被static修饰的不需要实例化.就是不能被new的类就是静态类。
  6.         /// </summary>
  7.         /// <param name="args"></param>
  8.         static void Main(string[] args)
  9.         {
  10.             Person Age = new Person();
  11.             Person.TotalCount = 10;
  12.             Console.WriteLine(Person.TotalCount);
  13.             DoIt();
  14.             Dog dog = new Dog();
  15.             dog.jiaohuan();
  16.             Console.ReadKey();
  17.         }

  18.         public static void DoIt()
  19.         {
  20.             Console.WriteLine("使用全局变量,{0}", Person.TotalCount);//用了全局变量
  21.         }      
  22.     }

  23.     public class Person
  24.     {
  25.         public static int TotalCount;//加了static后,是全局变量,都能被访问。
  26.         public int Age;
  27.       
  28.     }

  29.     public class Dog
  30.     {         
  31.         public void jiaohuan()
  32.         {
  33.             Console.WriteLine("旺旺,{0}",Person.TotalCount);//没有被static修饰,但也可以使用全局变量
  34.             Program.DoIt();//调用Program类中的静态方法DoIt()
  35.         }
  36.     }
复制代码

作者: 朝花夕拾_黑马    时间: 2014-4-16 11:36
静态方法属于一个类,因为静态方法和静态成员在编译时就存在,所以是属于一个类的,所以在vs中main函数中只能类名.调用静态方法、或者实例化一个对象.静态方法或成员,

静态方法里只能调用静态方法,不能调用非静态方法,因为非静态方法属于一个实例化的一个对象,静态方法中如果调用非静态方法,可能此时并未实例化一个对象,所以不能调用,除非,将一个实例化的对象作为参数传入到静态方法中,此时静态方法中就可以间接的调用非静态方法了

非静态方法可以访问类的静态成员,也可以访问类的非静态成员,因为此时调用非静态方法时,静态方法编译后已经存在,可以调用





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