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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 熊薇 中级黑马   /  2013-3-12 09:36  /  1490 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 熊薇 于 2013-3-14 14:53 编辑

在定义变量,特别是方法时什么时候将其定义为静态的?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

4 个回复

倒序浏览
当类中变量或者方法被所有对象所共享的,方法里面没有调用非静态的变量的时候,写段简短的代码给你参考吧
  1. class Animal
  2. {
  3.     private int age;
  4.     Animal()
  5.     {
  6.       this.age=age;
  7.     }
  8.     static int leg=4;
  9.     static void sleep()
  10.     {
  11.       System.out.println("睡觉");
  12.     }
  13.     void getAge()
  14.     {
  15.        System.out.println(age);
  16.    }
  17. }
复制代码
解释:假定所有动物都有4条腿,那么腿的个数就可以被静态修饰。在上面的两个方法中,sleep并未涉及非静态变量,所以可以被静态修饰,而getAge不行,因为其内部有非静态变量
回复 使用道具 举报
什么时候使用静态
两方面下手
因为静态修饰的内容有成员变量和函数
什么时候定义静态变量(类变量)
对象出现共同数据的时候该数据被静态所修饰
对象中的特有数据要定义成非静态

定义静态函数
功能内部没有访问到非静态数据(对象的特有数据)
那么该功能可以定义成静态的

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
什么情况下将一个普通类标记为静态类:
      一般情况是,当这个类是一个工具类,里面都是方法,为了让用户调用的时候方便,不需要实例化对象,这时可以将该类标记为static类,此时该类中只能包含静态成员,不能包含实例成员,如:Convert、Math、File、Console。

什么情况下需要在一个普通类中编写一个静态成员,而这个类不能标记为static:
     如果这个类中有一个成员是所有对象都共享的数据,这时,可以将该类中的这个成员标记为静态的,但是这个类还是一个实例类。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
1.非静态类中可以有静态成员;

2.调用:实例类调用自己的非静态方法的时候,需要对象名.方法名();

实例类调用自己的静态方法的时候,需要类名.方法名();

3.静态方法中只能访问到静态成员。

详见下面代码实现

    //定义非静态类

    public class Person//非静态类

    {

        public static string Name { get; set; }

        public int Age { get; set; }

        public char Gender { get; set; }



        public static void SayHello()//静态方法

        {

            Console.WriteLine("大家好,我是{0}",Name);

        }

    }

    //静态成员的调用

static void Main(string[] args)

        {

            Person person = new Person();

            Person.Name = "张三";

            Person.SayHello();//类名.方法名()调用

            Console.ReadKey();

        }



4.静态类中不允许出现实例成员,哪怕是方法也不行

public static class Person

    {

        public static string Name { get; set; }

        //public int Age { get; set; }//如果类中包含注释部分实例成员,编译报错

        //public char Gender { get; set; }



        public static void SayHello()

        {

            Console.WriteLine("大家好,我是{0}",Name);

        }

注意:如果类中包含注释部分实例成员,编译报错。

5.不能创建静态类的对象

static void Main(string[] args)

        {

            //Person person = new Person();////如果类中包含注释部分创建实例对象,编译报错

            Person.Name = "张三";

            Person.SayHello();

            Console.ReadKey();

        }



6.经常把静态类当做 “工具类”,例如Console类的WriteLine(),调用时用采用类名.方法名;



总结:静态类中只能存在静态成员,不允许出现实例成员。

但是我们非静态类中可以有静态成员,也可以有非静态成员,

但是,静态成员访问不到实例成员。

非静态类中的非静态成员可以访问到静态成员。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马