请问C#中静态方法和非静态方法的主要区别又在哪里呢?

  • 静态方法:可b9ee7ad6261以直接通过类名.方法名访问。(有静态方法的类,必须声明为静态类)

    非静态方法:需要通过创建对象来访问方法。

    静态方法:只可以访问静态成员(静态变量和静态方法)。

    非静态方法:既可以访问实例也可以访问静态。

    3、静态方法和静态类是随着类的加载而加载的。并且只加载一次。

    可以看出访问静态方法直接是类名.方法名就可以了。访问非静态方法必须要创建实例对象。

  • 自己写的java中静态与非静态区别 对二者的用法进行了比较说明。java中关于静态的用法C系列还是有区别

  • 静态变量:由static修饰,JVM静态变量的加载顺序对象之前,因此静态变量不依附于对象存在,可以不实例化类的情况下直接使用静态变量,如下代码所示。public class StaticTest {static int a

    一.静态变量跟实例变量的区别:

    1.静态变量:由static修饰,在JVM中,静态变量的加载顺序在对象之前,因此静态变量不依附于对象存在,可以在不实例化类的情况下直接使用静态变量,如下代码所示。

    静态变量属于类,不属于类中任何一个对象,因此静态变量又叫做类变量,一个类不管创建多少个对象(对象是类的一个实例),静态变量在内存中有且仅有一个。

    2.实例变量:必须依附于对象存在,只有实例化类后才可以使用此类中的实例变量。

    二.静态方法跟实例方法的区别:

    1.静态方法:方法用static关键字修饰,静态方法与静态成员变量一样,属于类本身,在类装载的时候被装载到内存,不自动进行销毁,会一直存在于内存中,直到JVM关闭。使用时也是不需要实例化类,能够直接使用。静态方法无法被重写。

    需要注意的是:在静态方法中只能访问类中的静态成员跟静态方法,不能直接访问类中的实例变量跟实例方法,原因是静态方法在JVM中的加载顺序也在对象之前,直接使用实例变量跟实例方法的话,可能实例变量跟实例方法所依附的对象并没有被创建,会导致无法找到所使用的实例变量跟实例方法。

    要想使用实例变量跟实例方法可以采用如下方法:在静态方法中创建实例变量和实例方法所在的对象,通过这个对象来使用实例变量跟实例方法。如代码所示:

    2.实例化方法:属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。

    1.线程安全:静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发的问题。非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

    2.如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。

  • java初学者编写类,调用方法,在静态方法动态方法使用会出现的一些错误。 学习后 能初步了解自己的错误的原因 以及遇到这种错误的改正方法 避免下次踩坑

  • 非静态代码则类的使用阶段(也是实例化一个类的时候)才会被初始化。  静态变量  可以将静态变量理解为类变量(对象无关),而实例变量则属于一个特定的对象。  静态变量有两种情况:  ● 静态...

  • 上次有朋友问我,java中的类...我给他肯定的回答是可以的,在java中我们可以有静态实例变量、静态方法、静态块。当然类也可以是静态的,下面小编整理了些关于java中的static class相关资料分享脚本之家平台供大家参考

  • 变量为我们提供了程序可以操纵的命名存储。Java中的每个变量都有一个特定的类型,该类型确定变量的内存大小和布局。...以下是静态变量和非静态变量之间的重要区别。序号键静态的非静态1个访问A static va...

    变量为我们提供了程序可以操纵的命名存储。Java中的每个变量都有一个特定的类型,该类型确定变量的内存大小和布局。可以存储在该内存中的值的范围;以及可以应用于该变量的一组操作。

    静态变量也称为类变量,在类的对象之间通用,并且也可以使用类名来访问此变量。

    非静态类的任何变量称为非静态变量或实例变量。

    静态与非静态变量的示例

  • 静态/非静态 方法/变量的写法 大家应该都明白静态方法/字段比普通方法/字段的写法要多一个static关键字,简单写下他们的写法吧,了解的可以直接略过 class Test{ // 静态变量 public static int id = 1; // 普通...

  • java中 静态方法与非静态方法的区别 ** 前言 静态方法与非静态方法最主要区别就是使用static修饰,而非静态方法是不加static修饰方法的,定义没有占内存,只有被实例化成对象时,对象调用该方法才...

    静态方法与非静态方法最主要区别就是在类中使用static修饰,而非静态方法是不加static修饰方法的,在类中定义没有占内存,只有在类中被实例化成对象时,对象调用该方法才被分配内存。

    其次,静态方法中只能调用静态成员或者方法,不能调用非静态方法或者非静态成员,而非静态方法既可以调用静态成员或者方法又可以调用其他的非静态成员或者方法。总的来说非静态方法啥都可以调用。

    注意main方法一定是static方法!!

    
     
    

    1.解决办法:将这个非静态方法用static变成静态方法调用

    2.解决办法:是静态方法调用非静态时要实例化才能被静态方法调用

  • java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类 。内部类仍然是一个独立的类,编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。package static_neibulei_yu_fei...

  • 主要介绍了java synchronized同步静态方法和同步非静态方法的异同的相关资料,需要的朋友可以参考下

  • 主要介绍了Java静态非静态成员变量初始化过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  • 首先static的成员是类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而static的成员是建立对象的时候,即new 操做的时候才初始化的;函数前后顺序是先加载,才能初始化,那么加载的时候初始...

  • 首先static的成员是类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而static的成员是创建对象的时候,即new 操作的时候才初始化的;先后顺序是先加载,才能初始化,那么加载的时候初始化...

  • 2.此相对的,在非静态方法却可以直接调用所在类的所有静态方法和非静态方法。以下提出自己的一些理解,小生是java新手,望诸位路过的大侠不要取笑,也希望各位批评指正。一、问题的提出源程序thinking in java中...

  • 一、相同点:静态类和非静态C#定义基本是一样的,只是静态类定义需要加上static修饰符而已。二、生命周期:静态方法(Static Method)静态成员变量一样,属于类本身,类装载的时候被装载到内存(Memory),不...

  • Java中的类将具有三种变量,即静态(类),实例和局部变量。局部变量-这些变量属于方法/块/构造函数并其中声明/定义。这些变量的范围位于方法(或块或构造函数)内,执行后将被销毁。实例变量-这些变量属于类的实例...

  • 还是老生常谈JVM内存模型的问题,也是我一直深究(浅显)的问题,这里我们...栈:其实每个线程都会分配一个栈,其生命周期线程一样,其执行一个方法就会生成一个栈帧,其中栈帧真包含了方法的局部变量. 堆:所有类的实...

  • 非静态方法定义没有占内存,只有被实例化成对象时,对象调用该方法才被分配内存。 2.调用 静态方法不能调用非静态方法或者非静态成员,而非静态方法则没有限制。 调用格式: 类名 . 静态方法() ...

  • * 非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果;  静态方法属于类,是不能被重写,故而也不能实现多态。 *  下面是具体的验证过程  首先,定义一个超类A,里边定义一个静态方法和一个...

}
静态方法和非静态方法的区别总结如下:

静态方法属于类所有,类实例化前即可使用。也就是不需要new一个对象就可以使用该对象的方法。比如object::fun1()这样的格式;

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

因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存;

static内部只能出现static变量和其他static方法(即静态方法不能调用非静态属性 。也不能使用self::调用非静态属性)!而且static方法中还不能使用this等关键字,因为它是属于整个类。静态方法内部调用其他静态方法,可以使用self::方法名称的形式来实现;

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

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

静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。
静态方法与实例方法在性能和占用内存上没有明显的区别,是否声明为静态方法需要从类型的非静态字段、事件、面向对象扩展和多态这三方面来考虑。

总结:静态的是不论实例化多少次结果最终只有一个,而动态的每次结果都不一样。

0

0

}


1.进程和线程的差别。

线程是指进程内的一个执行单元,也是进程内的可调度实体.
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。


6.C/C++编译器中虚表是如何完成的?

7.谈谈COM的线程模型。然后讨论进程内/外组件的差别。

8.谈谈IA32下的分页机制

小页(4K)两级分页模式,大页(4M)一级


9.给两个变量,如何找出一个带环单链表中是什么地方出现环的?

一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方   ??


10.在IA32中一共有多少种办法从用户态跳到内核态?


11.如果只想让程序有一个实例运行,不能运行两个。像winamp一样,只能开一个窗口,怎样实现?


用内存映射或全局原子(互斥变量)、查找窗口句柄..
FindWindow,互斥,写标志到文件或注册表,共享内存。. 


12.如何截取键盘的响应,让所有的‘a’变成‘b’?


13.Apartment在COM中有什么用?为什么要引入?

14.存储过程是什么?有什么用?有什么优点?

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程用于实现频繁使用的查询、业务规则、被其他过程使用的公共例行程序

存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快

15.Template有什么特点?什么时候用?

今天群硕笔试,考了好多内容,其中Java占很大部分!

本试卷中最有难度的编程题:给定一个数组,这个数组中既有正数又有负数,找出这个数组中的子数组,此子数组的和最大!

#include<的区别(假期做项目的时候碰到过,嘿嘿)
logic thinking:检测电冰箱(我用软件工程的思想随便写写)

答案:实际上除了“能够让应用程序处理存储于DBMS 中的数据“这一基本相似点外,两者没有太多共同之处。但是ADO 使用OLE DB 接口并基于微软的COM 技术,而 接口并且基于微软的.NET 体系架构。众所周知.NET 体系不同于COM 体系, 和ADO是两种数据访问方式。,看起来好像这些概念都广泛被PHP开发人员所了解。这就说明了PHP实际上到底是多专业。

  对于非常小的项目,它可以是一个十分符合人意的编程语言。但是对于较大的和更为复杂的项目,PHP就显出他的薄弱了。当你不断地摸索之后,你会发现笔者提到的某些问题的解决方案。所以,当解决方案已知之后,为什么不能修正他呢?另外为什么这些修补不在手册中提到呢?

  一个开源的语言十分流行是一件好事。但不幸得是,它不是一个伟大的语言。笔者希望所有的问题能有一天得到解决(也许在PHP6?),然后我们就将拥有一个开源语言,他既开源,又好用。

三、编程题:30分 共1题
注意:要求提供完整代码,如果可以编译运行酌情加分。

输入:两个已排序的整型数组(int a[m], b[n])

四、设计题:35分 共1题
注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。
1.    考虑一个字符串替换的过程,在一个文本文件中含有一些文本内容和一些需要替换的变量,变量的格式为“$Var$”,原来的“$”使用“$$”进行转义,原来的“$$”表示为“$$$”。我们将含有变量的文件称为模板(文件名为t),文本文件的平均长度为100K。另外,还有一系列的变量文件,里面为变量名和变量值的对应关系(文件名为1.v , 2.v…

百度11月4日网上笔试题及答案(仅供参考)
1用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
函数的功能是拷贝src所指的内存内容前n个字节
到dest所指的地址上。

在用户输入英文单词时,经常发生错误,我们需要对其进行纠错。假设已经有一个包
含了正确英文单词的词典,请你设计一个拼写纠错
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度;
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。

搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串
的长度为1-255字节。假设目前有一千万个记录,
这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个
。一个查询串的重复度越高,说明查询它的用户越多,
也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度。

字典以字母键树组织,在用户输入同时匹配

a)若可以顺利下行,则继续至结束,给出结果;
b)若该处不能匹配,纠错处理,给出拼写建议,继续至a);
字典采用27叉树组织,每个节点对应一个字母,查找就是一个字母
一个字母匹配.算法时间就是单词的长度k.
情况:当输入的最后一个字母不能匹配时就提示出错,简化出错处理,动态提示
(a)当前字母前缺少了一个字母:搜索树上两层到当前的匹配作为建议;
(b)当前字母拼写错误:当前字母的键盘相邻作为提示;(只是简单的描述,可
根据分析字典特征和用户单词已输入部分选择(a),(b)处理

复杂性分析:影响算法的效率主要是字典的实现与纠错处理
(a)字典的实现已有成熟的算法,改进不大,也不会成为瓶颈;
(b)纠错策略要简单有效 ,如前述情况,是线性复杂度;
策略选择最是重要,可以采用统计学习的方法改进。

首先逐次读入查询串,算哈希值,保存在内存数组中,同时统计频度
(注意值与日志项对应关系)
选出前十的频度,取出对应的日志串,简单不过了。
(1)思路:先将集合按照大小排列后,优先考虑小的集合是否与大的集合有交集。有
就合并,如果小集合与所有其他集合都没有交集,则独立。独立的集合在下一轮的比
较中不用考虑。这样就可以尽量减少字符串的比较次数。当所有集合都独立的时候,
1.将集合按照大小排序,组成集合合并待处理列表
2.选择最小的集合,找出与之有交集的集合,
如果无,则与其它集合是独立集合,从待处理列表 中删除。
3.重复直到待处理列表为空

1。将集合按照大小从小到大排序,组成待处理的集合列表。
2。取出待处理集合列表中最小的集合,对于集合的每个元素,依次在其他集合中搜索
1>若存在,则将此小集合与大集合合并,并根据大小插入对应的位置 。转3
2>若不存在,则在该集合中取下一个元素。如果无下一个元素,即所有元素
都不存在于其他集合。则表明此集合独立,从待处理集合列表中删除。并加入结果集
3。如果待处理集合列表不为空,转2。
如果待处理集合列表为空,成功退出,则结果集合列表就是最终的输出。
假设集合的个数为n,最大的集合元素为m
排序的时间复杂度可以达到n*log(n)
然后对于元素在其他集合中查找,最坏情况下为(n-1)*m
查找一个集合是否与其他集合有交集的最坏情况是m*m*(n-1)
合并的时间复杂度不会超过查找集合有交集的最坏情况。
所以最终最坏时间复杂度为O(m*m*n*n)
需要说明的是:此算法的平均时间复杂度会很低,因为无论是查找还是合并,都是处
于最坏情况的概率很小,而且排序后优先用最小集合作为判断是否独立的对象,优先
与最大的集合进行比较,这些都最大的回避了最坏情况。
首先可以实现将每个集合里面的字符串按照字典序进行排列,这样就可以将查找以及
另外,可能采取恰当的数据结构也可以将查找以及合并等操作的效率得到提高

1 用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。

    也就是说,类ClxDerived的析构函数根本没有被调用!一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。我想所有的C++程序员都知道这样的危险性。当然,如果在析构函数中做了其他工作的话,那你的所有努力也都是白费力气。
    所以,文章开头的那个问题的答案就是--这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

本文来自CSDN博客,转载请标明出处:

}

我要回帖

更多关于 静态字段和静态方法的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信