java学习总结(16.06.07)类的静态成员和非静态成员
来源:互联网 发布:8月份新出网络项目 编辑:程序博客网 时间:2024/06/07 14:03
java里,类的成员可分为静态成员和非静态成员(实例成员),静态成员和非静态成员,从定义上来说就是有没有static修饰符修饰的区别。有static修饰的成员就是静态成员。如
public static void fun1();//静态方法fun1public void fun2();//非静态方法fun2public static int a//静态变量apublic int b;//非静态变量b
关于static修饰符的意义:
- 变量一直存在;
- 不能被其他文件访问的全局变量和函数;
- 属于类且不属于对象的全局变量和函数。
(斜体部分源自知乎:https://www.zhihu.com/question/20834765/answer/16364708)
静态成员:
①有static修饰符修饰,属于一个类而不是某个对象。
②使用方法: 类名.静态成员名,也可以对象名.静态成员名.静态成员名,但不建议这么做因为不规范,IDE会报警告
③生存期:当类的字节码被加载到内存时,静态方法和静态变量就会被分配内存,直到程序结束时,静态成员的所占内存才会被释放。
④静态成员在该类的每一个对象中都是相同的
⑤静态方法不可以直接调用非静态方法和非静态变量
public class TestForStatic {private static int a=1;private int b=2;public static void staticFun(){a++;//Cannot make a static reference to the non-static field bnonStaticFun();//Cannot make a static reference to the non-static method nonStaticFun() from the type TestForStaticpublic void nonStaticFun(){a++;b++;}}
非静态成员:
①非静态成员也叫实例成员,它是属于某个对象的,而非类。
②使用方法:对象名.非静态成员名
③生存期:当新建一个对象时,该对象的实例变量就会被分配内存(实例方法在类的字节码被加载到内存是已经被分配了内存,只是不创建一个对象就无法调用),而当程序运行到对象的作用域外时,对象所占内存会被释放,而此时实例成员所占内存就会被释放掉
④非静态方法可以直接调用静态成员和非静态成员
对于静态方法不能直接调用非静态方法和非静态变量的理解:
对于非静态方法,它除了参数列表里的显式参数外还有一个隐式参数this(代表调用方法的对象),而静态方法并没有this参数,因此静态方法无法得知应该对哪一个对象的非静态成员进行操作。就好比你叫一个人吃馒头,又不告诉他吃谁的馒头,他就不知道要吃谁的馒头了
也有一种说法是,静态成员的作用域比非静态成员的作用域广,静态方法存在时,也许并没有对象的实例成员,因此无法对非静态成员进行操作。就好比你饿了想吃馒头,然而根本就没有馒头,所以你就吃不了馒头了
什么时候使用静态成员比较好?(在网上到处找了一下)
①当类的所有对象需要共享某个数据成员时,可将该数据设为静态数据成员,如Student类的studentnumber。
②当某个方法具体实现与对象无关时,可将其设为静态方法。
③如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快.
最后附上我在某博客看到的一句话,“通过滥用静态方法以达到在面向对象的语言中继续进行面向过程的编程,这是很可怕的”
- java学习总结(16.06.07)类的静态成员和非静态成员
- java学习总结(16.06.07)类的静态成员和非静态成员
- 类的静态成员和非静态成员的区别
- C++中类内成员的定义,声明总结(静态和非静态成员)
- 静态类和静态类成员以及非静态类的静态成员
- 静态成员和非静态成员
- 静态成员和非静态成员
- 指向类的静态和非静态成员的指针
- 静态成员和非静态成员的区别?
- 静态成员和非静态成员的区别
- 静态成员和非静态成员的区别
- 静态成员和非静态成员的区别
- 静态成员和非静态成员的区别?
- 静态成员和非静态成员的区别
- c++静态成员和非静态成员的区别
- 静态成员函数和非静态成员函数的区别?
- 静态成员函数和非静态成员函数的区别?
- 静态成员和非静态成员的细节
- 【经验】C语言编程最常见的15个错误【写给粗心的同学】
- 博客,也可以用来学习,今天申请开通CSDN博客 ,希望以此帮助自己学好C++
- Happy Number
- 陶哲轩实分析-第12章 度量空间
- 常用的两种spring、mybatis 配置方式
- java学习总结(16.06.07)类的静态成员和非静态成员
- mysql 执行状态分析 show processlist
- 网络七层协议
- 大数加法
- VS2013 编程环境设置,如何显示C++程序行号。
- C++ 隐藏系统托盘图标(支持XP-Win10)
- TCP/IP协议栈的基本工作原理
- objective-C 编程全解-第07章 属性声明
- 一个过了大学英语四级,没过六级的36岁,烤鸭,雅思经历(1),个人原创