深入变量和封装

来源:互联网 发布:linux 用户管理 列表 编辑:程序博客网 时间:2024/06/11 19:14

深入变量
变量概述:
定义变量的语法:
数据类型 变量名=值;
变量的分类:
成员变量:
全局变量/字段(Field),直接定义在类中,方法外面
1.类成员变量 使用static修饰的字段
2.实力成员变量 没有使用static修饰的字段
局部变量:
变量除了成员变量,其他都是局部变量
局部变量的分类
1.方法内部的变量
2.方法的形参
3.代码块中的变量,一对{}
变量的初始化:
变量的初始值:初始化才会在内存中开辟空间
成员变量:默认是有初始值的
局部变量:没有初始值,所以必须先初始化才能使用
变量的作用域:
变量的作用域指的是变量的存在范围,只有在这个范围内,程序代码才能访问到它。当一个变量被定义时,他的作用域就确定了,看变量所在的那对{}
成员变量:在整个类中都有效
局部变量:在开始定义的位置开始,到紧跟着结束的花括号为止
成员变量,可以先使用后定义,局部变量必须先定义而后才能使用
变量的生命周期:
变量的作用域决定了变量的声命周期,作用域不同,生命周期就不一样
变量的使用:
什么时候使用成员变量和局部变量;
1.考虑变量的生存时间,这会影响内存开销
2.扩大变量作用域,不利于提高程序的高内聚
开发中应该尽量缩小变量的作用范围,如此在内存中停留时间越短,性能也就越高

封装思想
包package语句
关键字:package,专门用来给当前java文件设置包名
语法格式:package 包名.子名.子子包
必须把该语句放在java文件中第一行代码(所有代码之前)
在开发中都是先有package而后在package中再定义类

import语句
import语句作用:
直接把某个包下的类导入到当前类中
语法格式:
import需要导入类的全限定名;
编译会自动去java.lang包中去寻找使用到的类,比如String,System.所以他们不需要导入
推论:非java.lang包的类,都需要导入
import导入多条语句:
import 类的全限定名;//只能导入某一个类
import 包名.子包名.*//表示会引入该包下的所有的在当前文件中使用到的类
eag:
import java.util.List;
import java.util.;//此时的表示类名

静态导入(static import):
import static 类的全限定名.该类中的static成员名
import static 类的全限定名.*;
此时的*表示的那个前类的任意使用的静态成员
在实际开发中,我们不使用静态导入,因为如此分不清某一个静态方法或字段来源于哪一个类

理解封装
什么是封装:
1.把对象的状体行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
2.“信息隐藏”,把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,向外界暴露方法,保证外界安全访问功能;把所有的字段使用private私有化,不准外界访问,把方法使用public修饰,允许外界访问。
把所有数据隐藏起来,尽可能隐藏多的功能,只向外界暴露便捷的方法,以供调用。
封装的好处:
使调用者正确,方便地使用系统功能,防止调用者随意修改系统属性。
提高组建的重要性。
达到组建之间的低耦合性(当某一块模块实现发生变化时,只要对外暴露的接口不变,就不会影响到其他模块)。
通过什么来实现隐藏和暴露功能呢?
高内聚:把该模块的内容数据,功能细节隐藏在模块内部,不允许外界直接干预。
低耦合:该模块只需要给外界暴露少量功能方法。

访问权限修饰符
封装其实就是要让有些类看不到另外一些类里面做了什么事。
所以java提供了访问权限修饰符来规定在一个类里面能看到什么,能暴露什么。
private: 表示私有,表示类访问权限,只能在本类中访问,离开本类后,就不能直接访问。
不写(缺省):表示包私有,表示包访问权限,访问者的包必须和当前定义类的包相同才能访问。
protected: 表示子类访问权限,同包中的可以访问,即使不同包,但是有继承关系,也可以访问。
public: 表示全局的,可以公共访问权限,如某个字段/方法,使用了public修饰,则可以在当前项目中任何地方访问。
访问权限修饰符的使用:
一般的,字段都是用private修饰,表示隐藏,为了安全性。
方法我们使用public修饰,共外界直接调用。
拥有实现细节的方法,一般使用private修饰,不希望外界(调用者)看到该方法的实现细节。
我们不需要缺省,即使要使用,也仅仅是表露给同包中的其他类。
protected:一般在继承关系中,父类需要把一个方法只暴露给子类。

JavaBean规范
JavaBean是一种JAVA语言写成的可重用组件(类)。必须遵循一定的规范:
1.类必须使用public修饰
2.必须保证有公共无参数构造器,即使手动提供了带参数的构造器,也得提供无参构造器。
3.也包含了属性的操作手段(给属性赋值,获取属性值)。

getter,setter方法
字段private String name;
getter方法;仅仅使用于获取某一个字段符存储的值。
//去掉get,把首字母小写,得到name1,此时name1才是属性
public String getName1(){
return name;//返回name字段存储的


把操作的字段boolean类型的,此时不应该叫做getter方法,而是is方法,把getName变成isName.
setter方法:仅仅用于给某一个字段设置需要存储的值。
public void setName1(String n){}name=n;
//把传过来的n参数的值,存储到name字段中
每一字段都得提供一对getter/setter。

this关键字
this表示当前对象:
this主要存在于两个位置:
构造器中:就表示当前创造的对象。
方法中:哪一个对象调用this所在的方法,那么此时this就表示哪一个对象
使用this:
1.解决成员变量和参数(局部变量)之间的二义性,必须使用;
2.同类中实例方法间互调(此时可以忽略this,但不建议忽略)。
3. 将this做为参数传递给另一个方法;
4. 将this作为方法的返回值(链式方法编程);
5. 构造器重载的互调,this([参数])必须写在构造方法第一行;
6. static不能和this一起使用;
当字节码被加载进JVM,ststic成员已经存在了。
但是此时对象还没有创建,没有对象,就没有this。

构造器和setter方法
创建对象并给对象设置初始值有两种方式:
1.setter注入(属性注入)。
2.构造注入。
方法1:先通过无参构造器创建一个对象,再通过对象调用相应的setter方法。
User u1=new User();
u1.setName(“诸葛”);
u1.setAge(18);
方法2.直接调用带参数的构造器创建出来的对象,就有了初始值。
User u1-new User(“诸葛”,18);

如何选择:
如果存在带参数的构造器,方法2是比较简洁的。
如果在构建对象的时候需要初始化多个数据,如果使用方法2,那么构造器得提供N个参数,参数过大,不直观,此时方法1,简单明了。
有时候,需要根据数据来构建对象,此时优先选用构造方式,例如:圆对象,如何画圆,圆对象,必须根据半径来确定对象,就应该在构建圆对象的时候,就要确定半径值。
其他时候,任选。

小题:
判断一个点和圆的关系(在圆外,在圆上,在圆内)。
名词解析法:一般的,名词要么是对象,要么就是状态。动词:方法

原创粉丝点击