Java基础笔记(七)—— 成员变量、静态变量、局部变量
public class Test {
int c; //成员变量(实例变量)
static int s1; //静态变量(类变量)(全局变量)
public static void main(String[] args){
//static int s2; //局部变量不允许static定义
int b; //局部变量
Test t=new Test();
System.out.println(t.c); //成员变量系统会提供默认初始值,随着对象创建而存在(实例变量) b=1;
System.out.println(b); //局部变量使用前必须得赋值,系统不会默认初始化 // 静态变量随着类的加载而存在,所有对象共享
System.out.println(t.s1);
Test t1=new Test();
t1.s1=2; //其中一个对象将其值改变,即共享数据改变了。
System.out.println(t1.s1);
System.out.println(s1);
System.out.println(Test.s1);
}
}
(1)作用域
成员变量:有4种修饰符决定成员变量的可见性。如表1所示。
局部变量:它所在的花括号内。
静态变量:同成员变量。
public:表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直接访问。
private:表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其它类或对象都没有访问权限。
protected:表明成员变量或方法对该类自身、与它在同一个包中的其它类、在其它包中的该类的子类都可见。
default:表明该成员变量或方法只有自己和与其位于同一包内的类可见。若父类与子类位于同一个包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package内,则没有访问权限。
这些修饰符只能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰类(只有public、abstract、final 能用来修饰类)。
(2)存储位置
成员变量:存储在堆内存中。
局部变量:存储在栈内存中。
静态变量:存储在方法区中。
(3)初始值
成员变量:有默认初始值。
局部变量:没有默认初始值,使用前必须赋值。
静态变量:有默认初始值。
(4)调用方式
成员变量:对象.实例变量
静态变量:类.静态变量 或者 对象.静态变量
局部变量:直接用。
(5)生命周期
成员变量:与类的实例化对象作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束,成员变量的生命周期才结束。
静态变量:只要类被加载,JVM就会给类的静态变量分配存储空间。
局部变量:在方法被调用,或者语句被执行的时候存在,当方法调用完,或者语句结束后,就自动释放。
(6)与对象的相关性
静态变量不依赖于特定的实例,是所有对象共享的数据。静态变量属于类,在内存中只有一个复制(所有实例都指向同一个内存地址),只要静态变量所在的类被加载,这个静态变量就会被分配空间,即可被使用了。
成员变量是每个对象所特有的数据。成员变量属于对象,只有对象被创建后,成员变量才会被分配空间,才能被使用,它在内存中存在多个复制。
最新文章
- pymol installation
- csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别
- NSString 的常用操作
- python 列表 总结
- Oracle Recommended Patches -- ";Oracle JavaVM Component Database PSU"; (OJVM PSU) Patches (文档 ID 1929745.1)
- 十五个常用的jquery代码段
- 电商CRM的痛点在哪里?
- Arch Linux sudo: PAM authentication error: Module is unknown [Solved!]
- iOS 面试题及答案
- Shell脚本———— /dev/null 2>;&;1详解
- HDU 3001 Traveling(状压DP)
- ARM map(Program size)
- HTML5 canvas文本属性与方法
- 【集训笔记】博弈论相关知识【HDOJ 1850【HDOJ2147
- java RC4加密和解码
- ASP.NET core1.0 EF MYSQL搭建中碰到几个问题记录
- openssl几个加密算法使用介绍
- 周一02.3运行python程序的两种方式
- Session与Cookie(自定义Session)
- java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
热门文章
- MySQL_西安11月销售昨日未上架的产品_20161212
- bzoj 4103: 异或运算 可持久化Trie
- 汇编题目:在屏幕中间显示a-z的所有字母,按ESC键改变字符颜色
- SQL 常用语句收集
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
- 1 slow requests are blocked >; 32 sec解决方法
- k8s基础 etcd参数
- shell入门-wc
- Intent的简单概述
- eclipse中使用Maven插件报错:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.