Java学习之局部变量、成员变量举例详解

 更新时间:2025年02月18日 10:16:51   作者:Code哈哈笑  
这篇文章主要介绍了Java中的成员变量和局部变量,包括它们的定义、特点、初始化、作用域和生命周期等,文中通过代码介绍的非常详细,需要的朋友可以参考下

1. 什么是成员变量?什么是局部变量?

局部变量成员变量是两种常见的变量类型,它们在作用域、生命周期、初始化等方面有显著的区别。理解这两者的区别对于编写清晰和高效的 Java 程序至关重要。

  • 创建局部变量,然后打印局部变量:

    public static void main(String[] args){
            String brand; // 品牌
            String color ;  // 颜色
            int memory;  // 内存
            System.out.println("brand:"+ brand);
            System.out.println("color:"+ color);
            System.out.println("memory:"+ memory);
    
        }
    

    不初始化就会报错

  • 创建一个类,在类中创建成员变量,然后创建对象,打印出对象的成员变量:

    public class Phone {
        String brand; // 品牌
        String color ;  // 颜色
        int memory;  // 内存
    
    
        // 程序的开始
        public static void main(String[] args){
            Phone p = new Phone();
            System.out.println("brand:"+ p.brand);
            System.out.println("color:"+p.color);
            System.out.println("memory:"+p.memory);
    
        }
    }
    
    

    不初始化,而打印出了值

通过上述的两个测试,我们可以发现,在类中创建的成员变量有默认值,即,成员变量不用初始化就会有一个值,而局部变量必须手动赋值。

2. 成员变量

2.1 定义和特点

成员变量是类中的字段(属性),它们是类的组成部分。

成员变量有两种类型

  • 实例变量 (Instance Variables):属于类的实例(对象),每个对象有一份独立的实例变量。
  • 类变量 (Class Variables):使用 static 关键字声明,属于类本身,而不是类的任何实例。

2.2 实例变量

  • 实例变量是类中定义的字段,每个类的实例(对象)都有自己的实例变量副本。
  • 实例变量在对象创建时被分配内存,每个对象都有独立的实例变量。
  • 实例变量具有默认值:如果未显式初始化,实例变量会根据其类型自动赋予默认值(例如,int 类型默认为 0,boolean 默认为 false,对象引用类型默认为 null)。
  • 实例变量在类的实例化期间存在,当对象被销毁时,实例变量也会被销毁。

示例:

public class Example {
    private int x;  // 实例变量 默认值为0

    public void printX() {
        System.out.println(x);  // 访问实例变量
    }
}

在这个例子中,x 是实例变量。每当你创建一个 Example 对象时,都会为每个对象分配一个 x 变量,并且每个对象有自己的 x 值。

2.3 类变量

  • 类变量使用 static 关键字声明,它们属于类本身,而不是类的实例。
  • 类变量在类加载时就会被初始化,并且所有类的实例共享同一个类变量。
  • 类变量有默认值,如果未显式初始化,它们也会被赋予默认值(与实例变量相同)。

示例:

public class Example {
    static int count;  // 类变量

    public void increment() {
        count++;  // 访问类变量
    }
}

在这个例子中,count 是类变量。所有Example 类的实例共享同一个 count 变量,类变量在类加载时初始化。

2.4 成员变量的默认值

数据类型默认值
byte0
char‘\u0000’
short0
int0
long0L
booleanfalse
float0.0f
double0.0
referencenull

3. 局部变量

3.1 定义和特点

  • 局部变量是在方法、构造方法、或者代码块内定义的变量。
  • 局部变量的作用域仅限于它们被声明的代码块或方法。
  • 局部变量没有默认值,必须在使用前初始化。
  • 局部变量的生命周期从其定义开始,到方法或者代码块执行完毕时结束。换句话说,局部变量只存在于方法或代码块的执行过程中,一旦方法返回或代码块执行完毕,局部变量会被销毁。

3.2 示例和说明

public class Example {
    public void myMethod() {
        int x = 10;  // x 是局部变量 必须要被初始化
        System.out.println(x);  // 可以使用局部变量
    }
}

在这个例子中,x 是局部变量,它只在 myMethod() 方法内部存在。当方法执行完毕,x 会被销毁。

关键特点

  • 作用域:局部变量的作用域限制在其所在的方法、构造方法或代码块内。
  • 初始化:局部变量在使用前必须被显式初始化。否则,编译器会报错。
  • 生命周期:局部变量的生命周期是方法或者代码块的执行周期,即方法/代码块开始执行时创建,结束时销毁。

注意事项

  • 局部变量的作用域仅限于方法内,因此它不能被方法外部访问。
  • 局部变量不能声明为 static,因为它的生命周期与方法的调用有关,而不是与类的实例或类本身的生命周期有关。

4. 局部变量 vs 成员变量

特性局部变量成员变量 (实例变量/类变量)
定义位置方法、构造器、代码块中类中,方法外
初始化必须显式初始化会自动初始化为默认值(实例变量/类变量)
作用域仅限于所在的方法/代码块实例变量:限于对象;类变量:限于类
生命周期方法/代码块执行期间实例变量:对象的生命周期;类变量:类的生命周期
访问修饰符无法使用访问修饰符可以使用访问修饰符 publicprivate 等
是否与类相关实例变量与对象相关;类变量与类本身相关
静态关键字不可以是 static类变量必须是 static

局部变量:只在方法、构造方法、或代码块内有效,必须显式初始化,并且生命周期仅限于方法或代码块执行时。

成员变量:包括实例变量和类变量,实例变量属于对象,类变量属于类,成员变量有默认值,生命周期较长,且可以使用访问修饰符来控制访问权限。

总结

到此这篇关于Java学习之局部变量、成员变量的文章就介绍到这了,更多相关Java局部变量、成员变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • hibernate4基本配置方式详解

    hibernate4基本配置方式详解

    这篇文章给大家带来了hibernate4基本配置方式,非常不错,具有参考借鉴价值,需要的额朋友参考下吧
    2017-09-09
  • Java中五种不同方法的创建对象

    Java中五种不同方法的创建对象

    本文为大家详细介绍了在Java中5种不同创建对象的方法和实例代码,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Java实现ArrayList排序的方法详解

    Java实现ArrayList排序的方法详解

    Java中常见的ArrayList排序方法主要为三种:JDK8的stream、Comparator#compare()和Comparable#compareTo(),本文将详解这三者的使用,需要的可以参考一下
    2022-05-05
  • 解析Java中所有错误和异常的父类java.lang.Throwable

    解析Java中所有错误和异常的父类java.lang.Throwable

    这篇文章主要介绍了Java中所有错误和异常的父类java.lang.Throwable,文章中简单地分析了其源码,说明在代码注释中,需要的朋友可以参考下
    2016-03-03
  • java如何读取某个文件夹中的全部文件(包括子文件夹)

    java如何读取某个文件夹中的全部文件(包括子文件夹)

    这篇文章主要介绍了java如何读取某个文件夹中的全部文件(包括子文件夹),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • springboot整合freemarker的踩坑及解决

    springboot整合freemarker的踩坑及解决

    这篇文章主要介绍了springboot整合freemarker的踩坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • nacos使用占位符${}进行参数配置的方法

    nacos使用占位符${}进行参数配置的方法

    这篇文章主要介绍了nacos如何使用占位符${}进行参数配置,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Hadoop上Data Locality的详解

    Hadoop上Data Locality的详解

    这篇文章主要介绍了 Hadoop上Data Locality的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 使用Java实现加密之AES加解密

    使用Java实现加密之AES加解密

    这篇文章主要介绍了使用Java实现加密之AES加解密,AES为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
    2023-05-05
  • 如何从request中获取body的数据

    如何从request中获取body的数据

    这篇文章主要介绍了如何从request中获取body的数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论