JAVA之面向对象(二)

来源:互联网 发布:淘宝上解id锁得可靠嘛 编辑:程序博客网 时间:2024/06/06 00:12

成员变量和局部变量

基础知识

成员变量分为类变量和实例变量,类变量的生命周期与类是一样的,实例变量的生命周期是与对象一致的。

系统不会自动给局部变量初始化,也就是说,所有的局部变量,除形参外都必须显示初始化。也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可访问。

形参在整个方法内都有效,形参的初始化由系统在调用该方法时完成,形参的值由方法的调用指定。

一个类内不能有两个同名的成员变量,就算一个是类变量一个是实例变量也不可以。

变量的初始化和内存中的运行机制

如果代码第一次使用某个类,则系统会加载这个类,并初始化这个类。在类的准备过程中,系统会为这个类的类变量分配内存空间,并指定初始值。

系统不会为局部变量执行初始化,这就意味着系统并未给这个局部变量分配内存空间,只有程序为这个局部变量赋初始值时,系统才会为其分配内存空间。

局部变量并不属于任何方法或实例,因此其总是保存在该方法的栈内存中。垃圾回收器不会回收局部变量,局部变量随着代码块或方法的执行完毕会自动结束。

局部变量的生命周期要尽可能短,生命周期越短,程序效率越高。

隐藏和封装

局部变量没有访问控制符,因为访问控制符用于控制一个类的成员能否可以被其他类访问,而局部变量的生命周期就是其所在的代码块或方法,不可能被其他类访问,因此访问修饰符无意义。

为隐藏起来的变量提供set和get方法时,方法名通常为get/set +原实例变量名(首字母大写)

进行程序设计时,应尽可能避免一个模块直接访问或修改另一个模块的数据,尽量追求高内聚和低耦合。(高内聚指尽可能把数据,方法实现细节隐藏在模块内,不允许外部直接干预;低耦合指仅暴露少量方法给外部使用)。

虚拟机在装载带包名的文件时,会先搜索CLASSPATH环境变量指定的目录,然后在这些目录按与包对于的目录结构中搜素。

同一个包的文件可以位于不同的目录下。

a包下再定义包b可以用packge a.b;来实现,但是使用包b下的类时需要类的全称,只写import packge a;是没有用的

JDK1.5之后加入了静态导入语法,可以直接导入静态成员或静态方法。

深入构造器

当创建一个对象时,系统会为这个对象的成员变量赋值,String为null,布尔型为false,数值型为0.

JAVA创建对象并不是完全依靠构造器。当调用构造器时,系统为先为对象分配内存空间并进行默认初始化,也就是说这个对象已经产生了。而构造器的作用是将这个对象返回并将一个引用指向该对象。

构造器不能被直接调用,只能通过new来调用,但是当使用new时,就会创建新的对象。因此在重载构造器时,通常采用this来调用本类的构造器。


0 0
原创粉丝点击