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

技术标签: 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培训期待与您交流! ---------- 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jesee_wen/article/details/8712832

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文