面向对象

  • 一、编程思想
    • 什么是编程思想
    • 面向过程和面向对象
    • 面向过程编程思想
      • 面向过程思想
      • 面向过程实现
      • 应用场景
      • 面向过程特点
      • 面向过程代表语言
    • 面向对象介绍
      • 面向对象编程思想
      • 面向对象的三大特征
      • 面向对象思想总结
    • 什么是编程
    • 面向对象分析方法分析问题的思路和步骤
  • 二、类和对象
      • 类的概述
      • 类如何描述现实世界的事物
      • 类的定义
    • 对象
      • 对象的概述
      • 对象和类之间的关系
        • 理解:
      • 对象的创建和使用
        • 对象创建
        • 使用对象
    • 成员变量的初始化
    • 练习
    • 对象运行时内存图
      • 一个对象内存图
  • 三、属性
    • 成员变量(属性)
    • 局部变量
    • 成员变量和局部变量的区别
  • 四、this关键字
    • 什么是this
    • this关键字应用
  • 五、封装
    • 什么是封装
    • 为什么要封装
      • 保证安全性
      • 隐藏复杂性
    • 信息的封装和隐藏
      • private关键字
        • 什么是权限修饰符
        • private关键字介绍
    • 封装实现
  • 六、 方法的参数传递
    • 参数列表-基本类型
    • 参数列表-引用类型
  • 练习题

一、编程思想

什么是编程思想

做人有做人的原则,编程也有编程的原则。这些编程的原则,就叫做编程思想。

面向过程和面向对象

二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑 怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做

图分析:人把大象装进冰箱

面向过程编程思想

面向过程思想

过程为中心的编程思想 以什么正在发生为主要目标进行编程

面向过程实现

分析出解决问题所需要的每一个步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用

应用场景

适合于功能简单、业务逻辑单一的场景,优势比较明显,效率较高

面向过程特点

参与每一个步骤 参与每一个实现 参与每一个细节

面向过程代表语言

fortan语言、C语言

面向对象介绍

面向对象编程思想

对象为核心编程思想,对象是指现实世界中所有事物。强调对象所具备的功能,需求通过对象来实现。 面向对象思想分类: 面向对象分析(Object Oriented Analysis)简称:OOA 面向对象设计(Object Oriented Design)简称:OOD 面向对象开发(Object Oriented Programming)简称:OOP

面向对象的三大特征

封装(Encapsulation) 继承(Inheritance)多态(Polymorphism)

  1. 案例分析

案例一:吃饭

案例二:洗衣服

面向对象思想总结

简单化:让复杂的事情简单化 角色转变:执行者 —> 指挥者 人性化:更加符合人类习惯思想

什么是编程

编程的目的是将现实世界的事物实现信息化,如:超市收银软件

编程是人类发明的,编程思想源于现实世界,现实世界中所看到的的事物比较具体,编程将现实世界中的事物抽取 到虚拟世界通过一种更加抽象方式展现;

面向对象分析方法分析问题的思路和步骤

① 根据问题需要,选择问题所针对的现实世界中的实体

② 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类

③ 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构

④ 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具

二、类和对象

类的概述

编程都是为了将现实世界事物实现信息化,在Java语言中是以类(class)为单位描述现实世界的事物,将现实世界事物的属性和行为抽取到Java类中,可以理解为类是现实世界事物的抽象化

类如何描述现实世界的事物

java类 现实事物
成员变量 属性
成员方法 行为

**成员变量:**定义在类中方法外,描述现实世界某一类事物的属性。 **成员方法:**用于描述现实世界事物中的行为进行封装。

类的定义

格式:
修饰符 class 类名 {
// 成员变量
// 成员方法
}

举例:用类描述学生类

public class Student {String name; // 学生姓名int age; // 学生年龄String gender; // 学生性别// 吃饭行为public void eat() {System.out.println("我会吃饭");}// 学习行为public void study() {System.out.println("我会学习");}// 睡觉行为public void sleep() {System.out.println("我会睡觉");}
}

对象

对象的概述

对象是实际存在的该类事物的每个个体,因而也被称为实例。万事万物皆对象。

对象和类之间的关系

理解:

类 = 抽象概念的人 对象 = 实实在在某个人

类是描述现实世界事物的一组相关属性和行为的集合,对象是该类事物中的某一个具体对象 类只能存在想象阶段,对象比较具体,可以操作阶段

对象的创建和使用

对象创建

格式:类名 对象名 = new 类名();

举例:

Person person = new Person();

使用对象

操作成员变量 赋值:
对象名.变量名 = 赋值;
person.age = 10;

取值:
数据类型 变量名 = 对象名.变量名;
int age = person.age;
直接输出:
输出语句(对象名.变量名);
System.out.println(person.age);
操作成员方法调用方法:
对象名.方法名();
person.sleep();

成员变量的初始化

类型 数据类型 默认初始化值
基本类型(整数) byte、short、int、long 0
基本类型(浮点数) float、double 0.0
基本类型(字符型) char ‘\u0000’
基本类型(布尔型) boolean false
引用类型 数组、类、接口 null

类的访问机制

在一个类中的访问机制:类中的方法可以直接访问类中的成员变量(static方法访问非static成员变量,编译不通 过)

不在一个类中的访问机制:先创建要访问类的对象,再用对象访问类中的成员

练习

1、分析汽车的属性和行为,创建汽车对象和操作汽车对象 2、分析手机的属性和行为,创建手机对象和操作手机对象 3、分析狗的属性和行为,创建狗对象和操作狗对象

对象运行时内存图

Person类

class Person { // 人类String name;// 姓名int age = 10;// 年龄boolean isMale;// 是否男性
}
一个对象内存图

两个对象内存图

三个对象内存图(不同的引用指向同一个对象)

  1. 匿名对象

匿名对象即没有名字的对象

举例:

 //以下是两个对象分别调用了sleep和study方法new Person().sleep();new Person().study();//以下是同一个对象调用了sleep又调用了study方法Person p = new Person();p.study();p.sleep();

使用场景:

① 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
new 类名().sleep();
② 将匿名对象作为实参传递给一个方法调用
方法名(new 类名());

三、属性

成员变量(属性)

在方法体外,类体内声明的变量称为成员变量

局部变量

在方法上或方法体内部声明的变量称为局部变量

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

/ 成员变量 局部变量
声明位置 直接声明在类中方法外 方法形参或内部、代码块内、构造器内等
修饰符 private、public、static、final等 不能用权限修饰符修饰,可以用final修饰
初始化值 有默认初始化值 没有默认初始化值,必须先赋值,方可使用
内存加载位置 堆内存空间 或 方法区内存空间静态域内 栈内存空间
生命周期 随着类的加载或对象的存在而存在,随类的销毁或对象的销毁而销毁 局部变量是随着方法的调用而存在,方法的调用完毕而消失
使用范围 在整个类中都可以使用 只能在当前代码块的范围使用

注:static关键字修饰的内容随着类的加载而加载,如果定义了一个static修饰的变量会在类加载的时候就已经存在。

四、this关键字

什么是this

this表示当前对象引用,类中的成员被哪个对象调用,this就代表调用的这个对象。

this关键字应用

  1. 解决局部变量隐藏成员变量时的问题 当成员变量和局部变量同名时,就近原则优先使用局部变量。如果要明确调用的是成员变量,就在变量前面加上this即可。this.变量名。
class Student{int age = 10;public void show(){int age = 20;System.out.println("局部变量age的值:"+age);System.out.println("成员变量age的值:"+this.age);
}
  1. 调用本类中的其他构造方法

五、封装

什么是封装

封装的原则:类中不想对外展示的属性和行为,将其隐藏起来,额外提供公共的访问方式。

为什么要封装

保证安全性

使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。封装防止了外部 随意访问,增加了安全屏障。

隐藏复杂性

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的来 说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装的设计思想。

信息的封装和隐藏

Java中通过将数据声明为私有的(private),再提供公共的(public)方法,getXxx()和setXxx()实现对该属性的操作

private关键字

什么是权限修饰符

权限修饰符可以修饰类、类中成员的权限做特定的限制,当被访问时必须满足特定的要求。

private关键字介绍

private是java中最小的权限修饰符,与public、默认、protected同类。 可以修饰类中的成员(成员变量、成员方法、构造方法、内部类)等。 被private关键字修饰的成员限定只能在本类中访问。

private关键字应用 修饰成员变量
格式:private 数据类型 变量名;
例:private int age;
修饰成员方法
格式:private 返回值类型 方法名(){}
例:private void show(){}

封装实现

封装:private关键字修饰隐藏修饰要隐藏的属性和方法。 访问: 成员变量:公共setXxx(参数列表)方法为成员变量赋值,公共getXxx()方法返回成员变量的值。 成员方法:公共方法中访问

封装成员变量:

class Student {public String name; // name定义为private,只能被Student类内部访问private int age;// age定义为private,只能被Student类内部访问// 提供getAge方法获取age的值public int getAge() {return age;}// 提供setAge方法给age赋值public void setAge(int age) {//可以在这里做一些判断,判断权限、判断数据合法性等if(age <= 0 || age > 120){System.out.println("您输入的数据不合法!");return;}this.age = age;}
}

封装成员方法

class Student {public String name; // name定义为private,只能被Student类内部访问private int age;// age定义为private,只能被Student类内部访问// 提供getAge方法获取age的值public int getAge() {return age;}// 提供setAge方法给age赋值public void setAge(int age) {//可以在这里做一些判断,判断权限、判断数据合法性等if(age <= 0 || age > 120){System.out.println("您输入的数据不合法!");return;}this.age = age;}//以下是对成员方法进行封装private void method(){System.out.println("我是私有方法");}public void method1(){method();//调用私有方法}
}

测试

public class PersonTest {public static void main(String[] args) {Student student = new Student();//错误姿势student.age = 18;//报错,编译不通过student.method();//报错,编译不通过//正确姿势student.setAge(18);//正确姿势设置变量值int age = student.getAge();//获取变量值System.out.println(age);student.method1();//访问method1方法,由方法内部调用method}
}

六、 方法的参数传递

参数列表-基本类型

将实参基本数据类型变量的"数据值"传递给形参

举例:

public static void main(String[] args) {int a = 10;System.out.println("修改之前的值为:" + a); // 10change(a);System.out.println("修改之后的值为:" + a); // 10}public static void change(int a) {System.out.println("a修改前的值为:" + a); // 10a = 3;System.out.println("a修改后的值为:" + a); // 3}

参数列表-引用类型

将实参基本数据类型变量的"地址值"传递给形参

举例:

public static void main(String[] args) {Person p = new Person();p.name = "Tom";System.out.println("修改之前的name值为:" + p.name); // Tomchange(p);System.out.println("修改之后的name值为:" + p.name); // Jim}public static void change(Person p) {System.out.println("修改之前的name值为:" + p.name); // Tomp.name = 'Jim';System.out.println("修改之后的name值为:" + p.name); // Jim}

练习题

1.说说对编程思想的理解?
2.面向对象的特征?
3.什么是类?
4.什么是对象?
5.如何操作对象中的成员变量和成员方法?
6.什么是成员变量?有什么作用?
7.什么是成员方法?有什么作用?
8.类如何描述现实世界事物的属性和行为?
9.什么是匿名对象?匿名对象有什么特点?什么场景下应用?
10.请画出对象在内存中的运行内存图,并说出每一个步骤?
11.成员变量和局部变量有什么区别?
12.this关键字理解,this关键字有什么作用?
13.什么是封装?封装哪些好处?
14.private关键字的作用?
15.方法参数传递中,基本类型传递和引用类型传递有什么区别?

JAVA基础讲义06-面向对象相关推荐

  1. JAVA学习-java基础讲义01

    java基础讲义 一 java语言 1.1 java语言介绍 1.1.1 什么是java 1.1.2 java之父 1.1.3 java语言发展史 1.2 java语言的特点 二 java环境搭建相关 ...

  2. JAVA学习-java基础讲义02

    java基础讲义02 一 进制 1.1 进制介绍 1.2 二进制 1.3 任意进制到十进制转换 1.4 十进制到任意进制之间的转换 1.5 快速转换法 1.6 有符号数据表示法 二 Java变量和数据 ...

  3. Java基础教程:面向对象编程[2]

    Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...

  4. java基础讲义03

    java基础讲义 一 流程控制 1.1流程控制语句介绍 1.2顺序结构 二 选择控制 2.1 选择结构介绍 2.2 选择语句if 2.2.1 格式1 2.2.2 if格式2 2.2.3 if格式3 2 ...

  5. java基础入门-02-【面向对象】

    Java基础入门-02-[面向对象] 8.面向对象 8.1. 类和对象 8.1.1 类和对象的理解 8.1.2 类的定义 8.1.3 对象的使用 8.1.4 学生对象-练习 8.2. 对象内存图 8. ...

  6. python 面向对象_Python 和 Java 基础对比 08 —— 面向对象

    一.面向对象编程(object oriented programming) 简称:OOP,是一种编程的思想. OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象的出现极 ...

  7. Java基础知识(二) 面向对象的技术

    Java基础知识 面向对象的技术 1. 面向对象与面向过程有什么区别 2. 面向对象有哪些特征 3. 什么是继承 4. 组合和继承的区别 5. 多态的实现机制 6. 重载和覆盖有什么区别 7. 抽象类 ...

  8. Java基础系列五 面向对象程序设计

    Java基础系列第一章 初识Java语言 Java基础系列第二章 Java语言基础 Java基础系列第三章 Java流程控制 Java基础系列第四章 Java数组与字符串 Java基础系列第五章 面向 ...

  9. Java基础篇:面向对象

    文章目录 学习面向对象内容的三条主线 面向过程(POP)与面向对象(OOP) 面向对象的思想概述 Java类和对象 创建Java自定义类 对象的创建和使用 对象的创建和使用:匿名对象 类的成员之一:属 ...

  10. JAVA基础第二章 面向对象进阶

    2.1封装与getter.setter方法 1.读写是两个操作,读即取值.访问值,写即赋值. 2.面向对象的三大特征:封装.继承.多态 (1)封装--一个程序肯定会定义很多类,那么为了保证各个类之间数 ...

最新文章

  1. 为什么从前那些.NET开发者都不写单元测试呢?
  2. path.join 与 path.resolve 的区别
  3. 一个能够保护个人收藏夹隐私的Chrome扩展
  4. java 性能调优_Java性能调优调查结果(第三部分)
  5. 怎样实现banner自动播放html,纯CSS3实现banner图片自动轮播效果方式总结
  6. VS code常用的快捷键
  7. 程序员肚子越来越大_肚子越来越大,除了肥胖还可能是疾病信号!腰间搓一搓,排出痰浊,消脂防病~...
  8. 小米3Android密码怎么解吗,小米路由器3管理密码忘记了怎么办?
  9. JS 父子(弹出)窗口操作总结
  10. Colaboratory读取谷歌云盘(Google drive)中的数据(2020年3月28日更新)
  11. Adobe PDF虚拟打印机 如何添加
  12. github windows系统监控_windows快速制作U盘启动工具Rufus
  13. 小米笔记本备份、SSD分区、U盘Ghost详解及对产品的建议
  14. 3d Max修改器中英文对照表
  15. 关于AWB的肤色问题
  16. ORACLE统计报表
  17. 【模拟器】华为模拟器eNSP安装注意事项及常见报错处理
  18. CuteFTP 问题及 ftp 模式详解
  19. 关于smtp发信的收件人to cc和bcc
  20. linux 视频电话,多人音视频通话-Linux开发集成-SDK开发集成-音视频通话-网易云信开发文档...

热门文章

  1. JUC系列——CyclicBarrier
  2. string和wstring之间转换的三种方法
  3. es dsl 提取不重复值_询问操作方法:诊断DSL挂断,从PowerPoint中提取媒体,将IE限制为单个网页...
  4. 【自动化测试】UI自动化测试面试题小结
  5. 在线生成简单二维码图片
  6. 四川传媒学院计算机应用技术分数,2017四川传媒大学分数线_四川传媒学院专业排名及分数线...
  7. web.xml过滤html,Servlet过滤器两种配置方法(注解、配置web.xml文件)
  8. 在英特尔做了一年 AI 研发,真的很香
  9. 女助理没有订到会议室,被领导训了一顿,冤不冤?
  10. 用java根据IP定位城市比较准,可以到村的库