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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊双 中级黑马   /  2012-10-18 15:16  /  2189 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么时候用静态类,什么时候用非静态类,有什么区别意义?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
区别:静态类从程序一启动就会一直占用内存,而非静态类只在使用后(实例化)后才会占用内存.但是每实例化个一个对象时又会另外占用内存.
用法: 经常要被调用时,就用静态的.相反则用非静态的.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
、构造函数,无论在静态类或非静态类中,如果我们定义了一个static的构造函数,那么只要创建这个类的实例或调用这个类的方法,都将自动调用这个Static的构造函数,并且Static的构造函数是不能有访问权限的。static的构造函数是不能有参数的。

2、静态类中不能调用实例构造函数

2、静态类中不能创建非静态的方法。即静态方法中只能创建静态方法,但在非静态类中可以调用静态方法(这个情况我们经常使用的)

____________________________________________________________________________________

静态构造函数:

(1)用于对静态字段、只读字段等的初始化。              

(2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。        

(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数

(4)静态构造函数是不可继承的,而且不能被直接调用。            

(5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。    

(6)任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。  

(7)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
看看这段代码会有帮助
经典例子:


/**//**************************************************
* 静 态 构 造 函 数 练 习
* (1)①②③……为执行顺序
* (2)输出结果: static A()
* static B()
* X = 1, Y = 2
***************************************************/
using System;
class A
{
public static int X;

static A() //④ 执行完后返回到③
{
X = B.Y + 1;
Console.WriteLine("static A()");
}
}

class B
{
public static int Y = A.X + 1; //③ 调用了A的静态成员,
// 转到A的静态构造函数---->

static B() //② 如果带有初始值设定项的静态字段,
// 执行该类的静态构造函数时,
// 先要按照文本顺序执行那些初始值设定项。
// 转到初始值设定项---->
{
Console.WriteLine("static B()");
}

static void Main() //① 程序入口,
// 如果类中包含用来开始执行的 Main 方法,
// 该类的静态构造函数将在调用 Main 方法之前执行。
// 转到B的静态构造函数---->
{
Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
Console.ReadLine();
}
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
什么时候用静态类,什么时候用非静态类,有什么区别意义?
我的理解:
静态类:当系统中有公共类的时候,可以把这个公共类声明为静态类,静态类成员直接用类调用,在调用时执行静态构造函数,此时得到一个实例。我猜静态类应该是在程序结束后销毁吧(明天看怎么测试下),如果正如我猜想的那样,那么好处就是这个程序从始至终都只有一个实例。
非静态类:当系统中需要用到该类的多个实例时,就使用非静态类。好处是多个实例之间互不影响。
从字面意义的理解,静态:静止的状态,不会产生变化,所以只有一个实例。非静态(又称实体类):非静止的状态,会产生变化,所以可能会有多个实例。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
静态类从程序一启动就会一直占用内存,而非静态类只在使用时才会占用内存(需要实例化);经常使用的用静态类,否则用非静态类。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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