成员变量局部变量构造函数

来源:互联网 发布:知乎 不知道诊所 编辑:程序博客网 时间:2024/06/04 17:59
类体由2部分构成:
一、变量的定义;
    成员变量(全局变量的俗称)
    局部变量,只在定义它的方法中有效
二、方法的定义(一个类中可以有多个方法) . 


什么是局部,方法内部,块内部都是局部,执行指令退出那个局部,局部变量自动清除 

成员变量:作为类的成员而存在,直接存在于类中。所有类的成员变量可以通过this来引用。
局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。
 
1.成员变量可以被 public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static修饰;两者都可以定义成final型。
 
2.成员变量存储在堆,局部变量存储在栈。局部变量的作用域仅限于定义它的方法,在该方法的外部无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它。如果访问权限允许,还可以在类的外部使用成员变量。
 
3.局部变量的生存周期与方法的执行期相同.类的实例成员变量和对象的生存期相同。而静态成员变量的生存期是整个程序运行期
 
4.成员变量会被系统提供一个默认的初始值。基本类型的默认值为 0,复合类型的默认值为null(被final修饰且没有static的必须显式赋值),局部变量不会自动赋值,所以局部变量在定义后先要赋初值,然后才能使用。
 
5.局部变量可以和成员变量同名,且在使用时,局部变量具有更高的优先级。

成员变量又分成俩中类型:实例变量和静态变量。static的差别,是否依赖于实例而存在 

静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 
由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式。 
1. 静态局部变量 
在局部变量前再加上static说明符就构成静态局部变量。 
 
静态局部变量属于静态存储方式 
(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。 
(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。 
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。 
(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点,可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜 

2.静态全局变量 
全局变量(外部变量)冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 
而静态全局变量只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
 
1.动态存储方式与静态存储方式的定义
1)所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式;
2)所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。 
2.内存中用户存储空间的分配情况
1)程序区:存放程序语句
2)静态存储区:存放全局变量,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。
3)动态存储区:
     存放以下数据:
①函数形式参数。在调用函数时给形参分配存储空间;
②自动变量(未加static声明的局部变量);
③函数调用时的现场保护和返回地址等。
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是由new分配的内存块,释放编译器不去管,由应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

构造函数:①函数名与类名相同②不用定义返回值类型③没有具体的返回值
构造函数的作用:用于给对象进行初始化。

一般函数和构造函数的区别
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化
一般函数:对象创建后,需要该函数功能时才调用

构造函数:对象创建时,只调用一次
一般函数:对象创建后,可以被调用多次
构造函数
1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。
2.构造函数的作用是用于给对象进行初始化。
3.构造函数可以看成是特殊的函数。它可以重载(仅仅函数返回值类型不同是不行的),可以被权限修饰符修饰,但是它没有返回值(这与void不同)。
4.当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造方法。当在类中自定义构造函数后,无默认的构造函数。
5.构造函数是在对象一建立就运行,给对象初始化,而一般函数是对象调用时才执行,给对象添加对象具备的功能。
一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次。
6.定义构造函数的需求性:当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

构造代码块
1.构造代码块的作用是给对象进行初始化。
2.对象一建立就运行构造代码块了,而且优先于构造函数执行。有对象建立,才会运行构造代码块,类不能调用构造代码块的,构造代码块先于构造函数执行。
3.构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,也就是说,构造代码块中定义的是不同对象共性的初始化内容。

静态代码块
static{...}
1.随着类的加载而执行,只执行一次,并优先于主函数。类调用时,先执行静态代码块,然后才执行主函数的。
2.静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。
0 0