成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
2016-08-03 10:32
260 查看
转:http://blog.csdn.net/wuha0/article/details/7084136
版权声明:本文为博主原创文章,未经博主允许不得转载。
简单来说:
类体的定义包括成员变量的定义和方法的定义。
1、成员变量包括实例变量和类变量;而成员方法包括实例方法、类方法,当然还有一种特殊的构造方法。
2、类变量、类方法就是类中的变量、方法,必须是静态的,要加static;故其又称静态变量、静态方法。
3、成员变量、成员方法是对象或实例中的变量、方法,不加static;
类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有一个地方存储这个变量。而且所有的实例都可以修改这个类变量的值(前提是这个类变量没有被final修饰,否则是常量了),而且访问类变量的时候不用实例,直接用类就可以了。
类方法:和类变量一样,可以不用实例,直接用类就可以调用类方法。
实例变量:实例域,实例字段,或叫成员变量。
实例方法:或叫成员方法,必须先有实例,然后才能通过实例调用该实例方法。
使用方法:类方法可以直接调用类变量和类方法
类方法不可以直接调用实例变量和实例方法
类方法中没有this,因为没有实例,this不知道调用哪个实例
类方法可以从类里面直接访问类成员
实例方法可以调用类方法,访问类变量,但是不提倡这样做,会把类方法和类变量混淆成实例方法和实例变量
程序实例:
class AnIntegerNamedX {
int x; //这个是成员变量
public int x() { //成员方法
return x;
}
public void setX(int newX) { //成员方法
x = newX;
}
}
public class Practice{
public static void main(String args[]){
AnIntegerNamedX myX = new AnIntegerNamedX();
AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.x = 2;
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());
}
}
2:
class AnIntegerNamedX {
static int x; //这里写成static,结果就变成全是2了,因为类变量是被实例所共享的,包括myX和anotherX
调用anotherX时所有的所有实例都改变了。
public int x() {
return x;
}
public void setX(int newX) {
x = newX;
}
}
public class Practice{
public static void main(String args[]){
AnIntegerNamedX myX = new AnIntegerNamedX();
AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.x = 2;
//这里把X的值改成2,所有实例的X都是2了,因为类变量是被所有实例共享的,任何实
例都可以对类变量做最终的修改
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());
}
}
3:同样的,当把那两个方法都加上static变成类方法的时候,会提示错误让你把X变成静态,是应为类方法不能直接访问实例变量!
问:实例方法可直接调用本类的类方法吗?
先一一分析一下这几个东东:实例方法,实例变量,类方法,类变量。
实例变量(instance variable):或叫实例域、实例字段(instance field),或叫成员变量(member variable)。实例的变量,每个实例的变量可能不同。
实例方法(instance method):或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。
类变量(class variable):或叫静态域、静态字段(static field),或叫静态变量(static variable)。出现在这样的情况下:一个类的所有实例需要一个公有的属性,比如,一,统计实例个数;二,常量。类变量与类直接关联在一起。内存当中只有一个地方存放这个变量。任何实例都可以修改它的值(前提是它没有被final修饰符修饰,不然就是常量),但是,访问类变量并不需要实例,用类就可以操作了。
类方法(class method):跟类变量的基本特点一样。供类用的方法,可以没有实例,直接通过类来调用类方法。
从形式上看,类变量和类方法,比一般的变量和方法多了一个static修饰符。因为这个原因,类变量和类方法也被叫做静态变量和静态方法。
它们的使用方法:
实例方法可以直接访问实例变量,调用实例方法;
实例方法可以直接访问类变量,调用类方法。但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类方法误认为是实例方法(借助IDE,它会给出警告信息。);
类方法可以直接调用类变量和类方法;
类方法不能直接调用实例变量和实例方法;
类方法里面不能使用“this”关键字,因为没有实例存在,“this”不知道引用哪个实例。
java中实例变量和类变量的区别是什么?
版权声明:本文为博主原创文章,未经博主允许不得转载。
简单来说:
类体的定义包括成员变量的定义和方法的定义。
1、成员变量包括实例变量和类变量;而成员方法包括实例方法、类方法,当然还有一种特殊的构造方法。
2、类变量、类方法就是类中的变量、方法,必须是静态的,要加static;故其又称静态变量、静态方法。
3、成员变量、成员方法是对象或实例中的变量、方法,不加static;
类变量:静态域,静态字段,或叫静态变量,它属于该类所有实例共有的属性,在内存中只有一个地方存储这个变量。而且所有的实例都可以修改这个类变量的值(前提是这个类变量没有被final修饰,否则是常量了),而且访问类变量的时候不用实例,直接用类就可以了。
类方法:和类变量一样,可以不用实例,直接用类就可以调用类方法。
实例变量:实例域,实例字段,或叫成员变量。
实例方法:或叫成员方法,必须先有实例,然后才能通过实例调用该实例方法。
使用方法:类方法可以直接调用类变量和类方法
类方法不可以直接调用实例变量和实例方法
类方法中没有this,因为没有实例,this不知道调用哪个实例
类方法可以从类里面直接访问类成员
实例方法可以调用类方法,访问类变量,但是不提倡这样做,会把类方法和类变量混淆成实例方法和实例变量
程序实例:
class AnIntegerNamedX {
int x; //这个是成员变量
public int x() { //成员方法
return x;
}
public void setX(int newX) { //成员方法
x = newX;
}
}
public class Practice{
public static void main(String args[]){
AnIntegerNamedX myX = new AnIntegerNamedX();
AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.x = 2;
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());
}
}
2:
class AnIntegerNamedX {
static int x; //这里写成static,结果就变成全是2了,因为类变量是被实例所共享的,包括myX和anotherX
调用anotherX时所有的所有实例都改变了。
public int x() {
return x;
}
public void setX(int newX) {
x = newX;
}
}
public class Practice{
public static void main(String args[]){
AnIntegerNamedX myX = new AnIntegerNamedX();
AnIntegerNamedX anotherX = new AnIntegerNamedX();
myX.setX(1);
anotherX.x = 2;
//这里把X的值改成2,所有实例的X都是2了,因为类变量是被所有实例共享的,任何实
例都可以对类变量做最终的修改
System.out.println("myX.x = " + myX.x());
System.out.println("anotherX.x = " + anotherX.x());
}
}
3:同样的,当把那两个方法都加上static变成类方法的时候,会提示错误让你把X变成静态,是应为类方法不能直接访问实例变量!
问:实例方法可直接调用本类的类方法吗?
先一一分析一下这几个东东:实例方法,实例变量,类方法,类变量。
实例变量(instance variable):或叫实例域、实例字段(instance field),或叫成员变量(member variable)。实例的变量,每个实例的变量可能不同。
实例方法(instance method):或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。
类变量(class variable):或叫静态域、静态字段(static field),或叫静态变量(static variable)。出现在这样的情况下:一个类的所有实例需要一个公有的属性,比如,一,统计实例个数;二,常量。类变量与类直接关联在一起。内存当中只有一个地方存放这个变量。任何实例都可以修改它的值(前提是它没有被final修饰符修饰,不然就是常量),但是,访问类变量并不需要实例,用类就可以操作了。
类方法(class method):跟类变量的基本特点一样。供类用的方法,可以没有实例,直接通过类来调用类方法。
从形式上看,类变量和类方法,比一般的变量和方法多了一个static修饰符。因为这个原因,类变量和类方法也被叫做静态变量和静态方法。
它们的使用方法:
实例方法可以直接访问实例变量,调用实例方法;
实例方法可以直接访问类变量,调用类方法。但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类方法误认为是实例方法(借助IDE,它会给出警告信息。);
类方法可以直接调用类变量和类方法;
类方法不能直接调用实例变量和实例方法;
类方法里面不能使用“this”关键字,因为没有实例存在,“this”不知道引用哪个实例。
java中实例变量和类变量的区别是什么?
实例变量是类实例化后,系统为其创建的一个类的实例变量的拷贝,即一个实例拥有一个实例变量。 类变量则是用static声明,系统为每个类变量分配一次存储空间。即所有的实例共享一个类变量。 例如一个银行帐户(Account)是一个class的话,可以把他的利息设为类变量(static float interest),而持有人是实例变量(String name), 这样只要改变 Account.interest就可以把所有人的利息都该了,而持有人的姓名则是属于单独的帐户的。 |
相关文章推荐
- 实例变量和成员变量的区别以及类方法的用法
- Objective-C 基本语法:实例变量与成员变量的区别.l........实例方法和类方法区别
- 关于静态变量,成员变量,静态方法,实例方法的用法及区别
- 父子实例的内存控制--继承成员变量和继承方法的区别
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- 成员变量、实例变量、类变量、成员方法、实例方法、类方法的区别
- Swift-结构体的实例变量以及成员方法,结构体与类的区别
- Java多态 实例子类自动调用父类为空的构造方法 成员变量不支持Override 可写,没多态效果
- OC基础:实例变量和成员变量的区别 分类: ios学习 OC 2015-06-14 17:59 16人阅读 评论(0) 收藏
- 局部变量,全局变量,成员变量,实例变量,类变量的区别
- java 基础之成员变量,成员方法和局部变量,实例方法
- iOS成员变量、实例变量、属性变量三者的联系与区别
- 实例变量与成员变量的区别 Objective-C
- 成员变量声明时初始化和构造方法中初始化的区别
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的区别
- 类成员变量和实例成员变量分别指什么有什么区别(举例说明)?
- 实例变量和成员属性之间的区别