黑马程序员:面向对象之----------------------封装

------- 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培训期待与您交流! ---------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值