本文实例分析了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程序设计有所帮助。

java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析相关推荐

  1. java中为什么需要常量和变量的区别_Java中的变量和常量

    1.变量(variable) 变量,顾名思义,就是变化的量. 我们可以通过变量来操作存储空间中的数据,变量就是指代这个存储空间,一旦你定义了一个一个变量,那么空间的位置就确定了,虽然空间位置是确定的, ...

  2. java中常量和变量的区别_Java语言基础 变量和常量

    变量和常量 1.变量的有效范围(作用域) (1)在类体中定义的变量被称为成员变量,成员变量在整个类中都有效.类的成员变量分为静态变量和实例变量,静态变量通过修饰符static确定,并且可以通过&quo ...

  3. java静态变量和实例变量的区别_Java 中静态变量和实例变量区别

    静态变量属于类,该类不生产对象,通过类名就可以调用静态变量. 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量. 在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的 ...

  4. java接口那一节是哪的知识_Java中的接口知识汇总

    Java中的接口知识汇总 发布于 2020-4-29| 复制链接 本文给大家汇总介绍了在java中的接口知识,包括为什么要使用接口.什么是接口.抽象类和接口的区别.如何定义接口以及定义接口注意点,希望 ...

  5. java null和 的区别_java中null和的区别

    null和""的区别 问题一: null和""的区别 String s=null; string.trim()就会抛出为空的exception String s ...

  6. java堆和栈的区别_JAVA中堆和栈的区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  7. java中栈和堆都存哪些东西_java中栈内存与堆内存(JVM内存模型)

    java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...

  8. java中堆与栈的区别_java中堆和栈的区别分析

    堆和栈是Java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  9. java static 区别_Java中static和final的区别

    static是静态修饰关键字,可以修饰变量和程序块以及类方法: 当定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存: 当修饰一个程序 ...

  10. java 栈 堆 区别_java中栈与堆的区别

    1. 栈(stack)与堆(heap)都是Java用来在Ram(random access memory随机存取器)中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. ...

最新文章

  1. java8学习:新的日期使用
  2. 用极大似然法估计因子载荷矩阵_第7章-因子分析.ppt
  3. ES transport client使用
  4. 无法定位程序输入点 在.exe上_win7提示explorer.exe应用程序错误的解决方法
  5. IDA反汇编EXE添加一个启动时的消息框
  6. 【图像增强】基于matlab模糊集图像增强【含Matlab源码 394期】
  7. 夏普Sharp MX-C3581R 一体机驱动
  8. npm install 报警告npm WARN
  9. 算法(字符串)——重复的子字符串
  10. 《人类简史》读书笔记
  11. 路由器常见的第三方系统( OpenWRT,LEDE,PandoraBox,Gargoyle | ASUSWrt,Merlin,Padavan | DD-WRT | Tomato )
  12. Android View的事件分发机制和滑动冲突解决方案
  13. ubuntu安装java_如何在Ubuntu系统上安装Java
  14. BBS 与 BLog(博客)的区别到底是什么?[转载]
  15. 我的世界不退出服务器切换账号,我的世界服务器退出指令
  16. 瑞星宣布个人安全软件产品永久免费
  17. 解决Eclipse中的卡死现象
  18. Ubuntu中文语言包下载失败
  19. AWE的这家展台,为什么让吴晓波流连忘返?
  20. 给div加横向滚动栏,然后去修改滚动条的样式,以下只给chrome做了兼容。

热门文章

  1. 分别用 数组和链表处理约瑟夫环问题
  2. 安装hadoop集群---resourcemanager和NameNode不在同一台机器上
  3. Linux ftp传送问题 WARNING! 258831 bare linefeeds received in ASCII mode
  4. ANDROID:SHOWASACTION="NEVER"是做什么用的?
  5. Linux 文件夹权限
  6. [转载] Python列表操作
  7. kotlin 判断数字_Kotlin程序检查数字是否为质数
  8. 使用JavaScript的图像识别游戏
  9. linux ntp手动授时,关于我校NTP授时服务的使用说明
  10. if mybatis tk 多个_面试题:mybatis 中的 DAO 接口和 XML 文件里的 SQL 是如何建立关系的?...