黑马程序员技术交流社区
标题:
面向对象之封装,总结下,有错就指出来哦
[打印本页]
作者:
空灵
时间:
2014-11-20 20:35
标题:
面向对象之封装,总结下,有错就指出来哦
一、封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:将变化隔离,便于使用,提高重用性,提高安全性,
原则:将不需要对外提供的内容隐藏起来,把属性都私有,提供公共方法对其访问。
二、构造函数
1、特点
●函数名与类名相同
●不用定义返回值类型
●不可以写return语句
2、作用
●给对象进行初始化
3、注意
●多个构造函数是以重载的形式存在的。
●对象一建立就会调用与之对应的构造函数。
●当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。如 Person(){}
●如果在类中自定义了构造函数后,默认的构造函数这就没有了。
4、构造函数和一般函数的区别
●在写法上不同。在运行上也不同。
●构造函数是在对象已建立就运行,给对象初始化。
●而一般函数是对象调用才执行,给对象添加对象具备的功能。
●构造函数只运行一次,而一般函数可以被该对象调用多次。
5、什么时候定义构造函数?
●当分析事物时,该事物存在具备一些铁性或行,那么将这些内容存于构造函数中。
三、构造代码块
1、构造代码块作用
给对象进行初始化,对象已建立就运行,而且优先于构造函数执行。
2、和构造函数的区别:
●构造代码块是给所有对象进行统一初始化,
●构造函数是给对应的对象初始化。
●构造代码块中定义的是不同对象共性的初始化内容。
四、this关键字
this 语句只能定义在构造函数的第一行。因为初始化要先执行。
this 语句用于构造函数之间互相调用。
this 用于区分局部变量和成员变量同名情况。
this 代表本类的对象,哪个对象在调用它,它就代表哪个对象。
当定义类中的功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用了本类对象,都用this表示。
五、static关键字
1、static概述
static(静态)是一个修饰符,用于修饰成员变量或成员函数,
当成员被静态修饰后,就多了个调用方式,
除了可以被对象调用外,还可以直接被类名调用:类名.静态成员。
2、static特点:
●static随着类的加载而加载。static会随着类的消失而消失,说明它的生命周期最长。
●优先于对象存在。静态是先存在的,对象是后存在的。
●被所有对象共享。
●可以直接被类名调用。
3、局部变量和成员变量的区别:
●存放位置:
成员变量:随着类的加载而存在于方法区(或者叫共享区、数据区)。
局部变量:随着对象的建立而存在于堆内存中。
●生命周期:
成员变量:随着类的消失而消失。生命周期最长。
局部变量:随着对象的消失而消失。
4、使用注意
●静态方法只能访问静态成员,非静态方法既可以访问静态,也可以访问非静态。
●静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this
●主函数是静态的
5、静态的利弊:
●利:对对象的各项数据进行单独空间的存储,节省内存空间,没必要在每个对象中都存储一份。可以直接被类名调用.
●弊:生命周期过长,访问出现局限性。
六、main主函数
主函数:是一个特殊的函数,作为程序的入口,可以被JVM(虚拟机)调用。
主函数固定格式:public static void main(String[] arge)
public:代表该函数访问权限是最大的。
static:代表主函数随着类的加载就已经存在。
vois:主函数没有具体的返回值,应void表示。
mian:不是关键字,但是是一个特殊的单词,能被虚拟机识别。
(String[] arge):函数的参数,参数类型是一个数组,该数组中的元素是字符型,字符串类型的数组。
args:是变量名,是 arguments 的简写,可以用别的变量名代替,如x、y等。
主函数可以重载。如:public static void main(int x){}
七、静态的应用--工具类
每个应用程序中都有共性的功能,可以将这些功能进行抽取封装,以便复用。
虽然可以通过建立ArrayTool的对象使用这些工具方法,对数组进行操作,
但发现了问题:
●对象是用于封装数据的,可是ArrayTool对象并未封装特有数据。
●操作数组的每一个方法都没有用到ArrayTool对象中的特有数据。
这时就考虑,让程序更严谨,是不需要对象的。可以将ArrayTool中的方法都定义成static静态的。直接通过类名即可调用?
八、帮助文档的制作javadoc
制作程序的说明书--API文档
API(Application Program Interface)应用程序接口
java的说明书通过文档注释来完成
dos执行生成帮助文档的命令:
javadoc -d help -author -version Demo.java
javadoc java制作文档的工具
-d 目录
help 是文件夹名,如果当前没有该文件夹,会自动在当前目录创建。
-author 作者
-version 版本号
Demo.java 要制作的文档的java文件
要生成文档,必须在类名前加上public修饰,否则会报错。
方法被public修饰才能在文档中看到,
被private修饰的方法是不会出现文档中。
一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。
如果类没有被public修饰,那么默认的构造函数也带public修饰,
如果类没有被public修饰,那么默认的构造函数也没有被public修饰。
默认构造函数的权限是随着类的变化而变化的。
九、静态代码块
格式:static{静态代码块在的执行语句;}
特点:随着类的加载而执行,只执行一次。
作用:用于给类进行初始化。
十、单例设计模式
设计模式:解决某一类问题最行之有效的方法。java中有23种设计模式
单例设计模式:就是让一个类在内存中只存在一个对象实体。
怎么保证对象唯一?
●为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
●还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
●为了让其他程序对自定义的访问,可以对外提供一些访问方式。
这三步怎么使用代码体现呢?
●将构造函数私有化(private修饰)。
●在类中创建一个本类对象。
●提供 一个方法可以获取到本类对象。
单例设计模式--饿汉式:
single类一进内存就已经创建好了对象。先初始化对象,称为:饿汉式
class Single{
private Single(){}
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
对象在方法被调用时,才初始化,也叫做对象的延时加载。称为:懒汉式。
Single类进内存,对象还没有存在,只有调用了getInstance方法时才建立对象。
class Single{
private Single(){}
private static Single s = null;
public static Single getInstance(){
if(s==null)
s = new Single();
return s;
}
}
懒汉式会出现安全隐患,例如当有可能当线程A在判断完s==null的时候,有可能就在那里线程就停止不动了,这时候线程B进来了,也在判断完s==null的时候停止了,这时候线程A恢复了,
就创建了一个对象s,然后线程B也恢复了,同时要创建一个对象s,然后程序就
报错了,因为程序是单例设计模式,只能有一个对象存在。
那么怎么解决这个问题?
可以用synchronized来锁线程(锁定之后就要多加一次判断,比饿汉式就麻烦些了,所以实际看法不建议使用)
作者:
依米阳光
时间:
2014-11-21 09:49
总结的很详细,不错。学习了单例。
作者:
wf111sxwf
时间:
2014-11-21 17:44
楼主总结的很好很详细, 学习了啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2