实例变量

静态变量、实例变量、局部变量与线程安全

天大地大妈咪最大 提交于 2019-12-10 04:50:56
静态变量:线程非安全。 加static关键字的变量,只能放在类里, 不能放到方法里 。 静态变量有默认初始化值。 静态变量表示所有实例共享的一个属性,位于方法区,共享一份内存,而成员变量是对象的特殊描述,不同对象的实例变量被分配在不同的内存空间, 一旦静态变量被修改,其他对象均对修改可见,故线程非安全。 实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线程安全。 成员变量(实例变量): 1、成员变量定义在类中,即类中的普通变量,在整个类中都可以被类中方法所访问(如过和局部变量重名,需用this关键字)。 2、成员变量随着对象的建立而建立,随着对象的消失而消失, 存在于对象所在的堆内存中 。 3、 成员变量有默认初始化值 实例变量为对象实例私有,在虚拟机的堆中分配,若在系统中只存在一个此对象的实例,在多线程环境下,被某个线程修改后,其他线程对修改均可见,故线程非安全;如果每个线程执行都是在不同的对象中,那对象与对象之间的实例变 量的修改将互不影响,故线程安全。 成员变量和类变量的区别: 1、两个变量的生命周期不同 成员变量随着对象的创建而存在,随着对象的回收而释放。 静态变量随着类的加载而存在,随着类的消失而消失,且优先于对象存在。 2、调用方式不同 成员变量只能被对象调用。 静态变量可以被对象调用,还可以被类名调用。 3、数据存储位置不同 成员变量存储在堆内存的对象中

java基础知识总结

吃可爱长大的小学妹 提交于 2019-12-09 23:33:59
1.变量类型 基本类型:基本类型的变量“持有”某个数值;引用类型:引用类型的变量“指向”某个对象。 2.基本数据类型 基本数据类型是CPU可以直接进行运算的类型。java中的基本数据类型有: 整数类型:byte short int long 浮点数类型:float double 字符类型:char 布尔类型:boolean 3.== 和 equals ==判断两个变量或者实例是不是指向同一个内存空间,equals判断两个变量或者实例所指向的内存空间的值是否相同 ==是对内存地址进行比较,equals是对内容进行比较 4.break 和continue break跳出当前循环,continue提前结束本次循环,继续执行下次循环。 面向对象 面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。 5.类和实例 class是一种对象模板,定义了如何创建实例,instance是对象实例,是根据class创建的实例。 6.参数传递 基本类型的参数传递,是调用方值的复制,双方各自的后续修改,互不影响;引用类型的参数传递,调用方的变量和接收方的变量,指向的是同一个对象,双方任意一方对此对象的修改都会影响到对方。 7.构造方法 构造方法用于初始化实例,如果一个类没有定义构造方法,编译器会自动为我们生成一个默认构造方法;如果定义了一个构造方法,那么

python的静态成员变量、实例成员变量、静态方法、类方法、实例方法

笑着哭i 提交于 2019-12-09 19:37:35
静态成员变量(类变量)和普通成员变量(实例变量) 静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得。 在实例对静态成员变量赋值时,实例 python是动态类型的语言,没有特别的标志区分静态成员变量和普通成员变量 如果你使用类名.成员变量 那这个成员变量现在就是静态成员变量(类变量) 如果你使用实例.成员变量 那这个成员变量现在就是普通成员变量(实例变量) 实例变量的值是什么时候初始化的,实例变量并不是构造对象的时候初始化的,而是在第一次通过对象调用该实例变量的 时候,从类变量此时的值拷贝过来的,此后便互不影响。 静态方法、类方法、实例方法 实例方法,类中的普通方法,由实例调用 类方法,被@classmethod装饰的方法,类对象和实例都可以调用类方法 静态方法,被@staticmethod装饰的方法,类对象和实例都可以调用静态方法,静态方法不会对任何实例造成影响 实例方法和类方法的区别是,实例方法的第一个参数是self(实例本身),类方法的第一个参数是cls(类对象本省) 注意:这里的类对象和实例对象的意思是 type(类名)---classobj type(实例名)-instance 个人感觉静态的概念在python中真的没多大用 ,因为这是个动态语言。 来源: oschina 链接: https://my.oschina.net/u/2322561

python浓缩(2)Python起步

旧时模样 提交于 2019-12-09 14:20:49
本章对Python 的主要特性做一个快速介绍。 在所有的交互示例中,你会看到Python 的主提示符( >>> )和次提示符( ... )。主提示符是解释器告诉你它在等待你输入下一个语句,次提示符告诉你解释器正在等待你输入当前语句的其它部分。 语句和表达式(函数、算术表达式等): 语句使用关键字来组成命令,类似告诉解释器一个命令; 表达式没有关键字。它们可以是使用数学运算符构成的算术表达式,也可以是使用括号调用的函数; 2.1 程序输出,print 语句及“Hello World!” 在交互式解释器中,可以用 print 语句显示变量的字符串表示,或者仅使用变量名查看该变量的原始值。 2.2 程序输入和raw_input()内建函数 下划线(_)在解释器中有特别的含义, 表示最后一个表达式的值 。 Python 的print 语句,与字符串格式运算符( % )结合使用,可实现字符串替换功能。 %s 表示由一个字符串来替换;%d 表示由一个整数来替换;%f表示由一个浮点数来替换; Print 语句也支持将输出重定向到文件。符号 >> 用来重定向输出,下面这个例子将输出重定向到标准错误输出: import sys print >> sys.stderr, 'Fatal error: invalid input!' import sys print >> sys.stderr,

IOS,objective_C中用@interface和 @property 方式声明变量的区别

心不动则不痛 提交于 2019-12-09 13:42:00
转自http://www.cnblogs.com/letmefly/archive/2012/07/20/2601338.html 一直有疑问,在objective_C中声明变量会有 2种方式,今天有空和网友讨论了下,并且自己查了stackoverflew后算是稍微弄懂了一点。记录如下: 用了一段oc;会发现有2种定义变量的方式 1.在 @interface :NSObject{} 的括号中,当然NSObject 是指一个父类,可以是其他的。 形式如下: 1 @interface GCTurnBasedMatchHelper : NSObject { BOOL gameCenterAvailable; 3 BOOL userAuthenticated; }   2.另外一种是直接在 @interface : NSObject{}括号之后,用 @property 去定义一个变量。 1 @property (assign, readonly ) BOOL gameCenterAvailable;   你会发现,有人会再@interface中定义了变量后,又在 @property中重复定义相同的变量,而且很常见。 结果可能是这样: 1 @interface GCTurnBasedMatchHelper : NSObject { 2 BOOL gameCenterAvailable; 3

servlet不是线程安全的

半世苍凉 提交于 2019-12-08 09:46:30
在tomcat容器中,servlet默认是单例模式;如果实现ISingleThreadModule标记接口 则针对多个请求创建多个实例(最多20个),为了实现线程安全,可以: 1.使用局部变量 而不是实例变量 2.使用synchronized关键字 综上说明静态变量、实例变量、局部变量,三者使用范围或者说生命周期越大 则越不线程安全 来源: https://www.cnblogs.com/hzq3554055/p/12004630.html

Java学习笔记 - 基础篇

本小妞迷上赌 提交于 2019-12-08 04:32:16
一、面向对象的编程概念 观察现实对象两个性质:状态、行为。 面向对象的好处:模块化、隐藏信息。 继承:子类从父类(超类)继承状态和行为;子类可以改变父类的状态和行为。 接口:是无关对象用来进行彼此交互的设备;一个对象可以实现多个接口。 二、语言基础 变量 对象将它的状态存储在变量中;变量是一个由标识符命名的数据项。 声明变量的形式:<类型> <名称> JAVA 语言两大数据类型 原始类型数据(基本数据类型)、引用类型。 原始类型数据是不能再分解的数据类型(8种:byte、short、int、long、float、double、char、boolean),数据在作为函数参数是以“传值”方式工作的; 整数 byte:1字节长的整数;8位有符号的二进制补码整数 short:短整数;16位有符号的二进制补码整数 int:整数;32位有符号的二进制补码整数 long:长整数;64位有符号的二进制补码整数 实数 flat:单精度浮点数;32位IEEE 754浮点数 double:双精度浮点数;64位IEEE 754浮点数 其他类型 char:单一Unicode字符;16位Unicode字符 boolean:布尔值(true或false);8位/1位(8位空间,1位数据) 引用类型包括类(class)、接口(interface)、数组(array)。引用类型有时也称复合类型

详解JavaScript中的函数与闭包

我是研究僧i 提交于 2019-12-07 15:54:03
闭包这东西,说难也难,说不难也不难,下面我就以自己的理解来说一下闭包。 一、闭包的解释说明 对于函数式语言来说,函数可以保存内部的数据状态。对于像C#这种编译型命令式语言来说,由于代码总是在代码段中执行,而代码段是只读的,因此函数中的数据只能是静态数据。函数内部的局部变量存放在栈上,在函数执行结束以后,所占用的栈被释放,因此局部变量是不能保存的。 Javascript采用词法作用域,函数的执行依赖于 变量作用域 , 这个作用域是在定义函数时确定的 。因此Javascript中函数对象不仅保存代码逻辑,还必须引用当前的作用域链。Javascript中函数内部的局部变量可以被修改,而且当再次进入到函数内部的时候,上次被修改的状态仍然持续。这是因为因为局部变量并不保存在栈上,而是通过一个对象来保存。 决定使用哪个变量是查找作用域链后决定的。 1.每次 定义函数时 ,都会为之创建一个作用域链; 2.每次 调用函数时 ,会创建一个新的对象用来保存变量(局部变量和参数),并且把这个用于保存变量的对象加入作用域链前端。 如果没有局部变量的话,这个保存变量的对象就只包含arguments,也就是用来保存参数。设想这么一种情况,如果内层函数定义时恰逢外层函数正被调用执行,那么内层函数就会把外层函数运行时这个保存变量的对象纳入自己的作用域链中。 用代码来举例,外层匿名函数执行了10次

史上最全的Python面向对象知识点疏理

亡梦爱人 提交于 2019-12-07 15:19:08
面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。 实例变量:定义在方法中的变量,只作用于当前实例的类。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。 创建类 a 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 P 访问。 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法 self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。 self代表类的实例,而非类 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。 输入: 输出: 从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class

【Python】 运算符

风格不统一 提交于 2019-12-07 15:13:30
什么是运算符? 本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子中, 4 和 5 被称为 操作数 ," + " 称为运算符。 接下来让我们一个个来学习Python的运算符。 Python算术运算符 以下假设变量a为10,变量b为21: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 31 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11 * 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 210 / 除 - x 除以 y b / a 输出结果 2.1 % 取余 - 返回除法的余数 b % a 输出结果 1 ** 幂 - 返回x的y次幂 a**b 为10的21次方 // 取整除 - 向下取接近除数的整数 >>> 9//2 4 >>> -9//2 -5 以下实例演示了Python所有算术运算符的操作: 实例(Python 3.0+) #!/usr/bin/python3 a = 21 b = 10 c = 0 c = a + b print ("1 - c 的值为:", c) c = a - b print ("2 - c 的值为:", c) c = a * b print ("3 - c 的值为:", c) c = a / b print ("4 - c 的值为:", c) c = a