
对于运行以及效率是没有多大区别的,但是对于有追求的程序员是有很大区别的。
实例方法必须在实例化一个具体对象之后才能访问,为了封装性,对象的成员变量不允许外部程序访问,只允许实例方法访问,也就是做代码访问权限隔离。这种机制对于面向对象思想指导下编程是必须的也是标准。
但是我们往往有时候需要做一些数据处理,而这些处理即属于某个类但又具有通用性,而往往又具有一定代码量(需要封装在一个方法/函数内),并且其处理的数据与类中其他成员变量毫无关系。
此种情况下把方法封装在某个类时很麻烦,会存在几个问题:
1、被处理数据与该类业务逻辑完全无关却封装在类中很奇怪,对于整体架构造成破坏(会导致逻辑松散)。
2、创建对象过程过于冗长(因为外部程序很多不同地方都会经常调用,太累赘,有强迫症的人还要注意每次设置为null)
3、代码不美观可读性差(代码多了容易视觉繁杂)
举个例子,假如你在开发一个数据库系统,设计了一个类,专门处理数据库日期时间的存取以及显示转换(比如按指定格式输出),现在假设其中封装了一个检查日期有效性的公共方法,该方法一方面服务于类成员,另一方面,在很多场合,比如通过用户界面接受用户输入日期时也要校验,此时我们希望先进行校验,如果数据有效(包括其他数据)再创建数据对象把数据传递下去(因为创建对象有消耗),这时候希望不实例化的情况下调用类方法,这就是静态方法的需求场景之一。
假设这个自定义日期类为MyDate,下面是伪代码,
Date d;
d=GetUIDate();//取得界面日期数据
if (MyDateIsValid(d)) //直接使用类名访问静态方法 ,无需事先定义对象名和new
{
//其他处理代码
}
静态变量只能定义在类的内部,不可以定义在静态块或方法中 可以在类内部定义静态变量,在静态块中进行初始化 *** 作,因为类的内部是不允许有 *** 作语句存在的,比如JDBC *** 作,所以可以在静态块static{} 中进行初始化 *** 作,如:JDBC 定义静态变量主要是为了供外部访问,定义在一个局部中外部没有权限访问,为什么要定义呢,而且不能定义
(静态变量又称类变量,静态方法又称类方法)。
静态变量和实例变量的区别?
1、静态变量用static 关键字修饰,实例变量不需要。
2、静态变量,属于类所有,只要程序加载了,静态变量就会被分配空间,就可以直接使用。
实例变量是对象的属性,只有实例化对象之后,才会被分配空间,才能使用。(即需要new一个才能使用)
3、类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
例子:
public class StaticClass {
static int i=5;//静态变量
int j=5;//实例变量
public static void main(String[] args) {
Systemoutprintln(StaticClassi);//可以直接引用 i
StaticClass sc=new StaticClass();//必须实例化之后,才能引用 j
Systemoutprintln(scj);
}
}
你应该是先运行的A类,再运行的B类吧。这样运行A类和B类的进程是两个进程,因为是不同的进程,A类里的变量赋值是影响不到B类的。
你把
A a = new A();
arun();
这两行代码加到B类的main方法里,再运行B类就可以了
静态变量是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。
对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。
而在以Pascal为代表的许多程序语言中,所有局部变量都由系统自动分配存储空间,而所有全局变量的存储空间则以静态分配的方式获取,因此由于实际上“局部变量”和“全局变量”这两个术语已足以涵盖所有的情况,在这些程序语言中通常不使用“静态变量”这一术语,而直接以“全局变量”代之。
在这些程序语言中,静态变量就是全局变量,而即使在有明确区分全局和静态变量的程序语言中,在编译后的代码里二者也以相同的方式获取存储空间。而今术语“静态变量”的概念则主要基于C族语言的“static”的定义。
静态变量也可以用于存储常数。具体来说,静态变量可用const,constant或final等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区
以上就是关于C#里面静态方法和静态变量的一点问题全部的内容,包括:C#里面静态方法和静态变量的一点问题、如何调用静态代码块中的变量、静态变量与实例变量的理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)