Java千百问_03基本语法(001)_局部变量、类变量、实例变量有什么区别

简介:

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

在聊局部变量类变量实例变量有什么区别之前,我们需要了解一下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
  在CODE上查看代码片 派生到我的代码片
  1. int y=5;// 整型  
  2.   
  3. int x;  
  4. x=y+10;  
看了这个例子,可以总结出变量的定义:源于数学,是计算机语言中,能储存计算结果或能表示值的抽象概念。

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

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

 

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

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

如上面例子,类变量在类中用static关键字声明,在任意在方法构造函数代码块外部。

类变量在程序启动时被创建,在程序停止时被销毁。类变量被存储在静态存储器中。

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void doTest() {  
  2.     Test.classVar;  
  3. }  

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


3、常量是什么:

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

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


4、 实例变量是什么:

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void doTest() {  
  2.     Test test = new Test();  
  3.     test.instanceVar;//需要变量是public才能给外部对象使用  
  4. }  

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

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void doTest() {  
  2.     this.instanceVar;  
  3.     instanceVar;//也可以不加this直接使用  
  4. }  

5、 局部变量是什么:

如上面例子,局部变量在方法构造函数代码块中声明。

局部变量在进入方法、构造函数或块时创建,退出时被销毁。
局部变量在堆栈级别内部实现。
局部变量可以直接在方法中使用:
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public void doTest() {  
  2.   int partVar;// 局部变量  
  3.     partVar = 1 + 1;  
  4. }  


原文地址:http://blog.csdn.net/ooppookid/article/details/50969733
相关文章
WXM
|
1天前
|
Java
Java三种循环语句的使用与区别
在Java中,常用的循环语句包括for循环、while循环和do...while循环。for循环适合已知循环次数的情况,其格式为for(初始化; 条件; 更新) { // 循环体 }。while循环则适合条件不确定的情况,先判断条件再执行,格式为while(条件) { // 循环体 }。do...while循环至少执行一次循环体,格式为do { // 循环体 } while(条件);。三者的主要区别在于执行顺序:for和while先判断条件再执行,而do...while先执行再判断。此外,for循环的控制变量在循环外不可用,而while循环的变量可在外部使用。
WXM
19 2
|
7天前
|
开发框架 安全 Java
.net和java有什么样的区别?
Java和.NET在本质、编程语言、生态系统与工具、跨平台性、应用领域、性能与效率以及安全性与可靠性等方面都存在明显的区别。选择哪个平台取决于具体的需求、技术栈和目标平台。
33 7
|
5天前
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
17 3
|
5天前
|
存储 算法 Java
Java类是在什么时候加载到JVM中的?加载类时,实际上加载的是什么
Java类是在什么时候加载到JVM中的?加载类时,实际上加载的是什么
|
8天前
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
14天前
|
存储 算法 Java
JAVA内存模型与JVM内存模型的区别
JAVA内存模型与JVM内存模型的区别
|
2天前
|
Java 程序员 调度
Java中的多线程编程:概念、实现及性能优化
【5月更文挑战第85天】本文主要探讨了Java中的多线程编程,包括其基本概念、实现方式以及如何进行性能优化。首先,我们将介绍多线程的基本概念,然后详细讨论如何在Java中实现多线程,包括继承Thread类和实现Runnable接口两种方式。最后,我们将探讨一些提高多线程程序性能的策略,如使用线程池和减少同步开销等。
|
2天前
|
监控 Java 开发者
深入理解Java并发编程:线程池的原理与实践
【5月更文挑战第85天】 在现代Java应用开发中,高效地处理并发任务是提升性能和响应能力的关键。线程池作为一种管理线程的机制,其合理使用能够显著减少资源消耗并优化系统吞吐量。本文将详细探讨线程池的核心原理,包括其内部工作机制、优势以及如何在Java中正确实现和使用线程池。通过理论分析和实例演示,我们将揭示线程池对提升Java应用性能的重要性,并给出实践中的最佳策略。
|
3天前
|
安全 Java 数据处理
Java并发编程:线程同步与协作的深度解析
在探索Java并发编程的海洋中,线程同步与协作的灯塔指引着航向。本文将深入挖掘线程同步机制的核心原理,揭示锁、条件变量等工具如何确保数据的一致性和线程间有序的通信。通过案例分析,我们将解码高效并发模式背后的设计哲学,并探讨现代Java并发库如何简化复杂的同步任务。跟随文章的步伐,您将获得提升多线程应用性能与可靠性的关键技能。 【7月更文挑战第24天】
17 5
|
2天前
|
Java
如何在Java中实现线程池?
在Java中,线程池是高效管理线程的关键机制,避免了无限制创建线程的资源浪费和系统不稳定。通过`Executor`和`ExecutorService`接口,代码与具体线程池实现解耦,提供灵活性。`Executors`类简化线程池创建,适合基本需求