- 属 性
- 指定维度的成员变量
- 外文名
- Member Variables
- 中文名
- 成员变量
- 目 的
- 标识某个维度成员
-
关于java成员变量和局部变量
2018-09-14 10:46:451、成员变量和局部变量简述 在Java语言里,根据定义变量位置的不同,可以将变量分成两大类:成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)...1、成员变量和局部变量简述
在Java语言里,根据定义变量位置的不同,可以将变量分成两大类:成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)。二者的运行机制存在较大差异。
1.1成员变量
类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同;
而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
正是基于这个原因,可以把类变量和实例变量统称为成员变量。其中类变量可以理解为类成员变量,它作为类本身的一个成员,与类本身共存亡;实例变量则可以理解为实例成员变量,它作为实例的一个成员与实例共存亡。
只要类存在,类就可以访问类变量 类.类变量
只要实例存在,实例就可以访问实例变量 实例.实例变量
当然实例也可以访问类变量。但是需要注意的是因为实例不拥有类变量,所以通过实例来访问类变量进行操作,实际上是对类变量进行操作 ,当有其他实例来访问类变量时,访问的类变量是被对象访问操作过的类变量。
成员变量无需显示初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化。
1.2局部变量
局部变量根据定义形式的不同,又可以分为如下三种:
形参:在定义方法签名时定义的变量,形参的作用域在整个方法中都有效
方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效
代码块局部变量:这个局部变量的作用域从定义该变量的地方生效,到该代码结束时失效。
一个变量只在一对{}中起作用。。
java允许局部变量和成员变量同名,如果方法中局部变量和成员变量同名,局部变量就会覆盖成员变量,如果需要在这个方法中引用被覆盖成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量。
2、成员变量的初始化和内存中的运行机制
接下来以下面代码来举例说明成员变量的初始化和内存中的运行机制
1 public class Person { 2 public int num; 3 public String name; 4 5 public static void main(String[] args) { 6 Person p1 = new Person(); 7 Person p2 = new Person(); 8 p1.num = 2; 9 p2.num = 3; 10 p1.name = "张三"; 11 p2.name = "李四"; 12 } 13 14 15 }
当程序执行Person p1 = new Person();时,如果这行代码是第一次使用Person类,则系统通常会在第一次使用Person类时加载这个类,并初始化这个类,在类的准备 阶段,系统将会为该类的类变量分配内存空间,并指定默认初始值。当person类初始化完成后,系统内存中的存储示意图如下图所示。
可以看出,当person类初始化完成后,系统将在堆内存中为Person分配一块内存空间,实际上是创建了一个类对象,在这块内存区里包含了保存num类变量的内存,并设置num的默认初始值为0。
系统接着创建了一个Person对象,并把这个Person对象赋给p1变量,Person对象包含了名为name的实例变量,实例变量是在创建实例时分配内存空间并指定初始值的。当创建了第一个person对象后,系统内存中的存储示意图如下图所示。
从上图可以看出num不属于对象,它属于类,所以创建第一个对象时并不需要为num分配内存空间,系统只是为name分配了内存空间,并指定初始值为null。
创建第二个对象p2时,由于在创建第一个对象时已经对类进行了初始化,所以在创建p2时对类进行初始化,对象的创建过程与第一个对象的创建过程没有什么区别。
第二个对象创建完成后,成员变量如上图所示在内存中存储。
**当程序需要访问类变量时,尽量使用类来作为主调,不要使用对象作为主调,这个可以避免产生歧义。
3、局部变量的初始化和内存中的运行机制
*局部变量必须经过显示初始化之后才能使用,系统不会为局部变量执行初始化。定义了局部变量以后,系统并没有给局部变量进行初始化,直到程序给这个局部变量赋给初值时,系统才会为这个局部变量分配内存空间,并将初始值保存到这块内存中。
*局部变量不属于任何类或者实例,因此它总是保存在方法的栈内存中。如果局部变量是基本数据类型,则该变量直接存储在方法的栈内存中,如果是引用变量则将引用的地址存储在方法的栈内存中。
*栈内存中的变量无需系统垃圾回收,随着方法或者代码块的运行结束而结束。局部变量通常只保存了具体的值或者引用地址,所以所占的内存比较小。
4、变量的使用规则
能不使用成员变量就别使用成员变量
能不使用方法局部变量就别使用方法局部变量
使用代码块局部变量性能最好。
-
java中的变量(成员变量、本地变量、类变量)
2015-12-05 22:08:291、成员变量(实例变量,属性) 2、本地变量(局部变量) 3、类变量(静态属性) 一、成员变量(实例变量,属性) 1.1-成员变量:(在类中定义,访问修饰符修饰符typename=value) 1.2-什么是成员变量? 成员变量就是类...Java中的变量
- 成员变量(实例变量,属性)
- 本地变量(局部变量)
- 类变量(静态属性)
一、成员变量(实例变量,属性)
- 成员变量
在类中定义, 例如: 访问修饰符 修饰符 type name = value - 什么是成员变量?
成员变量就是类中的属性。当new对象的时候,每个对象都有一份属性。一个对象中的属性就是成员变量。 - 作用范围?
在类内部,任何地方都可以访问成员变量。 - 生命周期?
在内存中存在的时间
出生: new对象的时候,开辟内存空间。
死亡: 堆内存地址没有引用,变成垃圾,被垃圾回收器回收后。
二、局部变量(本地变量)
- 局部变量
方法中定义,例如:修饰符 type name = value - 什么是局部变量?
方法的形式参数以及在方法中定义的变量。 - 作用范围?
形参:在方法体中任何位置都可以访问。 - 方法中定义变量:
从定义处开始,直到所在代码块结束。 - 生命周期?
在内存中存在的时间
出生:运行到创建变量的语句时。
死亡:超过了其作用范围。
三、类变量(静态属性)
- 类变量
访问修饰符 static type name = value - 什么是类变量?
被static修饰的属性。 - 作用范围?
在类变量定义之后。 - 生命周期?
在内存中存在的时间
出生:类加载时,类变量就分配内存空间。
死亡:JVM退出
-
Java成员变量与成员方法
2019-05-27 10:28:49在Java中对象的属性成为成员变量, 有时候很多人也喜欢把成员变量等同于全局变量, 因为成员变量在某一个类中都有效 (成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中...学而时习之,温故而知新.
成员变量:
在Java中对象的属性成为成员变量, 有时候很多人也喜欢把成员变量等同于全局变量, 因为成员变量在某一个类中都有效
(成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。)
成员方法:
在Java中使用成员方法来对应与类对象的行为, 在类中,除了变量外的都是成员方法。
一个案例 来标记成员变量与成员方法
package me; public class Me { private String name; //成员变量 public String getName() { //成员方法 return name; } public void setName(String name) {//成员方法 this.name = name; } }
-
静态方法 实例成员变量 静态成员变量 局部变量
2015-09-04 17:42:49与成员变量不同的是,无论哪种方法,在内存中只有一份。 在外部调用静态方法时,可以使用类名.方法名的方式,也可以使用对象名.方法名 的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无须创建对象...实例方法必须在类实例化后通过对象来调用,而静态方法可以在类实例化之前就使用。与成员变量不同的是,无论哪种方法,在内存中只有一份。
在外部调用静态方法时,可以使用类名.方法名的方式,也可以使用对象名.方法名 的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无须创建对象
静态方法在访问本例的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制)
实例成员变量
他们最大的特点是:如果所属的对象没有被创建,它们也就不存在。如果在类的外部使用它,需要创建一个对象,然后通过对象名.变量名来访问。
在类的内部,实例成员方法也可以直接访问实例成员变量。
public class A{
protected int c=0;
}
public class B{
public static void main(String args[]){
A a =new A();
a.c=100;
System.out.println(a.c);
}
}
静态成员变量
在成员变量前加上static标识符就可以定义一个静态成员变量,相对于实例成员变量,静态成员变量具有下列特点
它被类的所有对象所共享,因此被称为类变量。
它不是属于某个具体对象,也不是保存在某个对象的内存区域中,而是保存在类的公共存储单元。因此,可以在类的对象被创建之前使用。
它既可以通过对象名.变量名方式访问,也可以通过类名.变量名的方式访问。他们完全是等价的
局部变量
方法内部定义变量,被称为局部变量
变量修饰符可以说final,表示这是常量
变量类型可以是JAVA中任意合法的基本类型或复合类型
定义变量时可以同时赋初值
局部变量必须要先定义后使用
局部变量没有访问权限修饰符,不能用public等修饰符来修饰
局部变量不能用static修饰,没有静态局部变量!!!!!
局部变量仅限于定义它的方法,在方法的外部无法访问它。
成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类的外部使用它。
-
静态成员变量与非静态成员变量
2017-06-08 09:03:23静态成员变量从属于一个类而非某个具体的对象,它的值被该类的所有对象所共享.对于public的静态成员变量而言,它既可以由类名直接通过 “.” 操作符引用,也可以由对象名通过“.”操作符来引用,并且两者效果相同. 静态... -
ThreadLocal成员变量和普通的成员变量对比
2017-04-26 21:38:36ThreadLocal 普通成员变量对比 -
C++中private成员变量和protect成员变量的区别
2018-06-07 01:38:43保护成员和私有成员很相似,但是就是在子类中,保护成员可以访问,而私有成员不能被访问,也就是说子类中的函数,可以访问父类中的保护成员变量,而不能访问私有成员变量,要想访问父类中的私有成员变量,只能通过... -
Java中静态成员变量与非静态成员变量的区别
2019-04-19 20:19:12如果我们在成员变量前边加上static关键字,这个变量就成为静态成员变量,我们又把这种变量叫做“类变量”,因为这样的变量在这个类的所有对象里只有一个,这个类的所有对象“共享”同一个类变量。 -
成员变量和局部变量的区别
2018-07-22 19:56:44成员变量和局部变量的区别 (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 成员变量:... -
Java 理解 子类成员变量与父类成员变量同名 方法的重写
2017-12-15 12:41:44Java 理解 子类成员变量与父类成员变量同名 方法的重写 -
父类和子类 同名成员变量和静态成员变量
2016-03-25 15:14:11父类和子类如果有相同名字的成员变量时,子类会使用自己的成员变量,如果想使用父类的必须通过指针或引用转换。 class CBase class CA : public CBase 拥有相同成员变量 int n CA a; a.n = 1; 修改的是子类... -
普通成员变量与静态成员变量的区别、普通成员方法与静态成员方法的区别
2017-10-29 21:47:161. 类中静态成员变量与非静态成员变量的区别 (1).生命周期: 静态成员变量从类被加载开始到类被卸载,一直存在。 普通成员变量只有在类创建对象后才开始存在,对象结束,它的生命也就告终。 (2).共享方式: 静态... -
静态成员变量和非静态成员变量的5个主要区别
2018-08-24 09:18:10a) 静态成员变量: 方法区的静态区域 b) 非静态成员变量: 堆内存中的对象空间里面 2、从书写格式上看: a) 静态成员变量: 在数据类型前面多了一个static修饰 b) 非静态成员变量: 没有static修饰 3、从... -
类成员变量和对象成员变量在内存中存放情况
2018-11-15 16:15:43不是由static修饰的是实例变量,也就是对象成员变量, 对象.变量名 调用 public class Variable { //定义类变量 private static String name ;; //定义对象变量 private int age; public static void main... -
Java 成员变量和成员方法
2018-12-07 10:25:44在 Java 语言中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。 成员变量 在 Java 中对象的属性也称为成员变量。为了了解成员变量,首先定义一个图书类,成员变量对应于类对象的属性,在 Book 类... -
新手小白学JAVA 局部变量 成员变量 方法
2021-04-01 23:59:301 变量 1.1 概念 可以改变的数,称为变量。在Java语言中,所有的变量在使用前必须声明。 一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。...2.3 成员变量 位置:定义在类里方法外 注意:不用 -
Python的静态成员变量和非静态成员变量
2016-07-23 22:15:45Python中,静态成员变量称为类变量,非静态成员变量称为实例变量。 基本概念 类变量: 类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。类变量在整个实例化的对象中是公用的。 实例变量: ... -
C++ 类的静态成员变量
2020-12-06 18:23:43我们每创建一个类对象,类成员变量就会多出一份,各个对象间的成员变量不能共享,是各自独立的变量。 但是,我们有些时候需要定义一个成员变量,使其在各个类对象之间关联起来。当这个变量发生改变时,所有对象中都... -
java线程安全问题之静态成员变量、实例成员变量、局部变量
2017-12-06 15:56:53Java线程安全问题之静态成员变量、实例成员变量、局部变量 (原文地址:http://blog.csdn.net/will_awoke/article/details/38044415) java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢... -
python类成员变量和实例成员变量
2017-05-12 14:52:39# python code class Vehicle: def __init__(self,... self.speed = speed #speed实例成员变量 def drive(self,distance): print 'need %f hour(s)'% (distance/self.speed) class Bike(Vehicle -
静态成员变量和非静态成员变量的区别
2016-08-17 21:33:12从保存位置、书写格式、生命周期上、使用方法、修改后的影响范围上看静态成员变量和非静态成员变量的区别。 -
Java中关于子类成员变量与父类成员变量同名的问题
2020-04-21 19:48:37Java中关于子类成员变量与父类成员变量同名的问题: 下面代码为我写的一个简单的测试类,很有意思: public class TestDemo2 { /** * @param args */ public static void main(String[] args) { Animals a =... -
静态变量、成员变量与局部变量的区别
2019-05-16 19:35:00成员变量和局部变量的区别 成员变量: ①成员变量定义在类中,在整个类中都可以被访问。 ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。 ③成员变量有默认初始化值。 局部变量... -
PHP 类的静态成员变量和普通成员变量对比
2015-05-28 11:04:241、类的静态方法只能访问静态成员变量,而不能访问非静态成员变量 2、静态成员变量不需要实例化就能访问,且访问速度快一些 3、类的静态成员变量只属于这个类,但类的所有实例共享这个静态成员变量 一个由 c/... -
java static成员变量方法和非static成员变量方法的区别
2018-04-23 00:25:01静态成员变量不用new对象,在类加载的过程中就已经初始化存放在数据区域,静态成员变量是类和所有对象共有的, 类和对象都可以改变它的值,每一次改变值之后,静态成员变量的值在所有对象里面都将改变。 ... -
如何使用arthas查看成员变量(基于Spring)——java查看运行中成员变量值
2020-04-27 11:00:41如何使用arthas查看成员变量(基于Spring) 查看运行的代码 jad com.example.ClassName 查看对象及属性。 备注:我搜了一下没找到合适方法直接查看对象的成员变量,自己发现了这样一个办法,一般我们用Spring时,可以... -
成员变量、全局变量、实例变量、类变量、静态变量和局部变量的区别
2018-03-03 12:18:27如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量,必须使用关键字this 成员变量和局部变量的区别成员变量:1、成员变量定义在类中,在整个类中都可以被访问。2、成员变量随着对象的建立而... -
成员变量和局部变量同名问题
2020-01-26 20:05:48当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?可以在成员变量名前面加上this.来区别成员变量和局部变量 class Person { private int age; private String na... -
C# 成员变量,本地变量、类变量
2018-07-21 20:29:11成员变量(实例变量,属性) 成员变量:在类中定义,成员变量就是类中的属性。当new对象的时候,每个对象都有一份属性。一个对象中的属性就是成员变量。 作用范围:在类内部任何地方都可以访问成员变量。 声明周期:...