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)与对象的相关性

静态变量不依赖于特定的实例,是所有对象共享的数据。静态变量属于类,在内存中只有一个复制(所有实例都指向同一个内存地址),只要静态变量所在的类被加载,这个静态变量就会被分配空间,即可被使用了。

成员变量是每个对象所特有的数据。成员变量属于对象,只有对象被创建后,成员变量才会被分配空间,才能被使用,它在内存中存在多个复制。

Java基础笔记(七)—— 成员变量、静态变量、局部变量的更多相关文章

  1. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  2. Java 读书笔记 (七) 变量

    Java语言中, 所有的变量在使用前必须声明.声明变量的基本格式: type identifier [ =value],[,identifier [=value]...]; 声明变量的实例,有些包含了 ...

  3. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...

  4. 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例

    内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...

  5. java常量,变量,静态变量的理解

    最近考试出了一个很简单的题,看看他们对java常量,变量,静态变量的理解,代码如下: public class TestVar { /** * JAVA基础,常量,变量,静态变量 */ public ...

  6. java入门---变量类型&类变量&局部变量&实例变量&静态变量

        在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下:     type identifier [ = value][, identifier [= value] ...] ; ...

  7. Objective-C 类,实例成员,静态变量,对象方法,类方法(静态方法),对象,

    Objective-C 类,实例成员,静态变量,对象方法,类方法(静态方法),对象, 一.类 在ios中,类的声明和实现时分离的,也就是说不能写在同一个文件中,声明放在 .h文件中,实现放在 .m 文 ...

  8. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  9. Java实习生常规技术面试题每日十题Java基础(七)

    目录 1. Java设计模式有哪些? 2.GC是什么?为什么要有GC? 3. Java中是如何支持正则表达式. 4.比较一下Java和JavaSciprt. 5.Math.round(11.5) 等于 ...

随机推荐

  1. Solaris/Linux 命令手册

    无意翻到之前收藏的一个文档,共享一下. Solaris/Linux 命令手册 1. 系统 # passwd:修改口令 # exit:退出系统 2. 文件 # cp:复制文件或目录,参数:-a递归目录, ...

  2. uoj problem 11 ydc的大树

    题目大意: 给定一颗黑白树.允许删除一个白点.最大化删点后无法与删点前距自己最远的黑点连通的黑点个数.并求出方案数. 题解: 这道题很棒棒啊. 一开始想了一个做法,要用LCT去搞,特别麻烦而且还是\( ...

  3. bzoj 3752: Hack 预处理+暴力dfs

    题目大意: 定义字符串的hash值\(h = \sum_{i=0}^{n-1}p^{n-i-1}s_i\) 现在给定K个长度不超过L的字符串S,对于每个字符串S,求字典序最小长度不超过L的字符串T使得 ...

  4. MySQL 和 InnoDB

    发现一篇总结的很不错的文章,转一下 (原文作者:Draveness   原文链接:https://draveness.me/mysql-innodb) 作为一名开发人员,在日常的工作中会难以避免地接触 ...

  5. 手动导入XMPPFramework框架

    环境: Xcode 8.2.1 XMPPFramework 3.6.5 (下载地址) Objective-C (项目使用的语言,最新版的3.7.0要求convert to swift) 1.下载XMP ...

  6. Uboot启动参数说明

    bootcmd=cp.b 0xc4200000 0x7fc0 0x200000 ; bootm // 倒计时到 0 以后,自动执行的指令 bootdelay=2 baudrate=38400 // 串 ...

  7. hive 集群初探,查询比较

    在slave3安装MySQL作为hive 的matastore [root@slave3 hadoop]# yum search mysql [root@slave3 hadoop]# yum ins ...

  8. 代码 c++实现动态栈

    //============================================================================ // Name : 栈.cpp // Au ...

  9. 写一个c程序辨别系统是大端or小端字节序

    字节序有两种表示方法:大端字节序(big ending),小端字节序(little  ending) 看一个unsigned short 数据,它占2个字节,给它赋值0x1234.若采用的大端字节序, ...

  10. C语言连接mysql -insert-update

    C语言连接mysql数据库实现insert语句:数据库:test表:systeminfo CREATE TABLE `systeminfo` (  `id` int(11) NOT NULL AUTO ...