文档库 最新最全的文档下载
当前位置:文档库 › static函数的申明

static函数的申明

static函数的申明
static函数的申明

static 声明的变量在C语言中有两方面的特征:

1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。

2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。Tips:

A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;

B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;

D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)

E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static

的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

全局变量、静态全局变量、静态局部变量和局部变量的区别变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。

按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。

按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

class s1 {

static void func();

int i;

};

void s1::func()

{

i = 1; // error C2597 here

}

如上面的表达式,若func为static过程时,此时里面的变量必须是全局的或者是静态变量,若是一个类的变量的话运用会报错

class s1 {

static void func();

static int i;

};

int s1::i=0; 初始化

void s1::func()

{

i = 1; // 错误取消

}

ADAMS常见问题

ADAMS 使用常见问题 1、ADAMS中的单位的问题 开始的时候需要为模型设置单位。在所有的预置单位系统中,时间单位就是秒,角度就是度。可设置: MMKS--设置长度为毫米,质量为千克,力为牛顿。 MKS—设置长度为米,质量为千克,力为牛顿。 CGS—设置长度为厘米,质量为克,力为达因。 IPS—设置长度为英寸,质量为斯勒格(slug),力为磅。 2、如何永久改变ADAMS的启动路径? 在ADAMS启动后,每次更改路径很费时,我们习惯将自己的文件存在某一文件夹下;事实上,在Adams的快捷方式上右击鼠标,选属性,再在起始位置上输入您想要得路径就可以了。 3、关于ADAMS的坐标系的问题。 当第一次启动ADAMs/View时,在窗口的左下角显示了一个三视坐标轴。该坐标轴为模型数据库的全局坐标系。缺省情况下,ADAMS/View用笛卡儿坐标系作为全局坐标系。ADAMS/View将全局坐标系固定在地面上。 当创建零件时,ADAMS/View给每个零件分配一个坐标系,也就就是局部坐标系。零件的局部坐标系随着零件一起移动。局部坐标系可以方便地定义物体的位置,ADAMS/View也可返回如零件的位置——零件局部坐标系相对于全局坐标系的位移的仿真结果。局部坐标系使得对物体上的几何体与点的描述比较方便。物体坐标系不太容易理解。您可以自己建一个part,通过移动它的位置来体会。 4、关于物体的位置与方向的修改 可以有两种途径修改物体的位置与方向,一种就是修改物体的局部坐标系的位置,也就就是通过MODIFY物体的position属性;令一种方法就就是修改物体在局部坐标系中的位置,可以通过修改控制物体的关键点来实现。我感觉这两种方法的结果就是不同的,但就是对于仿真过程来说,物体的位置就就是质心的位置,所以对于仿真就是一样的。 5、关于ADAMS中方向的描述。 对于初学的人来说,方向的描述不太容易理解。之前我们都就是用方向余弦之类的量来描述方向的。在ADAMS中,为了求解方程就是计算的方便,使用欧拉角来描述方向。就就是用绕坐标轴转过的角度来定义。旋转的旋转轴可以自己定义,默认使用313,也就就是先绕z轴,再绕x轴,再绕z轴。 6、Marker点与Pointer点区别 Marker:具有方向性, 大部分情況都就是伴随物件自动产生的,而 Point不具有方向性, 都就是用户自己建立的;Marker点可以用来定义构件的几何形状与方向,定义约束与运动的方向等,而Point点常用来作为参数化的参考点,若构件与参考点相连,当修改参考点的位置时,其所关联的物体也会一起移动或改变。

ADAMS教程:手把手教你为motion添加STEP函数(附:STEP函数全解析)

ADAMS教程:手把手教你为motion添加STEP函数(附:STEP函数全 解析) 搜人鱼不如授之以渔 手把手教你为motion添加STEP函数 1 如何找到电机 单击屏幕右下角的i按钮 双击展开模型名(如:robot_new) 找到电机motion 双击其中一个 单击Modify 再点击Function(time)右面的按钮 就打开了电机控制函数的编辑器 从左下角的函数编辑栏中双击你要的函数,就可以添加到上方的编辑栏中, 但是,切记,两个STEP函数中间要添加符号+ 2 接下来,解释STEP函数

STEP是递加递减函数(确切的说不应该这么解释,递加递减方便理解,姑且这么解释吧) STEP(time, 1, 0d, 3, 10d) 其上五个变量中,第一个(time)是横坐标定义;第二个(1)是时间起点(就是说,你要他什么时候开始递加递减;现在定义为1秒);第四个(3)是时间终点(你要他什么时候结束递加递减);第三个(0d)为递加递减数值的起点(切记,其值必须为0d,所以,不必修改);第五个(10d)为相对于0点的递加递减数值,这个是你可以自行修改的; 举个例子 STEP(time,1,0d,2,20d)+STEP(time,6,0d,12,-40) 意义:一秒到2秒:从0递增至20; 2秒到6秒:保持电机输出数值为20不变; 6秒到12秒:由20递减40,结果为-20。 所以,有两个特性必须记住:1,除非输入新的STEP,否则,上一个S TEP的渐变结果将在接下来的时间里,一直保持。 2,每个STEP只能从0开始渐变,所以,每一次的STEP都是相对于上一次操作结果的累加计算。 仔细研习以上例子,这次,由你来添加,想实现可变化动作的话,自己定义吧 随文附word彩版(有图有真相,哈哈哈)

C++中static的作用

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量 void main() { n=20; cout<

java static 的使用方法

类方法 方法被声明为static后,则称为类方法。类方法相对于实例方法,前者区别于后者的地方:前者为属于该类的所有实例对象共享,无须实例化对象,仅通过类名即可访问(当然,是否能够直接访问,还取决于所声明的访问权限)。 因为被static化后产生上述特殊性,所以static变量都会在类被加载时初始化,而类方法也同时随类加载而进驻内存。先来段代码热热身吧~ 上段代码,输出结果为: null A Class 由结果可知,即字符串prvateStr的值为空。嘿,可别认为值应该是下面那样啊。那样 的话,进行下去就太具挑战性了。 A Class A Class 请记住一点,类变量初始化的顺序与其在类中的赋值顺序一致。

重写(覆盖) 或许大家对于面向对象编程语言最初的印象就是其语言单元是以父类、子类的关系存在着,而构建这一关系的就是继承机制了。子类可以继承父类一切非private的变量与方法,并且可以添加自己的变量与方法。在构建一个系统时,这机制让我们强烈地感觉到编程是一 门优雅的艺术。 来段小小的代码简单地展示下: 结果如下: Jack I am a thinking animal, and a Programmer

如上,子类Programmer中并没定义字符串characteristic,但我们却在其方法printProfession()中调用了;同样,我们正常使用了父类定义的printName()方法。而这就 是继承的简单实现。 继承不仅仅带来以上特性。它还赋予子类重写(覆盖)父类方法的能力(因为旨在讲类方法的重写,所以这儿就不讲重载以及变量在继承机制中的问题了)。方法的重写(覆盖):继承父类的子类,可以通过拟具有相同方法名与参数组的方法来重写父类中对应的方法,从而让子类更个性化。又因为重写(覆盖)的出现,多态也随之产生。多态:通过父类变量可以引用其子类对象,从而调用子类中那些继承自自己并被重写(覆盖)的方法。

ADAMS中的函数

ADAMS/View中系统提供的数学函数大致分类介绍如下。 (1)基本数学函数 ABS(x) 数字表达式x的绝对值 DIM(x1,x2) x1>x2时x1与x2之间的差值,x1<x2时返回0 EXP(x) 数字表达式x的指数值 LOG(x) 数字表达式x的自然对数值 LOG10(x) 数字表达式x的以10为底的对数值 MAG(x,y,z) 向量[x,y,z]求模 MOD(x1,x2) 数字表达式x1对另一个数字表达式x2取余数 RAND(x) 返回0到1之间的随机数 SIGN(x1,x2) 符号函数,当x2>0时返回ABS(x),当x2<0时返回-ABS(x) SQRT(x) 数字表达式x的平方根值 (2)三角函数 SIN(x) 数字表达式x的正弦值 SINH(x) 数字表达式x的双曲正弦值 COS(x) 数字表达式x的余弦值 COSH(x) 数字表达式x的双曲余弦值 TAN(x) 数字表达式x的正切值 TANH(x) 数字表达式x的双曲正切值 ASIN(x) 数字表达式x的反正弦值 ACOS(x) 数字表达式x的反余弦值 ATAN(x) 数字表达式x的反正切值 ATAN2(x1,x2) 两个数字表达式x1,x2的四象限反正切值

(3)取整函数 INT(x) 数字表达式x取整 AINT(x) 数字表达式x向绝对值小的方向取整 ANINT(x) 数字表达式x向绝对值大的方向取整 CEIL(x) 数字表达式x向正无穷的方向取整 FLOOR(x) 数字表达式x向负无穷的方向取整 NINT(x) 最接近数字表达式x的整数值 RTOI(x) 返回数字表达式x的整数部分 位置/方向函数位置/方向函数用于根据不同输入变量计算有关位置或方向的参数。ADAMS/View中系统提供的位置/方向函数分类介绍如下。 (1)位置函数 LOC_ALONG_LINE 返回两点连线上与第一点距离为指定值的点 LOC_CYLINDRICAL 将圆柱坐标系下坐标值转化为笛卡儿坐标系下坐标值 LOC_FRAME_MIRROR 返回指定点关于指定坐标系下平面的对称点 LOC_GLOBAL 返回参考坐标系下的点在全局坐标系下的坐标值 LOC_INLINE 将一个参考坐标系下的坐标值转化为另一参考坐标系下的坐标值并归一化 LOC_LOC 将一个参考坐标系下的坐标值转化为另一参考坐标系下的坐标值

static变量三个作用

static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern variable must be declared before use printf("%c ", a); (void)msg(); return 0; } 程序的运行结果是: A Hello 你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a

是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。 如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。 (2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。 #include int fun(void){ static int count = 10; // 事实上此赋值语句从来没有执行过 return count--; } int count = 1; int main(void) { printf("global\t\tlocal static\n"); for(; count <= 10; ++count) printf("%d\t\t%d\n", count, fun()); return 0; }

adams常用函数

1.step可能是最常用的: step(time,0,0,1,50)+ step(time,4,0,6,-100)+ step(tme,9,0,10,50) 函数原形STEP(A,x1,h1,x2,h2) 解释:由数组A的x值,生成区间(x1,h1)至(x2,h2)之间的阶梯曲线,返回y值的数据。 举个常用的例子。 比如STEP(time,1,0,2,100) time在adams中是个递增的变量,相当于一个数组。那么step的返回值就是随着time变化的值。 这个例子将表示在time从(1,2)的过程中,返回值将从0,100。看看例子,两个小球,一个使用step 函数设置了位移,另外一个是参考。当然,这个变化过程,adams使用了缓和的图形,从其位移图中可以看出来。step既然是个返回值,就可以使用加减法了。如上例,如果设置下面的小球的位移如下:STEP(time,1,0,2,100)+step(time,2,0,3,400)+step(time,3,0,4,-200) 2.以前用过碰撞函数,有单向和双向函数的区分,其中系统的球面等碰撞为其特例! IMPACT (Displacement Variable, Velocity Variable, Trigger for Displacement Variable, Stiffness Coefficient, Stiffness Force Exponent, Damping Coefficient, Damping Ramp-up Distance) BISTOP (Displacement Variable, Velocity Variable, Low Trigger for Displacement Variable, High Trigger for Displacement Variable, Stiffness Coefficient, Stiffness Force Exponent, Damping Coefficient, Damping Ramp-up Distance) 3.if函数 这个函数最好不要使用,他的使用会带来突变,会使运算的时候不收敛。不过应急的时候还是可以一用。 if(time-1:1,0,if(time-2:0,-1,-1)) IF(Expression1: Expression2, Expression3, Expression4) adams要计算Expression1的值: 如果他的值小于0,则执行Expression2语句,如果Expression1的值等于0,则执行Expression3语句,如果Expression1的值大于0,则执行Expression4语句 我得if语句的意思是:如果时间小于1的时候,加速度为1,如果时间为1,加速度为0,如果时间大于1小于2,则加速度为0,如果时间大于、等于2则,加速度为-1 4. 我得一个想法 就是利用sign函数构造 比较常用的是给机构加上一个与运动方向相反的作用力等等可以先测量施加力对象的运动速度,然后利用速度的变化,插入measure到sign函数里面就可以获得与运动方向相反的作用力

java中如何使用Static的变量和方法

如何使用Static的变量和方法 有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。 声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制: 1.它们仅能调用其他的static 方法。 2.它们只能访问static数据。 它们不能以任何方式引用this 或super(关键字super 与继承有关)。 如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块: // Demonstrate static variables,methods,and blocks. class UseStatic { static int a = 3; static int b; static void meth(int x) { System.out.println("x = " + x); System.out.println("a = " + a); System.out.println("b = " + b); } static { System.out.println("Static block initialized."); b = a * 4; } public static void main(String args[]) { meth(42); } } 一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。 注意:在一个static 方法中引用任何实例变量都是非法的。 下面是该程序的输出: Static block initialized. x = 42 a = 3 b = 12

ADAMS-STEP函数

在定义接触力时Normal Force有两个选项: 1、Restitution(Define a restitution-based contact); 2、Impact(Define an impact contact) 第二个选项就是利用IMPACT函数,它能方便地表达那种间歇碰撞力 (即达到某一位移值才激发的碰撞力)。 它的参数意义及力学基础: One-sided Impact (IMPACT) 1、理解:用只抗压缩的非线性的弹簧阻尼方法近似计算出单边碰撞力。 2、格式:IMPACT (Displacement Variable, Velocity Variable, Trigger for Displacement Variable, Stiffness Coefficient, Stiffness Force Exponent, Damping Coefficient, Damping Ramp-up Distance) 3、参数说明: Displacement Variable 实时位移变量值,通过DX、DY、DZ、DM等函数实时测量。 Velocity Variable 实时速度变量值,通过VX、VY、VZ、VM等函数实时测量。 Trigger for Displacement Variable 激发碰撞力的位移测量值。 Stiffness Coefficient or K 刚度系统。 Stiffness Force Exponent 非线性弹簧力指数。 Damping Coefficient or C 阻尼系数。

Damping Ramp-up Distance 当碰撞力被激发阻尼逐渐增大的位移值。 4、Impact函数的力学基理: IMPACT函数值由自变量值决定其有无: IMPACT = Off if s > so On if s <=so IMPACT函数的数学计算公式为: MAX {0, K(so - s)**e - Cv *STEP (s, so- d, 1, so ,0)} 参数说明: s ——位移变量 v ——速度变量 so——碰撞力的激发位移值 K ——刚度系数 C ——阻尼系数 D——阻尼逐渐增大的位移值

adams STEP函数

STEP函数 adams,做一个驱动,先在1秒内加速至30d/s,再匀速保持2秒,最后在3秒内减速制0d/s,用step写 格式: STEP (x, x0, h0, x1, h1) 参数说明: x―自变量,可以是时间或时间的任一函数 x0―自变量的STEP函数开始值,可以是常数或函数表达式或设计变量;x1―自变量的STEP函数结束值,可以是常数、函数表达式或设计变量 h0―STEP函数的初始值,可以是常数、设计变量或其它函数表达式 h1―STEP函数的最终值,可以是常数、设计变量或其它函数表达式 每一个叠加“+”是在前一个表达式的基础上叠加而不是一味的增加比如第二部是保持匀速所以在第一步加好的基础上增量应该是零 正确的表达式: step(time,0,0,1,30)+step(time,1,0,3,0)+step(time,3,0,6,-30) adams帮助文档中解释如下: DefinitionReturns an array of y values, on a step curve, correspondingto the x values. FormatSTEP (A, xo, ho,x1,h1) ArgumentsA An array of x values. xo

Value of x at which the step starts ramping from ho to h 1. ho Value of h when x is less than or equal to xo. x1 Value of x at which the step function reaches h 1. h1 Value of h when x is greater than or equal to h 1. ExampleThe following example steps smoothly from 0.0 to 1.0 over theinterval( 2.0, 8.0). It has tails from 0 to 2 and from 8 to 10. STEP(SERIES(0, 0.1, 100), 2.0, 0.0, 8.0, 1.0)

static变量和static函数的各自的特点

static变量和static函数的各自的特点 static变量大致分为三种用法 一、用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期. 二、用于全局变量,主要作用是限制此全局变量被其他的文件调用. 三、用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象 static 声明的变量. 在C语言中有两方面的特征: 1、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 Tips: A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重入的函数,那么,我们一定

要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

Java 中的 static 使用之静态方法

Java 中的static 使用之静态方法 与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如: 需要注意: 1、静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如: 、在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

3、静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如: ava 中的static 使用之静态初始化块 Java 中可以通过初始化块进行数据赋值。如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。 我们来看一段代码:

运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。 封装 1、概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 2、好处 a:只能通过规定的方法访问数据 b:隐藏类的实例细节,方便修改和实现。 什么是Java 中的内部类 问:什么是内部类呢? 答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。 问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!! 答:内部类的主要作用如下:

ADAMS函数简介

ADAMS/View函数及ADAMS/Solver函数的类型及建立 ADAMS/View函数包括设计函数Design-Time Functions与运行函数Run-Time Functions两种类型,函数的建立对应有表达式模式和运行模式两种。表达式模式下在设计过程中对设计函数求值,而运行模式下会在仿真过程中对运行函数进行计算更新。ADAMS/Solver函数支持ADAMS/View运行模式下的函数,在仿真过程中采用ADAMS/Solver解算时对这些函数进行计算更新。 建立表达式模式下的函数 在进行建立表达式、产生和修改需要计算的测量及建立设计函数等操作时,会采用表达式模式。 在建立表达式时,首先在接受表达式的文本框处右击,然后选择“Parameterize”再选择“Expression Euilder”,进入建立设计函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。 在产生和修改需要计算的测量时,首先在“Build”菜单中选择“Measure”,然后指向“Computed”,再选择“New”或“Modified”确定是新建还是修改,进入产生和修改需要计算的测量对话框。在该对话框中输入表达式,然后单击“OK”完成操作。 在建立设计函数时,首先在“Build”菜单中选择“Function”,然后选择“New”或“Modified”确定是新建还是修改,进入产生和修改设计函数对话框。在该对话框中输入表达式,然后单击“OK”完成操作。 建立运行模式下的函数 在进行建立运行函数、产生和修改函数型的测量等操作时,会采用运行模式。 在建立运行函数时,首先在接受表达式的文本框处右击,然后选择“Function Euilder”,进入建立运行函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。 在产生和修改函数型的测量时,首先在“Build”菜单中选择“Measure”,然后指向“Function”,再选择“New”或“Modified”确定是新建还是修改,进入产生和修改函数型的度量对话框。在该对话框中输入表达式,然后单击“OK”完成操作。 ADAMS/View设计函数 ADAMS/View设计函数在设计过程中模型定义时有效,而不需到仿真过程 中仿真分析时再进行计算更新。设计函数可用来将模型参数化以便进行优化和灵敏度分析。除了优化和设计研究,Adams/View只会在设计阶段对设计函数进行计算评估,而不是在仿真分析过程中。Adams/View evaluates design-time functions only during the design process, and not during a simulation, except for optimization and design studies.

static的作用

static像在VB,C,C++,Java中我们可以看到static最为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语 言中也是有出现的,只是有着不同的作用,对于其具体作用,读者有需要的时候是可以具体查阅的鉴 于时间问题今天我就不一一罗列了。 目录 简介 分类 static 函数内部函数和外部函数 当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。 内部函数 (又称静态函数) 如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。 定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示: static 函数类型函数名(函数参数表) {……} 关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。 外部函数 外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数: [extern] 函数类型函数名(函数参数表) {……} 调用外部函数时,需要对其进行说明: [extern] 函数类型函数名(参数类型表)[,函数名2(参数类型表2)……]; [案例]外部函数应用。 (1)文件mainf.c main() { extern void input(…),process(…),output(…); input(…); process(…); output(…); } (2)文件subf1.c …… extern void input(……) /*定义外部函数*/ {……} (3)文件subf2.c …… extern void process(……) /*定义外部函数*/ {……} (4)文件subf3.c …… extern void output(……) /*定义外部函数*/ {……} C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量

static和this的理解和用法总结

static和this的理解和用法小结 关键字static和this是初学者比较头疼的知识点,自己也一直比较模糊.现在整理一下,既可以加深自己的印象也可以便于以后查询. 其实在think in java里关于为什么要使用static写的比较详细,不明白的多读几遍会有很大的收获.一般在两钟情形下需要使用static关键字:一种情形是只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。一旦将什么东西设为static,数据或方法就不会同那个类的任何对象实例联系到一起.所以尽管从未创建那个类的一个对象,仍能调用一个static方法,或访问一些static数据。而在这之前,对于非static数据和方法,我们必须创建一个对象,并用那个对象访问数据或方法。这是由于非static数据和方法必须知道它们操作的具体对象.有这样的一个类,其中定义一个静态数据: class Test { Static int i = 47; } Test st1 = new StaticTest();Test st2 = new StaticTest();即使们new了两个Test对象,但它们仍然只占据Test.i的一个存储空间。这两个对象都共享同样的i。对方法来说,static一项重要的用途就是帮助我们在不必创建对象的前提下调用那个方法. 静态变量)一个静态对象属于一个类,但它不属于实例对象,也不是实例对象状态的一部分.每一个静态变量只存在一份.静态变量通常称为类变量(class variable).在实际中,经常需要这样的一个变量,它被一个类的所有实例对象所共享,如果它同时又是公有的,那么它就可以被这个类的任意访问者所使用.静态变量存在于类的作用域之内.通常声明为private.java中许多时候会用到public static final 这样的变量。静态变量可以被位于同一个作用域内的任意方或静态方法访问,访问时使用变量名称即可。如果在类作用域以外访问类,则要使用一个含有类名的表达式访问静态变量,例如: Integer.MAX_VALUE, 其中MAX_VALUE是在类库中声明过的。 静态方法)静态方法或类方法属于一个而不是属于某个实例对象实现的一部分。可以直接通过类来调用这种方法,而并不是只能由某个特定的实例对象调用。静态的方法不能用abstract声明,而且无论是否明确地指定实际上都是final型的。静态方法的声明格式: modifiers static typeName methodName (parameterList){ statementSequence } modifiers(可以从public,protect,private中选择一个),后面可以加上 final,nativc,synchronized中的一个或几个的组合。 static main是静态方法的一个特殊用法,用static main 方法来建立程序的初始状态,创建一组初始对象,并进行合理的方法调用,使得程序能够继续执行下去,static main方法使用String数组型参数包含了用户在运行时给出的任意命令行参数。

adams常见函数总结

ADAMS常用函数总结 在使用adams的过程中,由于函数比较多,大概有11种之多,如1、Displacement Fu nction 2、Velocity Functions 3、Acceleration Functions 4、Contact Functions 5、Spline Functions 6、Force in Object Functions 7、Resultant Force Functi ons 8、Math Functions 9、Data Element Access 10、User-Written Subroutine Invocation 11、Constants & Variables。 在adams中也有帮助文档,但是对于初学者来说还是有一定的难度的,基于这种情况我总结了一下几种常用的函数,希望能够起到抛砖引玉的作用! 1、STEP函数 格式:STEP (x, x0, h0, x1, h1) 参数说明: x―自变量,可以是时间或时间的任一函数 x0 ―自变量的STEP函数开始值,可以是常数或函数表达式或设计变量; x1 ―自变量的STEP函数结束值,可以是常数、函数表达式或设计变量 h0 ―STEP函数的初始值,可以是常数、设计变量或其它函数表达式 h1 ―STEP函数的最终值,可以是常数、设计变量或其它函数表达式 2、IF函数 格式:IF(表达式1: 表达式2, 表达式3, 表达式4) 参数说明: 表达式1-ADAMS的评估表达式; 表达式2-如果的Expression1值小于0,IF函数返回的Expression2值; 表达式3-如果表达式1的值等于0,IF函数返回表达式3的值; 表达式4-如果表达式1的值大于0,IF函数返回表达式4的值; 例如:函数IF(time-2.5:0,0.5,1) 结果:0.0 if time < 2.5 0.5 if time = 2.5 1.0 if time > 2.5 3、AKISPL函数 格式:AKISPL (First Independent Variable, Second Independent Variable,Spline Name, Derivative Order) 参数说明: First Independent Variable——spline中的第一个自变量 Second Independent Variable (可选) ——spline中的第二自变量Spline Name——数据单元spline的名称 Derivative Order (可选) ——插值点的微分阶数,一般用0就可以function = AKISPL(DX(marker_1, marker_2, marker_2), 0, spline_1) spline_1用下表中的离散数据定义 自变量x 函数值y -4.0 -3.6 -3.0 -2.5 -2.0 -1.2

static静态变量的理解

C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern variable must be declared before use printf("%c ", a); (void)msg(); return 0; } 程序的运行结果是: A Hello 你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static 前缀,因此对于另外的源文件main.c是可见的。 如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。(2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。 #include int fun(void){ static int count = 10; // 事实上此赋值语句从来没有执行过 return count--; } int count = 1; int main(void) { printf("global\t\tlocal static\n"); for(; count <= 10; ++count)

关于static的用法

关于static的用法: 在《Java编程思想》P86页有这样一段话: “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。” 这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是: 方便在没有创建对象的情况下来进行调用(方法/变量)。 很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。 static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。 1)static方法 static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。 但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。举个简单的例子:

在上面的代码中,由于print2方法是独立于对象存在的,可以直接用过类名调用。假如说可以在静态方法中访问非静态方法/变量的话,那么如果在main方法中有下面一条语句: MyObject.print2(); 此时对象都没有,str2根本就不存在,所以就会产生矛盾了。同样对于方法也是一样,由于你无法预知在print1方法中是否访问了非静态成员变量,所以也禁止在静态成员方法中访问非静态成员方法。 而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。 因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。 另外记住,即使没有显示地声明为static,类的构造器实际上也是静态方法。 2)static变量

相关文档