当前位置: 首页 > 编程笔记 >

java中成员变量与局部变量区别分析

陈业
2023-03-14
本文向大家介绍java中成员变量与局部变量区别分析,包括了java中成员变量与局部变量区别分析的使用技巧和注意事项,需要的朋友参考一下

本文实例分析了java中成员变量与局部变量区别。分享给大家供大家参考。具体分析如下:

成员变量:在这个类里定义的私有变量,属于这个类。
创建以及使用成员变量

public class Person {

    String name;

    String Sex;

    int age;

    double Height;

    

    public static void main(String arges[])

    {

        Person p=new Person();

        p.name="小黄";

        p.Sex="男";

        p.age=20;

        p.Height=1.7;

        System.out.println("姓名:"+p.name+",性别"+p.Sex+",年龄:"+p.age+",年龄:"+p.Height);

    }

}

成员变量初始化过程

一、类的初始化

对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量。
类的编译决定了类的初始化过程。
编译器生成的class文件主要对定义在源文件中的类进行了如下的更改:
1)先按照静态成员变量的定义顺序在类内部声明成员变量。
2)再按照原java类中对成员变量的初始化顺序进行初始化。
一个java类和编译后的class对应的转换如下:
源文件:

public class Person{

  public static String name="张三";

  public static int age;

  static{

       age=20;

    System.out.println("初始化age");

  }

  public static String address;

  static{

    address="北京市";

    age=34;

  }

  public static void main(String[] args) {

                   System.out.println(name);

                   System.out.println(age);

                   System.out.println(address);

         }

}

当java源代码转换成一个class文件后,其转换成类似下面的代码:
public class Person{

  public static String name;

  public static int age;

  public static String address;

  static{

    name="张三";

    age=20;

    System.out.println("初始化age");

    address="北京市";

    age=34;

  }

  public static void main(String[] args) {

                   System.out.println(name);

                   System.out.println(age);

                   System.out.println(address);

         }

}

初始化顺序依据转换后对应的class类成员变量的初始化顺序依次执行,所以所有的静态成员变量都是先声明,后执行赋值的,而且赋值的顺序也是依照源代码对静态成员变量初始化的顺序进行的,注意:定义一个成员变量并直接初始化与在静态代码块中进行初始化是等价的,都是依据它们在源代码中定义的顺序进行的。

局部变量

局部变量:在方法体里创建,在方法体外访问不到这个变量。
局部变量的创建与使用(局部变量必须赋值,成员变量可以不赋值)
 

public class Person {

    public static void main(String arges[])

    {

        String name="小黄";

        String Sex="男";

        int age=20;

        double Height=1.70;

        System.out.println("姓名:"+name+",性别"+Sex+",年龄:"+age+",年龄:"+Height);

    }

}

看例子
public class PassTest {

 public static void main(String args[]) {

  StringBuffer a = new StringBuffer("a");

  StringBuffer b = new StringBuffer("b");

  a(a, b);

  System.out.println(a);

  System.out.println(b);

  

  PassTest p = new PassTest();

  

  p.c();

 }

 static void a(StringBuffer a, StringBuffer b) {

  a = a.append(b);

  b = a;

 }

}

按照局部变量的使用范围来说 结果应该是 a b 但是 实际上输出的确实 ab b 请问为什么?

传递参数引用的问题吧.引用的话,传递的应该是相同引用的副本.

a方法里边b=a是改变副本b引用=a,但是对main里的b没有影响.
a = a.append(b); 主要是a.append(b);这句改变了a引用指向的值,因为main里的a也是指向同一对象,所以输出为ab b
如果a = a.append(b);改为 a = new StringBuffer("ab"); 将输出a b

再看下面两段程序
程序一:

public class Variable

{

int i;

void test()

{

   int j=8;

   if(j==i)

    System.out.println("相等");

   else

    System.out.println("不相等");

}

public static void main(String[] args)

{

   Variable v=new Variable();

   v.test();

}

}

程序二:
public class Variable

{

   void test()

{

   int i;

   int j=8;

   if(j==i)

    System.out.println("相等");

   else

    System.out.println("不相等");

}

public static void main(String[] args)

{

   Variable v=new Variable();

   v.test();

}

}

第一个程序很正常,编译时不会出错。第二个程序编译时会提示如下错误:
D:Programjavatest>javac Variable.java
Variable.java:9: 可能尚未初始化变量 i
                if(j==i)
                      ^

错误

之所以会出现这样的错误是因为:成员变量有默认值,(被final修饰且没有static的必须显式赋值),局部变量不会自动赋值

类体分为两部分。变量定义部分所定义的变量被称为类的成员变量,在方法体中定义的变量和方法的参数都被称为局部变量

局部变量和成员变量的区别

局部变量描述的是这个方法体内的属性,而成员变量描述的是这个对象里的属性。
成员变量可以被public、protected、default、private、static、final修饰符修饰,局部变量只能被final修饰符修饰。

成员变量在堆里进行创建,局部变量在栈里进行创建。
局部变量是系统默认值,局部变量没有系统默认值,必须手动赋值

希望本文所述对大家的java程序设计有所帮助。

 类似资料:
  • 本文向大家介绍成员变量与局部变量的区别有哪些?相关面试题,主要包含被问及成员变量与局部变量的区别有哪些?时的应答技巧和注意事项,需要的朋友参考一下 从语法形式上看:成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 fin

  • 本文向大家介绍简单了解java局部变量与成员变量的区别,包括了简单了解java局部变量与成员变量的区别的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了简单了解java局部变量与成员变量的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍浅谈静态变量、成员变量、局部变量三者的区别,包括了浅谈静态变量、成员变量、局部变量三者的区别的使用技巧和注意事项,需要的朋友参考一下 静态变量和成员变量的区别: A:所属不同  静态变量:属于类,类变量    成员变量:属于对象,对象变量,实例变量 B:内存位置不同  静态变量:方法区的静态区    成员变量:堆内存 C:生命周期不同  静态变量:静态变量是随着类的加载而加载,随着类

  • 本文向大家介绍Python全局变量与局部变量区别及用法分析,包括了Python全局变量与局部变量区别及用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python全局变量与局部变量区别及用法。分享给大家供大家参考,具体如下: 对于很多初学的同学,对全局和局部变量容易混淆,看看下面给大家的讲解相信都应该明白两者的区别了。 定义: 全局变量:在模块内、在所有函数的外面、在class外面

  • 本文向大家介绍Python局部变量与全局变量区别原理解析,包括了Python局部变量与全局变量区别原理解析的使用技巧和注意事项,需要的朋友参考一下 1、局部变量 输出: before change: Yang Li after change 你好 在外面看看name改了么? Yang Li 2、全局变量 输出: 3、nonlocal 全局与局部变量 在子程序中定义的变量称为局部变量,在程序的一开始

  • 本文向大家介绍PHP全局变量与超级全局变量区别分析,包括了PHP全局变量与超级全局变量区别分析的使用技巧和注意事项,需要的朋友参考一下 本文分析了PHP全局变量与超级全局变量区别。分享给大家供大家参考,具体如下: 全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a; 超全局变量作用域在所有脚本都有效。所以,在