Java各种变量的不同,Java各种数据类型的默认值

各种变量分类定义

变量分为成员变量局部变量

成员变量

包括实例变量和静态变量(类变量),作用域在整个类里

共享性:方法内部,代码块内部共享,对于多个线程来说,变量初始化到自己的工作内存中,主内存中不存在该线程,所以线程之间不共享

局部变量

形参(方法签名中定义的变量)、方法局部变量(方法内定义)和代码块局部变量(代码块内定义),作用域在方法内部或者代码块内部

共享性:在整个类的实例共享,在多线程中,变量被初始化到主内存中,每个线程拷贝变量到工作内存中进行操作,线程之间共享一个主内存变量,存在线程安全问题

静态成员变量与非静态的区别

静态成员变量:用static修饰,不属于实例对象,属于类所有,只要程序加载了字节码,不用创建实例对象静态变量都会被分配空间,就已经可以使用;生命周期伴随整个类的始终,变量在第一次使用该类时创建。

非静态成员变量(实例变量):没有static修饰,只有实例化对象后,才会被分配空间,才能使用;加载在堆内存中,随着初始化而创建,随着对象的消亡而消亡。

注意:

类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

静态变量共同类所有,值被一个对象改变后,在之后的其他实例对象中也改变!

各种数据类型和变量的默认值

在java中,局部变量没有默认值,如果在声明时,未赋值,在接下来的程序中直接使用该变量的值将由编译器检查出错误。

成员变量(也叫类成员)具有默认值,如果是八种基本数据类型(byte, short, int, long, float, double, boolean, char,在没有被手动赋值的却在程序中被使用的情况下,将被赋予初值。

  • boolean默认值为false
  • byte,short,int,long默认值值为0
  • float,double默认值为0.0
  • char默认值为 ' '(空格字符)

包装类的默认值为null(Integer,String,Byte,Short,Char,Long)。

final修饰的变量

  • 当final修饰的是局部变量,第一次使用就要初始化。
  • 当final 修饰的是实例变量,那么必须初始化,或者在构造块中,或者在构造器中,否则编译不能通过。
  • 当final修饰的是静态变量,同样也得必须初始化,不同的是,它要么直接初始化,要么在静态块中初始化,不能在构造器中初始化

猜你喜欢

转载自blog.csdn.net/Nobody_else_/article/details/97510865