黑马程序员技术交流社区
标题:
static的使用
[打印本页]
作者:
熊薇
时间:
2013-3-12 09:36
标题:
static的使用
本帖最后由 熊薇 于 2013-3-14 14:53 编辑
在定义变量,特别是方法时什么时候将其定义为静态的?
作者:
熊冠银
时间:
2013-3-12 10:21
当类中变量或者方法被所有对象所共享的,方法里面没有调用非静态的变量的时候,写段简短的代码给你参考吧
class Animal
{
private int age;
Animal()
{
this.age=age;
}
static int leg=4;
static void sleep()
{
System.out.println("睡觉");
}
void getAge()
{
System.out.println(age);
}
}
复制代码
解释:假定所有动物都有4条腿,那么腿的个数就可以被静态修饰。在上面的两个方法中,sleep并未涉及非静态变量,所以可以被静态修饰,而getAge不行,因为其内部有非静态变量
作者:
王亚飞
时间:
2013-3-12 10:51
什么时候使用静态
两方面下手
因为静态修饰的内容有成员变量和函数
什么时候定义静态变量(类变量)
对象出现共同数据的时候该数据被静态所修饰
对象中的特有数据要定义成非静态
定义静态函数
功能内部没有访问到非静态数据(对象的特有数据)
那么该功能可以定义成静态的
作者:
张怀晶
时间:
2013-3-12 11:06
什么情况下将一个普通类标记为静态类:
一般情况是,当这个类是一个工具类,里面都是方法,为了让用户调用的时候方便,不需要实例化对象,这时可以将该类标记为static类,此时该类中只能包含静态成员,不能包含实例成员,如:Convert、Math、File、Console。
什么情况下需要在一个普通类中编写一个静态成员,而这个类不能标记为static:
如果这个类中有一个成员是所有对象都共享的数据,这时,可以将该类中的这个成员标记为静态的,但是这个类还是一个实例类。
作者:
宋健
时间:
2013-3-13 13:45
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(),调用时用采用类名.方法名;
总结:静态类中只能存在静态成员,不允许出现实例成员。
但是我们非静态类中可以有静态成员,也可以有非静态成员,
但是,静态成员访问不到实例成员。
非静态类中的非静态成员可以访问到静态成员。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2