java变量类型

  1、局部变量

    概念:类的方法中的变量

  2、实例变量

    
概念:定义在类里面,方法体、构造方法和语句块外,且不被static修饰的变量,用于描述一个类中包含哪些数据

  3、类变量

    概念:独立于方法之外的变量,有static修饰

    

public class able{
            
            static int a=0;//类变量
        
            String b="hello world";//实例变量

            public void method(){
        
                        int c=0;//局部变量
        }
    
}

扩展:

  成员变量分为实例变量类变量

 

  成员变量的定义:

       声明成员变量语法

          【public】【protected】【private】【static】【final】<type><variable_name>

          含义如下:

          【public】【protected】【private】:成员变量的访问权限

          【static】:表示该成员变量为类变量,也成为静态变量

          【final】:表示将该成员变量声明为常量

          【type】:表示变量的类型

          【variable_name】:表示变量名称

  java四种访问范围:

      1、当前类  2、同一包  3、子类  4、全局

  访问权限从小到大

      private–>default–>protected–>public

 

1、局部变量

    特点:

      1、局部变量声明在方法、构造方法或者语句块中

      2、局部变量在方法、构造方法、或者语句块被执行的时候创建,当这些被执行完成后,变量将会被销毁

      3、访问修饰符不能用于局部变量

      4、局部变量只能在声明它的方法、构造方法或者语句块中可见

      5、局部变量是在栈上分配的

      6、局部变量没有默认值,所以局部变量被声明后,必须经过初始化(赋值),才能被使用

    存放地址:栈内存 

    生命周期:作用的范围结束,变量空间会自动释放

扩展:

  变量使用原则:

    就近原则,首先在局部范围找,有就用,接着在成员位置找。

    局部变量可分为:

      1、形参(形参列表,可以由多个或者0个组成,中间用逗号隔开)

      2、方法局部变量

      3、代码块局部变量

       扩展变量与对象

        变量是用来存储数据的,它的定义包含变量名、变量类型和作用域几个部分,对象是一个类功能模块的集合,里面有方法和属性,每一个方法能实现一个不同的功能,属性是决定对象执行结果的因素,属性只能读写。

       实例化、初始化和声明

        实例化:用类创建对象的过程称为实例化,实例化一个对象就是为对象开辟内存空间,或者不用声明,直接用new构造函数名,创建一个临时对象。类不同于函数(方法),定义完之后是无法直接使用的,因为类只是一个抽象的概念,需要通过关键字new来实例化,才可以被使用

Date date=new Date()

        初始化:给声明的对象赋值的过程。string arr=“hello”;

        声明:指使用一个对象的时候,先定义属于哪个类型 。string arr;

        总结

          声明:只生成对象不赋值的过程

          初始化:是给对象赋值的过程

          实例化:是使用new为对象分配内存的过程

2、实例变量(成员变量)(对象的成员变量)

    本质成员变量,只是实例是针对类而言,实例是值类的声明

       1、实例变量在对象创建的时候创建,在对象被销毁的时候销毁

       2、实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方法获取实例变量信息

       3、实例变量可以声明在使用前或者使用后

       4、访问修饰符可以修饰实例变量

       5、实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。

    成员变量初始化:

      1、默认初始化

      2、就地初始化 定义成员变量的时候便进行初始化

      3、类外初始化 通过对象的引用进行初始化(最多)(私有的时候可以用setXXX()、getXXX()方法实现)

        

public static void main (String [] args){
        
                    Person person = new Person();

                    person.name = "张三";
    
                    person。age=11;
        }

       4、通过实例代码块和静态代码块进行初始化

       5、通过构造方法进行初始化

3、类变量(静态变量、静态属性、类属性)

    解释:是指该类所有对象共享的变量任何一个该类的对象去访问它时,取得都是一样的值

    访问方式:通过 类名.静态成员变量名  进行访问

    存储:静态存储区。

    特点:只有份,且不依赖对象

    生命周期:在程序开始时创建,在程序结束时销毁

    注意:在类中以static关键字声明,但是必须在方法、构造方法、语句块之外。

       静态变量被除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变,很少单独使用static声明变量

       与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型

       默认值与成员变量类似

       类变量被声明为public static final类型时,类变量名称一般建议使用大写字母

    使用时机

       1、变量所包含的对象体积较大、占用内存较多

       2、变量所包含的对象生命周期较长

       3、变量所包含的对象数据稳定

       4、该类的实例有对该变量包含对象的共享需求

       

静态变量和成员变量的区别

  1、生命周期不同

    成员变量:随着对象的创建而存在,随着对象被回收而释放

    静态变量:随着类的加载而存在,随着类的消失而消失

  2、调用方式不同

    成员变量:只能被对象调用

    静态变量:可以被对象调用,还可以被类名调用

  3、别名不同

    成员变量:实例变量、全局变量

    静态变量:类变量、类属性、静态属性   

  4、存储位置不同

    成员变量:堆内存的对象中,对象的特有数据

    静态变量:数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据

  

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

  1、访问权限,静态变量不能访问非静态变量,如果硬要访问,只能用对象区引用非静态成员变量

  2、静态变量在内存空间只有一份,永远一份

  3、非静态变量只要new出来一个对象引用就会在内存中分配一份空间给它

  4、存放 地点不一样,静态变量是在栈空间,非静态变量存放在堆空间

扩展:

  实例变量(成员变量)与类变量(静态变量、静态属性、类属性)不赋值下的默认取值

  byte short int long默认取值为0整数类型

  float默认取值为0.0f;(浮点类型 单精度

  double默认取值为0.0;(浮点类型 双精度

  boolean默认取值为false;(布尔类型

  char默认取值为“\u0000”(字符类型 最终输出为空) 表示Unicode字符

全局变量:

  定义在类里方法体外的变量。作用于整个文件中,直接被类调用。

  作用域:全局可见

  存储空间:静态存储区

  优先度:全局变量优先度低于局部变量

  优点:程序运行快一点,因为内存不需要分配

  缺点:占用更多的内存,因为其生命期长

  全局变量作用域的扩展和限制:

  1、扩展:使用extern关键字可以对全局变量的作用域进行扩展

  2、限制:使用static关键字可以限制全局变量的作用域(又称之为隐藏)

总结一下所有变量的存放位置:

  局部变量位于栈内存、静态变量位于方法区、实例变量位于堆内存、方法的字节码位于方法区、对象本身位于堆区、对象的引用位于栈区