static成员与非静态成员的区别以及使用方法
来源:互联网 发布:linux解压rar命令 编辑:程序博客网 时间:2024/05/20 04:49
先简单的说一下,类中用 static 关键字修饰的成员都是静态成员,是这个类通用的特征( 属性 )行为( 方法 );而不用 static 修饰的成员即为非静态成员,或者叫实例成员,对于用同一个类实例出的每一个对象,都有他自己的一套实例成员,贵自己的实例对象独有。
使用方法如下:
静态成员一般通过类名调用,也可以通过对象来调用,或者在所在类的其他方法( 可以是静态,也可以是非静态 )里直接使用(不管如何调用,只要记住一点:同类所有对象共用同一个静态成员)。但是在静态方法里,只能直接访问静态成员,不能直接访问非静态成员。(要想在静态方法里访问非静态成员,可以实例该类的一个对象,然后在通过对象调用非静态成员。)
非静态成员只能通过实例调用,别无他法。
只要记住一点:把 static 成员和非静态成员彻底分隔开,他们各自作用不同,用法不同,之间没有任何联系。
class Test{
static int b = 999;
int a = 4;
void m1(){
Test obj1 = new Test();
System.out.print("m1: "+a+" "+obj1.a);
a=1;
System.out.print(" "+a+" "+obj1.a);
obj1.a=2;
System.out.println(" "+a+" "+obj1.a);
obj1.m2();
System.out.println("m1: "+a+" "+obj1.a); // Tag1:可以很好的观察m2方法中的a究竟代表什么
}
void m2(){
Test obj2 = new Test();
System.out.print("m2: "+a+" "+obj2.a);
a=8;
System.out.print(" "+a+" "+obj2.a);
obj2.a=9;
System.out.println(" "+a+" "+obj2.a);
System.out.print(b); //在非静态方法中直接使用静态成员(相当于通过对象调用)
m3(); //在非静态方法中直接使用静态成员(相当于通过对象调用)
// obj2.m1(); // Tag2:当本语句被释放,同时Tag1被注释,会有不错的死循环效果
}
static void m3(){
System.out.println(b);
b=666; //静态方法只能调用其他静态成员(也包括方法)
// a=666; //静态方法不能调用非静态属性(也不能调用静态方法)
}
public static void main(String [ ] args){
System.out.println(" : a obj a obj a obj");
Test obj = new Test();
// obj.a=5; // Tag3:帮助你充分理解:类中的属性是对象的属性
obj.m1();
System.out.println("main: "+obj.a);
Test.m3(); //通过类名调用静态方法
m3(); //在静态方法内,可以直接调用本类的其他静态成员
obj.m3(); //通过对象调用静态方法
System.out.println(Test.b);
System.out.println(b);
System.out.println(obj.b); //通过对象调用静态属性
// System.out.println(a); //main也是静态方法,当然不能直接访问非静态属性
}
}
static int b = 999;
int a = 4;
void m1(){
Test obj1 = new Test();
System.out.print("m1: "+a+" "+obj1.a);
a=1;
System.out.print(" "+a+" "+obj1.a);
obj1.a=2;
System.out.println(" "+a+" "+obj1.a);
obj1.m2();
System.out.println("m1: "+a+" "+obj1.a); // Tag1:可以很好的观察m2方法中的a究竟代表什么
}
void m2(){
Test obj2 = new Test();
System.out.print("m2: "+a+" "+obj2.a);
a=8;
System.out.print(" "+a+" "+obj2.a);
obj2.a=9;
System.out.println(" "+a+" "+obj2.a);
System.out.print(b); //在非静态方法中直接使用静态成员(相当于通过对象调用)
m3(); //在非静态方法中直接使用静态成员(相当于通过对象调用)
// obj2.m1(); // Tag2:当本语句被释放,同时Tag1被注释,会有不错的死循环效果
}
static void m3(){
System.out.println(b);
b=666; //静态方法只能调用其他静态成员(也包括方法)
// a=666; //静态方法不能调用非静态属性(也不能调用静态方法)
}
public static void main(String [ ] args){
System.out.println(" : a obj a obj a obj");
Test obj = new Test();
// obj.a=5; // Tag3:帮助你充分理解:类中的属性是对象的属性
obj.m1();
System.out.println("main: "+obj.a);
Test.m3(); //通过类名调用静态方法
m3(); //在静态方法内,可以直接调用本类的其他静态成员
obj.m3(); //通过对象调用静态方法
System.out.println(Test.b);
System.out.println(b);
System.out.println(obj.b); //通过对象调用静态属性
// System.out.println(a); //main也是静态方法,当然不能直接访问非静态属性
}
}
(个人见解,仅供参考。欢迎提出不同见解,共同讨论!)
- static成员与非静态成员的区别以及使用方法
- static关键字的作用以及静态成员函数与非静态成员函数的区别
- 静态成员与非静态成员区别
- 静态成员函数与非静态成员函数的区别
- 静态数据成员与非静态数据成员的区别
- 静态类与非静态类,静态成员的区别
- 类的静态成员和非静态成员的区别
- 静态成员和非静态成员的区别?
- 静态成员和非静态成员的区别
- 静态成员和非静态成员的区别
- 静态成员和非静态成员的区别
- 静态成员和非静态成员的区别?
- 静态成员和非静态成员的区别
- c++静态成员和非静态成员的区别
- 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别?
- C++静态成员和非静态成员的区别
- 静态成员变量和非静态成员变量的区别
- HWK:A doubly linked list using class
- 手工焊接CPU断针全过程
- 局域网故障诊断工具软件支持介绍
- mexil
- Sql Server 2005 中Analysis Services无法连接
- static成员与非静态成员的区别以及使用方法
- 【学习逆向工程,分析机器代码】(一)(C语言篇)
- 产品经理的第一堂课(十七):新产品发布之一
- 释:FoxMail的25号端口被占用问题
- How to communicate with your boss.
- 自信的力量
- GRA文件格式分析
- 向大家推介一个高效数据转换工具(DBConvert)
- 技术及营销人员利用博客出名的10大秘笈