黑马程序员__面向对象之封装
2015-03-04 12:57
309 查看
黑马程序员——面向对象之封装
-------android培训、java培训、期待与您交流!
----------
1. 封装是面向对象的三大特征之一。指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实习对内部信息的操作和访问。简而言之,封装就是隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
2. 封装的好处:
(1) 将变化隔离
(2) 提高重用性
(3) 提高安全性
(4) 便于使用
3. 封装的原则:
将对象的属性和实现细节都隐藏起来,不允许外部直接访问;将方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。
4. 封装的一种表现形式:private
private:表示私有的权限修饰符,用于修饰类中的成员包括成员变量和成员函数。私有只在本类中有效。
注意:将属性私有化以后,类以外即使建立了对象也不能直接访问,但可以通过对外提供的公共的访问方式访问该属性。
属性的封装:
(1) 把属性定义为私有的(private),只能在本类中访问。
(2) 为属性提供公共的(public)getter/setter方法。
5. 构造函数
(1) 定义:是指函数名与类名相同,且无返回值类型的声明。
(2) 特点:
函数名与类名相同;
不用定义返回值类型
不可以写return语句
对象一建立就会调用与之对应的构造函数
(3) 作用:给对象进行初始化
(4) 构造函数中定义的内容
当分析事物时,该事物存在具备一些特性或者行为,那么这些内部可以定义在构造函数中。
(5)构造函数与一般函数的区别:
写法上不同;
运行上不同:构造函数是在对象一建立就运行而一般函数是在对象调用时执行
一个对象建立,构造函数只运行一次;一般函数可被对象调用多次
(6)构造函数与构造代码块的区别:
构造函数用于给对应的对象初始化;而构造代码块用于给所用的对象进行统一初始化,构造代码块中用于定义不同对象共性的初始化内容。
![](https://img-blog.csdn.net/20150304130025913?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV2VpX195YW95YW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
6. this关键字
含义:代表本类对象且代表它所在函数所属对象的引用。需要注意的是,类中的成员被使用都是通过对象,而本类对象就是this。
应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
例如:给人定义一个用于比较年龄是否相同的功能
this在构造函数间调用
注意:this用于构造函数间的调用,一般函数是不能调用的;并且this语句只能定义在构造函数的第一行,因为初始化操作要先执行。
7. static关键字
用法:表示静态的,只能用于修饰成员变量和成员函数的修饰符。当成员被静态所修饰
就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用即
类名.静态成员。
特点:
(1) 随着类的加载而加载,随着类的消失而消失
(2) 被所以对象所共享
(3) 优先于对象存在
(4) 可以直接被类名所调用
使用注意事项:
(1) 静态方法只能访问静态成员;非静态方法既可以访问静态也可以访问非静态成员
(2) 静态方法中不可以定义this,super关键字。因为静态是优先于对象存在的。
静态的好处:
对对象的共享数据进行单独空间的存储,节省空间;
可以用类名来直接调用,无需创建对象。
静态的弊端:
生命周期过长;
访问出现局限性。
静态的使用情况:
定义静态变量:当出现被多个对象所共享的数据时,该数据就可以被静态所修饰;而对象中的特有数据要定义成非静态的。
定义静态函数:当功能内部没有访问到非静态数据时,该功能可以被定义为静态的。
静态代码块:
格式:static{
静态代码块中的执行语句;
}
特点:随着类的加载而执行,只执行一次。
8. 单例设计模式
含义:保证一个类在内存中只存在一个对象。
设计步骤:
(1) 将构造方法私有化
(2) 在类中创建一个本类对象
(3) 提供一个方法可以获取到该对象
饿汉式:
懒汉式:
懒汉式存在线程安全的问题,将其进行优化之后:
注意:在实际开发中建议使用恶汉式。
总结:一个类常常就是一个小的模块,我们应该只让这个模块公开必须让外界知道的内容,而隐藏其他一切内容。进行程序设计时,应尽量避免一个模块直接操作和访问另一个模块的数据,应当追求低耦合、高内聚。
-------android培训、java培训、期待与您交流!
----------
-------android培训、java培训、期待与您交流!
----------
1. 封装是面向对象的三大特征之一。指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实习对内部信息的操作和访问。简而言之,封装就是隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
2. 封装的好处:
(1) 将变化隔离
(2) 提高重用性
(3) 提高安全性
(4) 便于使用
3. 封装的原则:
将对象的属性和实现细节都隐藏起来,不允许外部直接访问;将方法暴露出来,让方法来控制对这些属性进行安全的访问和操作。
4. 封装的一种表现形式:private
private:表示私有的权限修饰符,用于修饰类中的成员包括成员变量和成员函数。私有只在本类中有效。
注意:将属性私有化以后,类以外即使建立了对象也不能直接访问,但可以通过对外提供的公共的访问方式访问该属性。
属性的封装:
(1) 把属性定义为私有的(private),只能在本类中访问。
(2) 为属性提供公共的(public)getter/setter方法。
class Person { //将属性进行封装 private String name; private int age; private String sex; //对外提供公共的访问方式 public void setName(String name) { this.name=name; } public String getName() { return name; } public void setAge(int age) { this.age=age; } public int getAge() { return age; } public void setSex(String sex) { this.sex=sex; } public String getSex() { return sex; } } class PersonDemo { public static void main(String[] args) { Person p=new Person(); p.setName("Apple"); p.setAge(18); p.setSex("女"); System.out.println("name:"+p.getName()); System.out.println("age:"+p.getAge()); System.out.println("sex:"+p.getSex()); } }
5. 构造函数
(1) 定义:是指函数名与类名相同,且无返回值类型的声明。
(2) 特点:
函数名与类名相同;
不用定义返回值类型
不可以写return语句
对象一建立就会调用与之对应的构造函数
(3) 作用:给对象进行初始化
(4) 构造函数中定义的内容
当分析事物时,该事物存在具备一些特性或者行为,那么这些内部可以定义在构造函数中。
(5)构造函数与一般函数的区别:
写法上不同;
运行上不同:构造函数是在对象一建立就运行而一般函数是在对象调用时执行
一个对象建立,构造函数只运行一次;一般函数可被对象调用多次
(6)构造函数与构造代码块的区别:
构造函数用于给对应的对象初始化;而构造代码块用于给所用的对象进行统一初始化,构造代码块中用于定义不同对象共性的初始化内容。
<pre class="java" name="code">class Person { private String name; private int age; //构造代码块 { System.out.println("这是构造块!"); } //构造方法 Person() { System.out.println("这是无参构造方法"); } Person(String name,int age) { System.out.println("这是带参构造方法"); } } class PersonDemo { public static void main(String[] args) { Person p1=new Person(); System.out.println("-----------------------2"); Person p2=newPerson("Joe",18); } }
6. this关键字
含义:代表本类对象且代表它所在函数所属对象的引用。需要注意的是,类中的成员被使用都是通过对象,而本类对象就是this。
应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都用this表示。
例如:给人定义一个用于比较年龄是否相同的功能
public boolean compare(Person p) { //this表示调用此方法的当前本类对象 return this.age==p.age; }
this在构造函数间调用
class Person { private String name; private int age; Person(){} Person(String name) { //this调用无参构造函数 this(); this.name=name; } Person(String name,int age) { //调用带一个参数的构造函数 this(name); this.age=age; } }
注意:this用于构造函数间的调用,一般函数是不能调用的;并且this语句只能定义在构造函数的第一行,因为初始化操作要先执行。
7. static关键字
用法:表示静态的,只能用于修饰成员变量和成员函数的修饰符。当成员被静态所修饰
就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用即
类名.静态成员。
特点:
(1) 随着类的加载而加载,随着类的消失而消失
(2) 被所以对象所共享
(3) 优先于对象存在
(4) 可以直接被类名所调用
使用注意事项:
(1) 静态方法只能访问静态成员;非静态方法既可以访问静态也可以访问非静态成员
(2) 静态方法中不可以定义this,super关键字。因为静态是优先于对象存在的。
静态的好处:
对对象的共享数据进行单独空间的存储,节省空间;
可以用类名来直接调用,无需创建对象。
静态的弊端:
生命周期过长;
访问出现局限性。
静态的使用情况:
定义静态变量:当出现被多个对象所共享的数据时,该数据就可以被静态所修饰;而对象中的特有数据要定义成非静态的。
定义静态函数:当功能内部没有访问到非静态数据时,该功能可以被定义为静态的。
静态代码块:
格式:static{
静态代码块中的执行语句;
}
特点:随着类的加载而执行,只执行一次。
8. 单例设计模式
含义:保证一个类在内存中只存在一个对象。
设计步骤:
(1) 将构造方法私有化
(2) 在类中创建一个本类对象
(3) 提供一个方法可以获取到该对象
饿汉式:
class Single1 { //构造函数私有化 private Single1(){} //创建本类对象 private static Single1 s=new Single1(); //提供公共的方法获取对象 public static Single1 getInstance() { return s; } }
懒汉式:
class Single2 { //构造方法私有化 private Single2(){} //声明一个本类对象 private static Single2=null; //提供公共的方法来获取对象 public static Single2 getInstance() { //判断对象是否为空,如果为空则实例化对象 if(s==null) s=new Single2(); return s; } }
懒汉式存在线程安全的问题,将其进行优化之后:
class Single2 { private Single2(){} private static Single2=null; public static Single2 getInstance() { //双重判断 if(s==null) { synchronized(Single2.class) { if(s==null) s=newSingle2(); } } return s; } }
注意:在实际开发中建议使用恶汉式。
总结:一个类常常就是一个小的模块,我们应该只让这个模块公开必须让外界知道的内容,而隐藏其他一切内容。进行程序设计时,应尽量避免一个模块直接操作和访问另一个模块的数据,应当追求低耦合、高内聚。
-------android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员——Java语言基础:面向对象、封装(构造函数、设计模式)
- 黑马程序员———面向对象的特性之封装
- 黑马程序员_java基础之面向对象封装及继承
- 黑马程序员_面向对象(封装)
- 黑马程序员-面向对象的三大特性1-封装-set,get方法,弱语法
- 黑马程序员_java面向对象(对第五课面向对象..封装..构造..this应用总结)
- 黑马程序员<java基础<面向对象(封装,继承,多态,抽象)>>
- 黑马程序员 java学习笔记——面向对象1:封装
- 黑马程序员_OC语言之面向对象的三大特性(封装、继承、多态)
- 黑马程序员_面向对象_封装
- 黑马程序员-C#面向对象之封装
- 黑马程序员 Java面向对象——封装
- 黑马程序员———面向对象之封装及this和static关键字
- 黑马程序员-面向对象(封装,继承,多态)
- 黑马程序员 Java自学总结六 面向对象三个特征之封装
- 黑马程序员--2 面向对象--封装
- 黑马程序员-java面向对象的概念及封装总结
- 黑马程序员——OC篇(二)面向对象的三大特性(封装、继承、多态)
- 黑马程序员————OC面向对象_三大特性之封装
- 黑马程序员---java基础之面向对象(一)三大特征(封装,继承,多态)