面向对象

  1.面向对象的概念

  2.理解面向对象

    *面向对象其实是相对面向过程而言的,面向对象和面向过程都是一种思想,它们所强调的内容不一样。

    *面向对象:强调的是功能的行为,将功能进行了封装成了对象,强调了具备功能的对象。

    *面向对象是基于面向过程的

  3.类与对象的关系

    人开门:利用名词提炼法

    人{

      开门(门){

        门.开();

      }

     }

    门{

      开(){

        操作门轴等

      }

    }

4.面向对象的三大特征:封装、继承、多态。

以后开发其实就是找对象使用,没有对象就创建一个对象来使用,就像找女朋友一样,没有就自己找个,这里没有对象就自己建一个(当然也是要找适合的)。

找对象,建立对象,使用对象,并维护对象的关系。生活中的对象:张三,王五...

想要描述:提取对象中的共性内容,对具体的抽象。

反射到Java中,描述就是关键字class定义的类,而具体的对象就是对应Java在堆内存中是使用new关键字建立的实体。

类就是对现实生活中事物的描述,而对象就是这类事物实实在在存在的个体。

5.成员变量和局部变量的区别

  1.作用范围:

    成员变量作用于整个类中,局部变量只在某个范围内有效。(一般指的就是方法,语句体内)

  2.在内存中的位置

    成员变量随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中,而局部变量在方法被调用,或者语句被执行的时候存在,存储在栈内存中。

  3.初始值

     成员变量有默认初始值,局部变量没有默认初始值,使用前必须赋值。

6.匿名对象

  匿名对象其实就是对象的简化形式

  使用的两种情况:a.当对对象的方法仅进行一次的调用的时候;b.匿名对像可以作为实际参数进行传递

如果对一个对象进行多个成员调用,必须给这个对象起个名字

需求:汽车修配厂,对汽车进行改装,将来的车都改成黑车,三个轮胎。

public static void main(String[] args)

 {

    Car q = new Car();

    show(q);

 }

public static void show(Car c)

 {

    c.num = 3;

    c.color = "black";

    c.run();

 }

封装

  封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

   好处:将变化隔离;便于使用;提高重用性;提高安全性。

   原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共的方法对其访问

关键字private:封装在代码中的体现

   (1)私有的意思,权限修饰符

   (2)用来修饰成员变量和成员函数

   (3)用private修饰的成员只在本类中有效

   (4)私有是封装的一种体现

class Person

{

 private int age;

public void setAge(int a)

 {

  if(a>0 && a<130)

  age =a;

  else

     System.out.println("false age");

 }

public int getAge()

 {

    return age;

 }

  void speak()

 {

    System.out.println("age="+age);

 }

}

class PersonDemo

{

 public static void main(String[] args)

 {

    Person p = new Person();

    //p.age = 20;//

    p.setAge(20);

    p.speak();

 }

}

构造函数

  特点:

    1.函数名和类名相同

    2.不用定义返回值类型

    3.不用写return语句

  作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数。

  注意:

    1.如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。

    2.如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法,这个时候,你可以不使用无参构造方法,  如果你想使用,那么,就必须手动给出无参构造方法。

  建议:

    一般情况下,我们的自定义类都要手动给出无参构造方法。

class Person1

{

   private String name;

   private int age;

 Person1()

 {

    System.out.println("A:name="+name+",,age="+age);

    cry();

 }

 Person1(String n)

 {

    name = n;

    System.out.println("B:name="+name+",,age="+age);

    cry();

 }

 Person1(String n,int a)

 {

    name = n;

    age = a;

    System.out.println("C:name="+name+",,age="+age);

    cry();

 }

  public void cry()

 {

    System.out.println("cry..........");

 }

}

class PersonDemo2

{

 public static void main(String[]args)

 {

   Person1 p1 = new Person1();

   Person1 p2 = new Person1("lisi");

   Person1 p3 = new Person1("wangwu",10);

 }

}

构造方法和成员方法的区别

    A:格式区别

       构造方法和类名相同,并且没有返回类型,也没有返回值。

       普通成员方法可以任意起名,必须有返回类型,可以没有返回值。

    B:作用区别

       构造方法用于创建对象,并进行初始化值。

       普通成员方法是用于完成特定功能的。

    C:调用区别

       构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数

       普通成员方法是由创建好的对象调用,可以调用多次

构造代码块:

  作用:给对象初始化,对象一建立就执行,而且优先于构造函数执行

和构造函数的区别

  构造代码块是给所有不同对象的共性进行统一初始化

    构造函数是给对应的对象进行初始化构造代码块中定义的不同的对象共性的初始化内容。

this关键字

   (1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁  

   (2)this的使用场景

      A:用于区分同名成员变量和局部变量;

      B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象

      C:构造函数间调用

         这个时候,this(参数)必须作为第一条语句存在。
Person p = new Person();在内存中做了哪些事情。

   (1)将Person.class文件加载进内存中。

   (2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。

   (3)在堆内存给对象分配空间。

   (4)对对象中的成员进行默认初始化。

   (5)对对象中的成员进行显示初始化。

   (6)调用构造代码块对对象进行初始化。(如果没有就不执行)

   (7)调用构造方法对对象进行初始化。对象初始化完毕。

   (8)将对象的内存地址赋值给p变量,让p变量指向该对象。

Java Study For Five Day( 面向对象一)的更多相关文章

  1. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...

  2. 第四节:详细讲解Java中的类和面向对象思想

    前言 大家好,给大家带来详细讲解Java中的类和面向对象思想的概述,希望你们喜欢 类和面向对象 在Java中怎样理解对象,创建对象和引用:什么是引用,对于基础学习的同学,要深入了解引用.示例:Stri ...

  3. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

  4. 20165222《Java程序设计》——实验二 面向对象程序设计

    20165222<Java程序设计>——实验二 面向对象程序设计 提交点一.JUnit测试用例 知识点:这里就是了解测试代码的应用,测试代码的书写为:@Test assertEquals( ...

  5. Java第五次作业--面向对象高级特性(抽象类与接口)

    Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...

  6. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  7. Java第四次作业—面向对象高级特性(继承和多态)

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  8. Java进击C#——语法之面向对象

    本章简言 上一章笔者讲到关于ADO.NET相关的知识,知道了如何去访问数据库.本章将来讲关于面向对象的思想.不管在JAVA还是在C#面向对象思想的重要性都是占了一个很大的成份.往往他就像呼吸一样子,更 ...

  9. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

    在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...

  10. Java中二维数组与面向对象

    1:二维数组(理解) (1)元素是一维数组的数组. (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C: ...

随机推荐

  1. in notin exists not exists 性能优化算法总结

    in notin exists not exists 性能优化算法总结 1.1. in 和 exists 区别 1.2. not in 能不能走索引 1.3. not in 和 join 的关系 1. ...

  2. 一文快速上手-Vue CLI脚手架

    目录 安装Vue CLI Vue CLI新建项目 vue.js 3 项目目录结构 项目的运行和打包 vue.config.js文件解析 安装Vue CLI (1) 全局安装Vue CLI 方式一(推荐 ...

  3. 击败全球上千参赛队伍,合合信息获ICDAR“文本篡改检测”赛道冠军

    AI技术的快速发展激发了人们对于美好未来的畅享,也带来了潜在的危机,数据泄露.电信诈骗等系列风险与隐患开始浮出水面.利用科技手段构建可信的技术发展环境,保护使用者的信息及财产安全,正在成为行业共识. ...

  4. STEP: 用于多变量时间序列预测的预训练增强时空图神经网络《Pre-training Enhanced Spatial-temporal Graph Neural Network for Multivariate Time Series Forecasting》(时间序列预测)

    2023年12月27日,看一篇老师给的论文. 论文:Pre-training Enhanced Spatial-temporal Graph Neural Network for Multivaria ...

  5. TypeScript 学习笔记 – Handbook 1

    前言 一转眼, 一年多没有写 TypeScript 了. 最近又要开始写了, 乘此机会打算系统学习一下, 顺便写一个学习笔记. 我接触 TypeScript 比较早, 那是 Angular 2 bet ...

  6. SQL Server – Temporal Table 时态表

    前言 之前写过一篇, 但那个时候还没有开始用, 现在是要用了, 所以翻新一下呗. SQL server temporal table 学习笔记 主要参考: 官网 Temporal tables [译] ...

  7. C#|.net core 基础 - 值传递 vs 引用传递

    不知道你在开发过程中有没有遇到过这样的困惑:这个变量怎么值被改?这个值怎么没变? 今天就来和大家分享可能导致这个问题的根本原因值传递 vs 引用传递. 在此之前我们先回顾两组基本概念: 值类型 vs ...

  8. Serilog文档翻译系列(六) - 可用的接收器、增强器、格式化输出

    01.提供的接收器 Serilog 使用接收器将日志事件以各种格式写入存储.许多接收器由更广泛的 Serilog 社区开发和支持:可以通过在 NuGet 上搜索 serilog 标签找到. 02.增强 ...

  9. GPT分区和MRB分区

    GPT分区和MBR分区都是硬盘分区的方式,但它们有不同的实现方法和优缺点. MBR(Master Boot Record)分区是传统的分区方式,它将硬盘分为四个主分区或者三个主分区和一个扩展分区.在每 ...

  10. Math 数学库

    Math.random()  随机数字 Math.PI  圆周率