您的位置:

c语言非静态,c#静态非静态

本文目录一览:

C语言中非Static局部变量在什么中生成?

局部变量,一般都是在函数体当中的定义,当程序执行到这个函数体的时候,也就是进入到这个函数体的作用域范围,win32操作系统对于局部变量是使用时候才申请空间,程序退出局部变量的作用域范围以后,这个局部变量就失去意义,对于这样的局部变量,系统都是在栈中给予分配空间的,

所以:而非Static局部变

量在__________________________中生成? as:栈

静态方法和非静态方法的区别是什么

一、相同点:

静态类和非静态类在C#中定义基本是一样的,只是静态类定义需要加上static修饰符而已。

二、生命周期:

静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。

非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM回收之后,也跟着消失。

三、效率:

静态方法的使用效率比非静态方法的效率高。

按照上面的概念,只要内存够用,都可以使用静态的。

四、线程安全:

静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。

非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

五、静态成员与非静态成员比较:

1、静态成员属于类所有,非静态成员属于类的实例所有。

2、每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。

六、使用不同:

1、静态方法属于类所有,类实例化前即可使用。

2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!

4、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。

5、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.

C语言中全局变量可以是非静态变量吗

在C语言中,全局变量可以是非静态变量的。

原因如下:

静态变量的关键static对局部变量和全局变量的作用不一样。

对于局部变量来说,用static修饰时,该变量在函数调用后的值一直保持上次的结果。

对于全局变量来说,用static修饰的全局变量表示这个全局变量只能在当前这个全局变量定义的文件内使用;如果没有static修饰,表示这个文件定义的全局变量也可以被其它文件调用。

举例如下:

#includestdio.h

static int a;  // 定义一个静态的全局变量,只能在本文件中引用

int b;  // 定义一个非静态的全局变量,在同一工程下的其他文件也可引用(需用extern关键字声明)

void main()

{

    a = 2;

    b = 4;

    printf("%d%d", a, b);

}

C语言调用C++非静态成员函数

不管是不是静态的,都不能直接调用

而是要加一层C++的封装。

而且封装的函数,必须加extern "C"才可以。

在C语言中,什么叫做非静态成员函数

#include iostream.h

class ok

{

int a;

static int s;//声明静态数据成员

public:

ok(int a);

static void show();//声明静态成员函数

};

int ok::s=0;//定义并初始化静态数据成员

ok::ok(int a)

{

this-a=a;

s+=a; //非静态成员函数可以访问静态数据成员

}

void ok::show() //静态成员函数的实现

{

//coutaendl; //错误代码,a是非静态数据成员

cout"s="sendl;

}

void main()

{

ok cat(2);

cat.show();

ok dog(3);

dog.show();

ok::show();

}

/*------------------------------------------------------------

○静态成员之间可以相互访问,如静态成员函数访问静态数据成员和静态成员函数;

○静态成员函数没有this指针。无法访问属于类对象的非静态数据成员和非静态成员函数,

○非静态成员函数可以访问静态成员函数和静态数据成员;

○静态成员函数不能访问非静态成员函数和非静态数据成员;

○由于没有this指针的额外开销,因此静态成员函数与类的非静态函数相比速度上会有少许的增长;

○非静态成员函数总是具体的属于某个类的具体对象,this是缺省的;

-------------------------------------------------------------*/

c#中静态栏位与非静态栏位有什么区别

c#中静态栏位与非静态栏位有什么区别 c#中静态栏位和非静态栏位以static标识区分,主要区别是静态栏位可以直接以类名.栏位名方式使用,而非静态栏位必须建立类例项才可以使用,示例如下:

class Program{ static void Main(string[] args) { Console.WriteLine(test.v1); Console.WriteLine((new test()).v2); }}class test{ public static string v1 { get { return "v1"; } } public string v2 { get { return "v2"; } }}

另外,静态栏位在装载程式集的时候就分配记忆体空间,而非静态栏位要在例项初化时候才分配记忆体空间。

java中,静态栏位和例项栏位有什么区别

静态方法和例项方法的区别主要体现在两个方面:

在外部呼叫静态方法时,可以使用"类名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例项方法只有后面这种方式。也就是说,呼叫静态方法可以无需建立物件。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变数和静态方法),而不允许访问例项成员变数和例项方法;例项方法则无此限制。

具体来说:

一、例项栏位要例项化才能使用,没有例项化不能使用。静态栏位反之。如:

name栏位的使用:

cla1 i = new cla1();

i.name = "张三";

sex栏位的使用:

cla1.sex = "男";

二、普通栏位要在例项化时候才分配记忆体空间,而静态栏位在装载程式集的时候就分配记忆体空间了。

java静态方法与非静态方法有什么区别

静态方法和例项方法的区别主要体现在两个方面:

在外部呼叫静态方法时,可以使用"类名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例项方法只有后面这种方式。也就是说,呼叫静态方法可以无需建立物件。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变数和静态方法),而不允许访问例项成员变数和例项方法;例项方法则无此限制。

下面几个例子展示了这一区别。

1、呼叫静态方法示例。

-----------档名hasStaticMethod.java,程式编号1-----------------public class hasStaticMethod{定义一个静态方法public static void callMe(){System.out.println("This is a static method.");}}

下面这个程式使用两种形式来呼叫静态方法。

-----------档名invokeStaticMethod.java,2-----------------

public class invokeStaticMethod{public static void main(String args[]){hasStaticMethod.callMe(); 不建立物件,直接呼叫静态方法 hasStaticMethod oa = new hasStaticMethod(); 建立一个物件oa.callMe(); 利用物件来呼叫静态方法}} 程式3.36两次呼叫静态方法,都是允许的,程式的输出如下:

This is a static method.This is a static method.

允许不建立物件而呼叫静态方法,是Java为了减少程式设计师呼叫某些常用方法时的麻烦,而允许程式设计师按照传统的C语言中使用函式的方式来使用方法。典型的例子是前面某些程式中使用"Math.ramdon()"来获取随机数。

2、静态方法访问成员变数示例。

-----------档名aessMember.java,程式编号3.37-----------------class aessMember{private static int sa; 定义一个静态成员变数private int ia; 定义一个例项成员变数下面定义一个静态方法static void statMethod(){int i = 0; 正确,可以有自己的区域性变数sa = 10; 正确,静态方法可以使用静态变数otherStat(); 正确,可以呼叫静态方法ia = 20; 错误,不能使用例项变数insMethod(); 错误,不能呼叫例项方法}static void otherStat(){} 下面定义一个例项方法 void insMethod(){int i = 0; 正确,可以有自己的区域性变数sa = 15; 正确,可以使用静态变数ia = 30; 正确,可以使用例项变数statMethod(); 正确,可以呼叫静态方法}}

本例其实可以概括成一句话:静态方法只能访问静态成员,例项方法可以访问静态和例项成员。之所以不允许静态方法访问例项成员变数,是因为例项成员变数是属于某个物件的,而静态方法在执行时,并不一定存在物件。同样,因为例项方法可以访问例项成员变数,如果允许静态方法呼叫例项方法,将间接地允许它使用例项成员变数,所以它也不能呼叫例项方法。基于同样的道理,静态方法中也不能使用关键字this。

main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在建立物件之前就呼叫。

首先,两者本质上的区别是:静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用记忆体,只有在类被例项化成物件时,物件呼叫该方法才被分配记忆体。

其次,静态方法中只能呼叫静态成员或者方法,不能呼叫非静态方法或者非静态成员,而非静态方法既可以呼叫静态成员或者方法又可以呼叫其他的非静态成员或者方法。

静态方法可以直接用类名点出来方法,而普通方法需要建立类的物件后才能呼叫! 静态的方法和变数会呼叫时在记忆体生成一个唯一的标示,你可以理解成在实体记忆体中给静态一个位子,这样的话在呼叫的时候可以直接找到,而且会节省记忆体,但是如果你宣告的静态过多的话那么每一个都会在记忆体有一个位子,那么你就没有资源执行别的,会报记忆体溢位! 普通方法是由java的gc机制(垃圾回收机制)来控制,可能同一个物件或变数在使用的过程中,这个时间的在记忆体占了一个位子,而上个时间的还没有从记忆体中删除,这样的话就可能有2个一样的在记忆体中,这个2个一样东西只是内容值一样,但是记忆体值不一样,你可以用"=="和"equals"来检视(这个只适用物件和String型别).java的gc机制会根据执行时的记忆体状态来自动清除一些用不到变数或物件,就算你手动呼叫gc也是一样的!

静态方法在建立物件前就可以使用了,非静态方法必须通过new出来的物件呼叫。

如:

public class Per{

public static String getType(){

return "人类";

}

public String getName(){

return "张三";

}

}

上面这个类中的getType方法,在没有new物件前这就可以这样用:

String type=Per.getType();type="人类";

而getName方法则不能这样使用,编译都不会通过

getName必须这样:

Per p=new Per();

String name=p.getName();name="张三";

当然,getType方法也可能通过物件呼叫:

String type=p.getType();type="人类";

综上所述:

静态方法是在建立例项之前就存在了,而非静态方法是在建立物件之后才有的。

静态方法可以直接用类名点出来方法,而普通方法需要建立类的物件后才能呼叫!

静态的方法和变数会呼叫时在记忆体生成一个唯一的标示,你可以理解成在实体记忆体中给静态一个位子,这样的话在呼叫的时候可以直接找到,而且会节省记忆体,但是如果你宣告的静态过多的话那么每一个都会在记忆体有一个位子,那么你就没有资源执行别的,会报记忆体溢位!

普通方法是由java的gc机制来控制,可能同一个物件或变数在使用的过程中,这个时间的在记忆体占了一个位子,而上个时间的还没有从记忆体中删除,这样的话就可能有2个一样的在记忆体中,这个2个一样东西只是内容值一样,但是记忆体值不一样,你可以用"=="和"equals"来检视(这个只适用物件和String型别).java的gc机制会根据执行时的记忆体状态来自动清除一些用不到变数或物件,就算你手动呼叫gc也是一样的!

java静态与非静态区别

静态方法和例项方法的区别主要体现在两个方面:

在外部呼叫静态方法时,可以使用"类名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例项方法只有后面这种方式。也就是说,呼叫静态方法可以无需建立物件。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变数和静态方法),而不允许访问例项成员变数和例项方法;例项方法则无此限制。

c#静态方法与非静态方法有啥区别

静态方法,也称为类方法。其特点是:不需要例项化类就可以呼叫

非静态方法,也成例项方法,其特点是:先例项化类,然后通过例项呼叫

class MyClass{ 静态方法 public static void SomeStaticMethod() { …… } 非静态方法 public void SomeMethod() { …… }} 呼叫静态方法: 通过 类.静态方法 格式呼叫MyClass.SomeStaticMethod( );************************************************ 对于非静态方法MyClass c = new MyClass();c.SomeMethod(); 非静态方法必须通过例项来呼叫