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关键字可以限制全局变量的作用域(又称之为隐藏)
总结一下所有变量的存放位置:
局部变量位于栈内存、静态变量位于方法区、实例变量位于堆内存、方法的字节码位于方法区、对象本身位于堆区、对象的引用位于栈区