[好程序员训练营]java基础笔记之static关键字的学习
来源:互联网 发布:mac这么删除用户 编辑:程序博客网 时间:2024/05/20 15:58
<A href="http://www.goodprogrammer.org/" target="blank">android培训</a>------我的java笔记,期待与您交流!
以前遇到static关键字有些时候容易犯浑,今天来把static关键字的用法来整理一下.
开始做笔记!
一:static就是静态的意思,可以修饰成员变量和成员方法.
二:被静态修饰的成员的特点:
1,随着类的加载而加载,也正因为如此,才使得静态的成员优先于对象存在.
2,被静态修饰的成员被类所有的对象所共享.
3,可以通过类名调用,也可以通过对象调用.一般是通过类名调用.
下面附图一张来说明static用法:
我们可以看到在上图中,我们可以用实例对象s1,s2调用静态修饰的staticMark,可以说明静态修饰的成员是被该类所有成员所共享的,其实该静态成员是以字节码形式放在数据共享区中,有且只有一份,被该类的所有的实例对象所共享.
而我们也可以直接用Student类名来调用,这就说明static修饰的成员可以用类名直接方便的调用
刚才我们在静态方法中调用静态成员可以,现在我们在非静态方法中调用静态成员行不行呢?
可以看到我们在一个普通的method方法中调用静态修饰的成员依旧可以,并且可以运行,所以可以在非静态成员中调用静态成员,其实原因就是静态成员随着类的加载而加载,故优先于实例对象存在,所以后来的实例对象当然可以找到先存在的静态成员,然后去调用它.
但是我们可以想一下,如果在静态中调用非静态会怎么样呢,按照刚才的猜想应该是失败的,因为静态是先加载的,调用还未加载的非静态是不行的
下面就代码论证一下
我们可以看到在static修饰的main()方法中,调用该类的非静态成员method()方法和成员变量temp都不行,报的错是
这两句话都是在说不能再静态中引用非静态成员,原因就是先后加载的问题.
三:区别一下静态成员变量和非静态成员变量:
首先:1,所属不同:静态成员变量属于类,是类变量,
非静态成员变量属于实例对象,是成员变量.
2,内存位置不同:前者在内存中的数据共享区(静态方法区)
后者在堆内存;
3,生命周期不同:前者是随着类的加载而加载,随着类的消失而消失
后者是随着对象的加载而加载,随着对象的消失而消失.
4,调用不同:前者可以通过类名,对象调用
后者只能通过对象调用
- [好程序员训练营]java基础笔记之static关键字的学习
- [好程序员训练营]java基础笔记之new关键字
- [好程序员训练营]java基础之IO笔记
- [好程序员训练营]java基础之集合篇笔记
- [好程序员训练营]----java基础之多线程部分学习笔记
- [好程序员训练营]java基础之this和super笔记
- 学习java基础之关键字static
- [好程序员训练营]java基础之抽象类和接口的区别小结
- [好程序员训练营]-----java基础笔记之设计模式之单例模式和工厂模式
- Java学习笔记之关键字static
- Java学习笔记之static关键字。
- java学习笔记之static关键字
- 黑马训练营——java基础—static关键字
- 黑马程序员学习笔记 之 JAVA 基础篇【static的应用】
- 【好程序员训练营】Java线程学习
- Java学习之关键字static的学习
- java学习笔记-static关键字的用法
- java基础之static关键字
- 黑马程序员——c语言部分基础
- 标准C++的类型转换符
- 一个Python用户的天文相关Python资料收集
- python3 字符串
- CSDN-markdown编辑器使用简介
- [好程序员训练营]java基础笔记之static关键字的学习
- Android学习系列(7)--App消息推送机制[天幕杯]
- Cocos2dx 截图方式 汇总
- 数据结构学习总结(二) 线性表
- android Notification 的使用
- Quagga使用笔记2
- (10.1.2)Windows Phone灵魂诠释:Metro UI界面完全解析
- 【Spring】从源码分析Spring配置文件的加载
- Android 解决ADB server didn't ACK问题