黑马程序员:面向对象之----------------------封装
2013-03-24 15:13
351 查看
------- android培训、java培训、期待与您交流!
----------
------- android培训、java培训、期待与您交流!
----------
----------
面向过程 c BASIC 对问题的进行步骤的分析 并通过具体的功能(函数)进行体现 然后就按照步骤进行执行即可 面向对象 强调的问题领域中涉及的事物 并分析事物中具备的属性和行为 将属性和行为都封装到一个具体的事物中 而这个事物我们称其为对象 需求 将大象装进冰箱里 面向过程 1、 打开冰箱 2、 装入冰箱 3、关闭冰箱 面向对象 操作的是谁? 是冰箱 现在是面向具体的对象 只要找到了对象,就可以使用对象的功能 在面向对象中 角色已经变成了指挥者 面向过程 和面向对象 只不过是角色的转变了 面向过程:执行者 面向对象:指挥者 面向对象 1、面向对象是一种符合人们思考习惯的思想 2、面向对象可以将复杂的问题简单化 3、面向对象将执行者变成了指挥者 对象就是一个实实在在的实体 谁最清楚这功能,就定在谁的身上。 万物皆对象 在面试的过程中 1、角色的转变 2、复杂变简单 面向对象 三个特征 1、封装 2、继承 3、多态 在分析事物的时候,问题领域(需要求):其实就是找出问题领域中的涉及的对象 -------------- 类与对象的关系 类就将多个对象具备的共性内容进行抽取而来的,一个描述事物的方式 对象: 计算机堆内存中对象 new Student(); 类:是JAVA对具体生活中事物的描述 对象:该事物实实在在存在个体(在计算机该个体是通过new关键字建立) ----------- 类与对象的关系 例如: 汽车 生活中: 汽车图纸就是对汽车这类事物的描述 汽车就是实实在在存在的个体 类就是图纸 汽车就是堆内存中的对象 class Car { } void run() { } 其实描述事物无非就是描述事物的属性和行为 以后玩的时候 只 要找对象就可以了。 对象里面是封存的数据(但是是不同数据类型 ) ------------------ 定义类其实就是在定义类中的成员 成员括两种 成员变量:事物的属性,定义在类中的变量 成员函数:事物的行为 成员变量和局部变量的区别 ----- 在代码的定义位置 成员变量:定义在类中 局部变量:定义在函数中,或者语句内 ----- 在内存中的位置 成员变量:是创建对象时,才存在于对象中,而且存在于堆内存中 成员变量随着对象的加载而存在,随着对象的变垃圾被回收而消失 局部变量:随着该变量所属函数或者语句的区域运行而存在,而且存在栈内存中 当该 变量所属的作用域结束,该变量就释放 -----初始化值的区别 成员变量:因为在堆内存中,所以都有默认初始化值 局部变量:在定义时,如果要被使用,必须明确指定初始化值 显示初始化 如果对成员变量已经定义 了初始化称为显示初始化值 ------- 匿名对象 例如 new car();//匿名对象 Car c=new Car(); new Car().color="红色" 如果只对对象方法只调用一次时,就可以使用匿名对象 ****如果对一个对象进行多个成员调用,必须给这个对象起名字 匿名对象其实就是一种简化形式 注意: 当对对象的方法只调用一次时,可以使用匿名对象来完成 匿名 对象可以作为实际参数进行传递 //需求 汽车修配三,对汽车进行改装 public static void main(String[] args) { Car q=new Car(); } public static void show(Car c) { c.num=3; c.color="black" c.run(); } 当show(new Car()); 执行完以后,函数空间就释放了,将不再会有变量指向对象,那么个对象变成垃圾了 *** 让对象变成垃圾的方法 q=null; ---------------------------------------- 封装 好处 将变化隔离 便于使用 提高重用性 提高安全性 封装原则 将对象需要对外提供的内容都隐藏起来 把属性都隐藏,提供公共方法对其访问 关键字private (对象私有化后,只能在本类中进行使用) 是一权限修饰符 用于修饰成员(成员变量和成员函数) private int age; private static void speak(0 { } 被私有化的成员只在本类中有效 记住 将类中的属性都私有化 通过对外提供方法对其继续访问,因为有了方法可以对数据进行控制 对于属性的访问无外乎,设置 和获取 所以通常使用的方问方式规范:setXX getXX就是属性名 private String name; public void setName(String name) //用来给该属性进行赋值 { this.name=name; } public String getName() //用来获取该属性的值 。 { return name; } get 的返回值类型一定是获取变量的返回类型(name的返回类型) set 的返回类型一定是void 私有仅是封装的一种形式 记住: 成员变量在堆内存中,所以有初始化值,可以直接参与运算 局部变量在栈内存中,所以没有初始化值,不可以直接参与运算 构造函数 函数名与类名相同 不用定义返回值类型 没有具体的返回值 class Person { Person(){} } publiv static void main(String[] args) { Person p=new Person(); //给对象进行初始化值(只要一new 就会调用) } 只要创建对象,对象都必须初始化,也就是对象都 必须在创建时调用构造函数 如果对象初始化是调用不到对应的构造函数,编译失败 通过class关键字定义类时 该类中的如果没有指定过构造函数 那么该 类会有一个默认的空参数构造函数 如果在类中自定义了构造函数,那么默认构造函数就没有了 作用 给对象进行初始化 注意 默认构造函数: 当没有定义构造函数时,jvm会自动去调用默认的构造函数 Person(){} 构造函数的重载 person(){} person(String name,int age){ this.name=name; this.age=age; } 初始化的参数与个数必须要一样 构造函数与一般函数的区别 写法上的不同 构造函数:Person(){} 一般函数:public void person(){} 运行上的不同: 只要一创建对象,构造函数就自动运行 必须要对象调用才可以使用 次数: 构造函数只在对象创建时调用一次,因为初始化动作只执行一次 一般函数是对象创建后调用,可以调用多次 只要一 new对象 构造函数就运行了 构造函数是对对象初始化值 记住: 如果对象一产生就需要完成一些属性值的定义,或者行为的运行 这些内容都定义在构造函数中,如果属性值不确定,可以在构造函数的参数列表上体现 这些内容都定义在构造函数中(当分析的事物,属性或行为) 什么时候定义构造函数?? 当分析事物时,该事物具备一些特性或行为,就将这些特性或行为定义在构造函数中 **** 构造函数的参数根据:有没有未知参数参与运算,有就定义函数的参数个数及参数类型 构造 代码块 { // System.out.println(); } 作用: 给对象进行初始化 特点:只要一创建对象,该对象自动执行,优先于构造函数执行 构造代码块与构造函数的区别 构造代码块是给所有对象初始化 构造函数: 给指定对象进行初始化 构造函数也可以被private私有化,因为构造函数也是成员函数,当类中的构造函数被私有化后,对象是无法建立的 this关键字: 当成员变量和局部变量同名时,需要区分可以使用一个关键字:this this代表一个本类对象。 ********* this :其实代表的是this所在函数所属的对象引用 简单讲:哪个对象在调用this所在的函数 ,this 就代表哪 个对象 this就代表当前对象 谁调用,this.name 那么个this就代表那个对象的引用 *** 以后当看到this时,首先要想到它是某个对象的引用。 class Person { Person(String name,inta age) { this.name=name; //this代表的是p1的对象引用 this.age=age; } public void show() { } } public static void main(String[] args) { Person p1=new Person("lisi","20"); p1.show(); } 在类中成员访问,记住,必须要用对象调用的方式 如果在本类中没有产生对象,使用成员都是用this完成 this在构造函数间的调用 this:在构造函数中的应用 可以通过this在构造函数中对其他构造函数进行调用 怎么表示构造函数间的调用就是用:this(); *****this语句调用构造函必须是要放在第一行 ***** 一般函数是不能直接调用构造函数的 class Person { Person(){} Person(String name,inta age) { this(); //此处调用的Person()的构造函数 this.name=name; //this代表的是p1的对象引用 this.age=age; } public void show() { } public static void main(String[] args) { Person p1=new Person("lisi","20");//括号内的代表构函数的初始化值 p1.show(); } ## this语句是不能用在一般函数中的,只能在构造函数间 什么时候用this 当定义功能时,功能内部用到了调用该功能的对象。这时该对象用this表示 public boolean compareAge(Person p) { if(this.age==p.age) //this.age 对象的引用对象,p.age代表传进来的参数的age值; return true; return false; }
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员——学习日记7 java面向对象之封装
- 黑马程序员_面向对象---封装
- 黑马程序员笔记——Java面向对象之封装
- 黑马程序员-------- java面向对象 封装、构造函数、this static关键字、单例设计
- 黑马程序员 面向对象特征 封装、继承、多态总结
- 黑马程序员_Java面向对象之封装、继承和多态学习笔记
- 黑马程序员 面向对象及三大特性之封装
- 黑马程序员----java面向对象01(封装、静态)
- 黑马程序员《java基础总结(二)》(面向对象特点--封装)
- 黑马程序员面试题面向对象一(封装,构造函数,this,static,单例设计模式,继承)
- 黑马程序员—java面向对象总结(2)—面向对象封装特性
- 黑马程序员_java面向对象_封装
- 黑马程序员---面向对象上(封装,继承,多态)
- 黑马程序员----面向对象设计的封装、继承、多态特性
- 黑马程序员——Java面向对象封装继承多态
- 黑马程序员---java面向对象 封装, 继承, 多态
- 黑马程序员——3.面向对象(堆栈、匿名、封装、构造函数、this、静态、数组工具类)
- 黑马程序员------oc之面向对象特性 封装、多态、继承等
- 黑马程序员 Java基础_4 面向对象-抽象与封装
- 黑马程序员——Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)