静态变量

存储持续性、作用域和链接性

荒凉一梦 提交于 2019-12-06 08:50:31
存储持续性、作用域和链接性 c++中使用3中不同的方案存储数据 c++11中使用4中不同的方案存储数据。 这些方案的区别在于数据保留在内存中的时间。 自动存储持续性 在函数定义中声明的变量的存储持续性为自动的。2种 静态存储持续性 在函数定义外定义的变量和使用关键字static定义的变量的存储持续性为静态。他们在整个程序运行过程中都存在。3种 线程存储持续性c++11 多核处理器中很常见。如果变量是使用thread_local声明的,则其生命周期和所属线程一样长。 动态存储持续性 使用new运算符分配的内存将一直存在,直到使用delete运算符将其释放或程序终止为止。有时被称为自由存储或堆。 作用域和链接 作用域描述了名称在文件的多大范围可见。 作用域为局部的变量只能在定义它的代码块中用。 作用域为全局的变量在定义位置到文件结尾之间都可用。 自动变量为局部作用域。静态变量为全局作用域还是局部作用域取决于它是如何被定义的。 在函数原型作用域中使用的名称只在包含参数列表的括号内使用。 在类声明的成员的作用域为整个类。 在名称空间中的声明的变量的作用域为整个名称空间。全局作用域是名称空间作用域的特例。 c++函数的作用域为整个类或整个名称空间。但不能是局部。因为不能在代码块中定义函数。如果函数作用域为局部,则只对之间可见。不能被其他函数调用。 链接性描述了名称如何在不同单元间共享

一文理解透Java中初始化顺序

泪湿孤枕 提交于 2019-12-06 07:03:10
一.先贴上代码 public class InitOrderDemo extends Father { private PObject p = new PObject("子类 - 实例变量"); static { sp = new PObject("子类静态代码块 - 静态变量"); } static PObject sp = new PObject("子类 - 静态变量"); InitOrderDemo(){ System.out.println("子类构造函数开始执行 ..."); } public static void main(String[] args) { new InitOrderDemo(); } } class Father{ private PObject p = new PObject("父类 - 实例变量"); private static PObject sp = new PObject("父类 - 静态变量"); Father(){ System.out.println("父类构造函数开始执行 ..."); } { p = new PObject("父类实例代码块 - 实例变量"); } static { sp = new PObject("父类静态代码块 - 静态变量"); } } class PObject{ PObject(String type

面向对象(一)-封装

最后都变了- 提交于 2019-12-06 06:59:48
面向对象(一) 面向对象-封装 类声明格式 public class Student{ //访问修饰符+类修饰符+类名 public String name; //类的属性 //成员变量,全局变量 //访问修饰符+数据类型+变量名 public void info(){ //访问修饰符+返回值+方法名 //同类方法中,可以调用自身的属性 this.name; //this:当前对象 //如果没有this,则遵循就近原则 } } 在main方法中调用 new 对象/属性 Student stu = new Student(); //对象+对象名 = +实例化对象 赋值 stu.name = "fr"; //示例化对象.对象属性 = +属性值 赋值由stu对象提出,通过'.'来连接。 对象数组赋值 Student [] stus = new Student[5]; stu[0] = new Student(); //或者 Student [] stus = {Student(),Student(),Student(),null,null} 构造方法 默认: public 类名(){} //该方法系统默认自带 特点: 无返回类型 方法名与类名相同 注意事项 在一个类中,java编译时先编译属性的值,在调用构造方法的值,也就是说,构造方法中如果有参数的赋值,其值会覆盖默认设定的初始值。

ABB 创建一个后台程序

孤街醉人 提交于 2019-12-06 03:24:50
首先,需要启用多任务选项的控制器。 要做到这一点,创建一个新的机器人控制器RobotStudio站 - >选择机器人(控制器菜单) - > - >系统生成器 - >选择控制器 - >修改...下一页 - >下一步 - >下一步 - >下一步 - >添加以下options 623-MultitaskingValidate并重启控制器。 现在有了正确配置的控制器,要添加一个新的任务,(控制器菜单) - >配置编辑器 - >控制器 - >任务 - >新建任务...任务名称:命名t-mainback - > mainback 背景程序:选择第一个mainback 有类型可以设置为半静态的,因为这样可以允许任务在后台运行,这是非常重要的。现在可以运行多任务。如果要修改后台任务,直接在真实的控制器上是无法修改的。因为任务在后台运行,即使在紧急停止情况下也无法停止后台任务。 进入这里配置一个后台处理程序 NORMAL为普通任务,示教器的急停、启动、停止、等等都影响其运行。 SEMISTATIC为半静态任务,在热启动后,任务从起点重新启动。如果自动加载模块的文件被更新,将重新加载模块。 半静态变量(Semistatic Variable)所需的存储区大小固定、在编译时可确定大小、编译时分配空间,但随所在的程序单元调用而被绑定,返回而失去空间,并可能会在存储空间留有多个副本。在运行时可知(动态可确定

static关键字

 ̄綄美尐妖づ 提交于 2019-12-06 01:44:37
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/luoyoub/article/details/82874993 ———————————————— 版权声明:本文为CSDN博主「忧伤的比目鱼」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/luoyoub/article/details/82874993 以下情况会触发类的初始化: 遇到new,getstatic,putstatic,invokestatic这4条指令; 使用java.lang.reflect包的方法对类进行反射调用; 初始化一个类的时候,如果发现其父类没有进行过初始化,则先初始化其父类(注意!如果其父类是接口的话,则不要求初始化父类); 当虚拟机启动时,用户需要指定一个要执行的主类(包含main方法的那个类),虚拟机会先初始化这个主类; 当使用jdk1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行过初始化

Java基础(三)

爷,独闯天下 提交于 2019-12-05 20:49:55
静态变量与实例变量 static关键字修饰的变量,叫类变量或者静态变量。没有static修饰的为实例变量; 类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问; 静态变量的生命周期取决于类的生命周期,实例变量的生命周期取决于类的实例,每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。 抽象类和接口 抽象类中可以包含抽象方法和实例方法,而接口中只能定义抽象方法; 实现抽象类可以有选择地重写需要用到的方法,实现接口的类一定要实现接口里定义的所有方法。一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现; 继承只有单一继承性,一个类只内能继承一个抽象父类,但是可以实现多个接口; 抽象类中可以有构造方法,接口中不能定义构造方法; 接口中定义的变量都是静态常量。 程序示例 //接口 public interface AbilityImpl { public static final String MOUTH = "mouth"; public static final String HAND = "hand"; public static final String FOOT = "foot"; public

面试宝典

跟風遠走 提交于 2019-12-05 19:58:17
从各处整理一些面试题以及答案,方便随时巩固。 Java基础    一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?     可以包含多个类,但是只能有一个public修饰的类,public修饰的类只能与文件名相同    Java有没有goto?     有,只是保留字,目前没有被使用    说说&和&&的区别。     相同点:都可作为逻辑与运算,当两边都为true时才是true     不同点:&&可以作为短路与,当第一个表达式为false时,不再计算第二个表达式         &还可以作为按位与进行双目运算,即将两边的数字转换为二进制,两个二进制位都为1时,对应结果的二进制位才为1,否则为0    在JAVA中如何跳出当前的多重嵌套循环?     1.可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出多重循环,例如: public class xunhuan { public static void main(String[] args) { ok: for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { System.out.println("i=" + i +",j=" + j); if(j == 5) break ok; } } } }     2

全局变量-局部变量-静态变量

人走茶凉 提交于 2019-12-05 18:56:28
全局变量和局部变量 定义 在函数内部的 变量叫局部变量(函数的形参也是局部变量) 定义在 所有函数的外面的变量叫全局变量 全局变量在所有函数中均可以使用,局部变量只能在定义它的函数内部使用 (需要引入头文件声明吧,否则怎么知道变量作用域) 静态变量 全局变量都是静态变量 。局部变量定义时如果前面加了“ static ”关键字,则 该变量也成为静态变量 静态变量的存放地址 ,在整个程序运行期间,都是固定不变的 非静态变量 一定是局部变量 地址每次函数调用时都可能不同 在函数的一次 执行期间不变 如果未明确初始化,则静态变量会被自动初始化成全 0( 每个 bit 都是 0 ),局部 非静态变量的值则随机 #include<iostream> using namespace std; void Func() { static int n = 4; //静态变量只初始化一次 cout << n << endl; ++n; } int main() { Func(); Func(); Func(); return 0; } 静态变量应用 :strtok 的实现 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstring> using namespace std; int main() { char str[] = "

深入理解static关键字

泄露秘密 提交于 2019-12-05 18:54:58
在开始讲static之前,我想让各位看一段有意思的代码: public class Test { static{ System.out.println("test static 1"); } static{ System.out.println("test static 2"); } public static void main(String[] args) { } } 看完程序,小白童鞋发话了:啥玩意?main方法中啥都没有,能运行啥?博主你个星星星... 运行结果: test static 1 test static 2 小白童鞋:那啥...那啥...博主我说啥了,我啥都没说... 其实,上面的代码懂的自然懂,不懂的自然就不懂了,因为上面的代码涉及到JVM的类加载了!当然不在本篇博客文章的范畴内,如果有兴趣理解上面的程序,这篇文章可能会对你有所帮助 别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】 1、static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法。 以致于即使没有创建对象,也能使用属性和调用方法 ! static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能 。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候

变量

╄→гoц情女王★ 提交于 2019-12-05 17:41:32
声明一个变量以后必须对他进行初始化。 声明变量 int i;//声明一个变量名是i, 类型是int类型的变量。 i = 10;//对变量进行的初始化。 也可以在声明变量的时候对他进行初始化 int i = 10; 变量的分类 类型 声明位置 从属于 生命周期 局部变量 方法或语句块内部 方法/语句块 从声明位置开始,直到方法或语句块执行完毕,局部变量消失 成员变量 类内部,方法外部 对象 对象创建成员变量也更着创建,对象消失成员变量,也更着消失 静态变量 类内部,static修饰 类 类被加载,静态变量就有效;类被卸载,静态变量就消失。 局部变量 方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。 public void test{ int i; int j= i+5; //编译出错,i还没有被初始化 } 成员变量 方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。 public class test{ int i=0; } 静态变量 使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值. public class Test{ static int i