Java千百问局部变量、类变量、实例变量有什么区别

局部变量、类变量、实例变量有什么区别

在聊局部变量、类变量、实例变量有什么区别之前,我们需要了解一下Java变量。

1、Java变量是什么

在数学世界中,我们知道有常量、变量。
举一个例子,小红和小蓝每个人都有带了钱,小蓝带了5元,小红的钱比小蓝多10元。对于这样一个场景,我们一般会使用方程式表达:
设小红的钱为x,小蓝的钱为y,其中x,y都是数字,得出方程式:
y=5;
x=y+10;
我们看一下这个过程,首先假设了2个x、y两个变量,然后根据逻辑写出2个为x、y赋值的方程式,方程式中有5、10两个常量。
在程序世界中,同样也有常量、变量。
与数学世界一样,我们会先声明变量(即数学中的假设变量,不同的是需要指定类型,不会占用内存),然后根据需要为变量赋值(这时会分配内存)。上面的例子用程序写出即:

[java] view plain copy  
  1. int y=5;// 整型
  2. int x;
  3. x=y+10;

看了这个例子,可以总结出变量的定义:源于数学,是计算机语言中,能储存计算结果或能表示值的抽象概念。

在Java中,变量大体分为以下4类:类变量、常量、实例变量、局部变量

[java] view plain copy
  1. public class Test {
  2. public static int classVar;// 类变量,即静态变量,关键词static
  3.     public static final int constant = 10;// 常量,关键词static,final,是一种特殊的类变量,一定要在声明时赋值
  4. public int instanceVar;// 实例变量
  5. public void doTest() {
  6. int partVar;// 局部变量
  7.     }
  8. }

明白了变量的概念后,我们分别看看Java中局部变量、类变量、实例变量、常量的区别。

2、类变量(静态变量)是什么:

如上面例子,类变量在类中用static关键字声明,在任意在方法、构造函数或代码块外部。 类变量在程序启动时被创建,在程序停止时被销毁。类变量被存储在静态存储器中。

类变量通过调用的类名来访问。 如:

[java] view plain copy  
  1. public void doTest() {
  2.     Test.classVar;
  3. }

类变量与对象毫无关系,无论有没有创建对象,创建了多少个对象,一个类变量永远只有一个副本。

3、常量是什么:

常量是标记为final关键字的类变量,类变量的特性常量均有,再次列出与类变量的区别。
如上面例子,声明常量时必须赋值,且赋值后不能改变其值。
常量名称一般都需要大写。

类变量被存储在常量存储器中。

4、 实例变量是什么:

如上面例子,实例变量在类中声明,在任意在方法、构造函数或代码块外部。
实例变量在一个对象"new"时创建,在对象被销毁时销毁。
实例变量是对象的一部分,同对象一样存储在堆中。
实例变量通过对象来访问。如果提供给外部对象的方法使用:

[java] view plain copy  
  1. public void doTest() {
  2.     Test test = new Test();
  3.     test.instanceVar;//需要变量是public才能给外部对象使用
  4. }

如果提供给对象自己的方法使用:

[java] view plain copy  
  1. public void doTest() {
  2.     this.instanceVar;
  3.     instanceVar;//也可以不加this直接使用
  4. }

5、 局部变量是什么:

如上面例子,局部变量在方法、构造函数或代码块中声明。
局部变量在进入方法、构造函数或块时创建,退出时被销毁。
局部变量在堆栈级别内部实现。
局部变量可以直接在方法中使用:

[java] view plain copy  
  1. public void doTest() {
  2.   int partVar;// 局部变量
  3.     partVar = 1 + 1;
  4. }
点击进入ooppookid的博客

Java千百问局部变量、类变量、实例变量有什么区别相关推荐

  1. Java千百问_03基本语法(002)_java都有哪些关键字

    java都有哪些关键字 首先我们来看看什么是关键字,关键字的含义. 1.java关键字是什么意思 关键字是电脑语言里事先定义的,有特别意义的特殊标识符,又叫保留字. Java的关键字对Java的编译器 ...

  2. Java千百问_05面向对象(004)_java接口到底是什么

    1.什么是接口 接口(interface)不是一个类,它是抽象方法的集合.一个类实现一个接口,从而继承和实现接口的抽象方法.  抽象方法看这里:java中抽象概念如何体现的 接口的特点如下,先看与类类 ...

  3. Java千百问_01基本概念(007)_线程的状态有哪些

    点击进入_更多_Java千百问 1.线程的状态有哪些 在java中java.lang.Thread类有一个变量threadStatus,标示了该线程的当前状态,它是一个int类型,但是对应的get方法 ...

  4. Java千百问_03基本的语法(005)_二进制是如何做位运算的

    点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种 ...

  5. Java千百问_07JVM架构(015)_XmnXmsXmxXss有什么区别

    点击进入_更多_Java千百问 1.XmnXmsXmxXss有什么区别 首先,Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. ...

  6. Java千百问_07JVM架构(009)_什么是新生代的复制算法

    点击进入_更多_Java千百问 1.什么是新生代的复制算法 了解堆内存看这里:java堆内存是什么样的 了解java垃圾回收看这里:java垃圾回收机制是什么 所谓复制算法(Copying),即将内存 ...

  7. Java千百问_01基本概念(012)_Socket是什么

    [点击进入_更多_Java千百问][1] [1]: http://blog.csdn.net/ooppookid/article/category/6134850 ###1.什么是Socket Soc ...

  8. Java千百问_05面向对象(012)_泛型是什么

    1.什么是泛型 泛型是Java SE 1.5的新特性,泛型即参数化类型,也就是说所操作的数据类型被指定为一个参数.  这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.  ...

  9. Java千百问_06数据结构(014)_java数组如何存储在内存中

    1.数组的内存空间是何时分配的 Java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程.即使某个元素被清空,但其所在空间仍 ...

最新文章

  1. Solr索引数据同步ReplicationHandler
  2. 一、linux的安装
  3. Python专家编程
  4. 容器资源需求、资源限制(二十二)
  5. 如何让帝国CMS7.2搜索模板支持动态标签调用
  6. mysql 空闲几分钟速度变慢,MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本空闲状态...
  7. asp.net应用程序无法连接oracle数据库,2020:ASP连接Oracle数据库问题的解决过程
  8. Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
  9. Spring+Struts集成(方案一)
  10. 如何让内容页调用样式表?
  11. APT入门知识:抗击APT和针对性攻击
  12. Task5:第五回:样式色彩秀芳华
  13. 简述JVM垃圾回收机制
  14. 复合函数求导经典例题_复合函数求导公式大全_复合函数求导法则_复合函数求导经典例题_复合函数求导导学案...
  15. 庞果答题:亿阳信通:不可表示的数 的一个人见解(8-13第二次更新。)
  16. 金蝶K3 SQL报表系列-委外未勾稽明细表金蝶K3 SQL报表系列-委外未勾稽明细表
  17. 初涉VB.NET入门级代码积累
  18. 针对ONION勒索病毒!如何关闭139端口及445端口等危险端口
  19. Codeforces--1294C--Product of Three Numbers
  20. java虚拟机读书笔记 第三章 垃圾收集器和内存分配策略

热门文章

  1. 数据仓库3级范式(3NF)基础
  2. unicode学习笔记
  3. Android自定义布局的背景在多分辨率的情况下设置fill_parent时背景不能够横向全屏的问题解决...
  4. android 用LruCache读取大图片并缓存(转)
  5. NextArch Foundation 下一代架构基金会
  6. Datamill 一个开源的框架
  7. 常用的开源中文分词工具
  8. e人e本 html文件上传乱码,打印操作规范引发的乱码故障怎么处理
  9. 深度学习---循环神经网络RNN详解(LSTM)
  10. 电压压力蕊片_陶瓷压力传感器工作原理、结构及分类