面向对象介绍

  • 面向对象引入

需求:求数组{1,2,3,4,8,7,6,5}的最大值;

 public static void main(String[] args) {// 需求:求数组{1,2,3,4,8,7,6,5}的最大值;/** 解决问题的思路: 1、明确需求:搞清楚、确认清楚,到底要我们做什么事; 2、需求分析:如何实现需求(这个事情到底该怎么做);* a:创建一个数组,把需求中的数据保存到数组中; b:定义一个int型变量max,表示最大的值;* c:将数组中0下标的数据赋值该上一步的变量,表示默认0下标数据是最大值; d:从1下标开始遍历数组,拿到数组中每一个数据,和变量max的值比较;* 如果变量max中的数据比数组某个下标的数据小,就把该下标的数据赋值给变量max; e:循环结束,变量max中就是要求的最大值* 3、编码实现:具体开始做事情; 4、测试:执行代码,看看事情到底有没有做成、有没有问题;*/// a:创建一个数组,把需求中的数据保存到数组中;int[] arr = new int[] {11,2,3,4,8,7,6,5};// b:定义一个int型变量max,表示最大的值;int max;// c:将数组中0下标的数据赋值该上一步的变量,表示默认0下标数据是最大值;max = arr[0];// d:从1下标开始遍历数组,拿到数组中每一个数据,和变量max的值比较;for (int i = 1; i < arr.length; i++) {//     如果变量max中的数据比数组某个下标的数据小,就把该下标的数据赋值给变量max;if(max < arr[i]) {max = arr[i];}}// e:循环结束,变量max中就是要求的最大值System.out.println("数组中最大值是:" + max);}

随着时间往后发展,可能在一个类中多次需要用到求数组最大值的功能。

如果每一次出现数组求最大值的功能,都像上面一样在写一遍代码,就很麻烦,而且代码复用性差,后期维护就难;

为了解决这个问题,我们可以使用函数来实现:

需求:有可能在不同的程序中都出现这个功能:求数组的最大值;

思考:如果可以将函数抽取出来,放到某一个地方,然后在提供一种方法,让所有需要使用这个函数的地方都可以调用这个函数,就能解决在不同的类中出现相同函数代码的问题;

因为函数是定义在类中的独立代码,所以要抽出来,也只能放到某一个类中;

问题:一个类中不能直接使用其他类的函数;如何解决这个问题?

解决办法:Java中通过 类名.函数名(实参) 的方式,可以调用其他类中的函数;

本类中:

方法放在了Tools.java这个类中;

在其他类中要想调用,应该这么写:

Tools.arrayMax(具体的数组);

像最后这种方式,就使用了面向对象的思想;

https://www.zhihu.com/video/1065593352904314880


面向过程

  • 什么是过程:

过程就是做一件事情的先后经过;

生活中的过程:

泡面:1、买面;2、烧开水;3、拆包装,把面放到开水中,加入调料,盖上;4、吃面;

  • 程序的过程:

java中的过程,程序执行的先后经过,先执行哪行,后执行哪行;

  • 什么是面向过程:

就是一种解决问题的思想;

使用这种思想解决问题,我们关心的是事情中有哪几步组成, 然后一步步实现;

使用面向过程写程序,我们首先要分析需求由那些功能组成,然后写函数实现各个功能,最后根据需求依次调用各个函数;

在这个过程中,开发者需要参与到实现的每一步中,就是劳动者;

前面几天都是按照面向过程的思想写程序;

面向过程的好处:在需求简单的时候,程序简单明了,结构清晰;

弊端:在需求复杂的时候,就会非常麻烦,开发和维护都很困难;

面向对象

  • 什么是对象:

指的是生活中实际存在的事物;

  • 生活中的对象:

冰箱;被子;钱;电脑;手机;椅子;桌子;地板;电灯;空气;雾霾;地球;太阳;……

  • 什么是面向对象:

也是一种解决问题的思想;

使用这种思想解决问题,我们关心的是事情中有那些参与者;

使用这种思想写程序,首先分析需求有那些功能,然后找有没有已经实现好功能的类,

如果有,就直接拿来,创建它的对象,通过对象调用功能;

如果没有,就需要自己写一个类,然后在类中书写实现功能的函数【面向过程】,然后创建这个类的对象,通过对象调用功能;

面向对象的思想,更符合我们现实生活情况,也更适合开发复杂的功能;

在面向过程中,程序的基本单位是函数;面向对象,程序的基本组成就是类;

https://www.zhihu.com/video/1065593911182999553


类与对象

  • 类的概念

类:表示一类具有共同属性和行为的事物,是一种抽象的概念。

例如,生活中我们经常说的一个词,“电话”,指的就是所有具有打电话功能的东西,而不是指代具体某一部电话;

  • 类的写法

在Java中采用class关键字定义类。定义类的格式:

修饰符  class   类名{类中的内容
}

修饰符:public、default(默认的)、private、static(内部类),如果省略不写,那就是默认的修饰符(default)。

类名:必须符合标识符的定义语法要求,同时还要满足如果是多个单词每个单词首字母大写。

类中的内容:主要根据类的描述信息进行具体的书写。后面详细讲解。

  • 类的成员

一个类可以表示同一类事物的共有属性和功能;

事物的属性使用类中的变量表示,事物的功能使用类中的函数表示;

例如,创建一个类表示人:

class  Person{
年龄;
性别;
姓名;
地址;
……
吃饭
睡觉
说话
……}

https://www.zhihu.com/video/1065594261700911104


对象

  • 对象的概念

在现实生活中,对象指的是实际存在的事物;

在Java中,对象指的是在堆内存中开辟的一块空间;例如数组就是一个对象;

对象都是根据类创建出来的;

  • 对象的创建

Java中对象的创建,有五种方式:

  1. 使用new关键字创建;
  2. 使用使用Class类的newInstance方法
  3. 使用Constructor类的newInstance方法
  4. 使用clone方法
  5. 使用反序列化

其中,最常用、最简单的方式,就是使用new关键字创建对象;

格式:

  1. 创建对象的方式:

new 类名();

对象的使用

  • 通过对象名使用:

https://www.zhihu.com/video/1065594851201978368


类和对象的关系

类是抽象的概念,表示的是同一类事物共同的属性和行为;

事物的属性使用类中的成员变量表示,事物的行为使用类中的函数表示;

对象是根据类的描述在堆内存中开辟的一块空间,表示的是一个具体的事物;

对象是根据类创建的,先有类,后有对象。类是抽象的,对象是具体的;

https://www.zhihu.com/video/1065594978910318592


面向对象练习:

使用Java代码描述 猫抓老鼠的场景;

猫的名字叫汤姆,老鼠的名字叫杰瑞;
具体的场景输出应该是:
汤姆看见杰瑞在偷吃奶酪;
汤姆追杰瑞,杰瑞逃跑;
汤姆抓住杰瑞,杰瑞叫:啊,要死啦!

使用面向对象思想解决问题,

  • 第一步:分析需求,找到对象;

找对象的方法:名词提炼法;就是观察需求描述的文字,找到里面的名词;名词表示的就是实际的事物,也就是对象;

分析可知,这个例子中,有三个对象:猫;老鼠;奶酪;

因为奶酪不参与其他活动,所以为了简单,这里就用一个字符串表示奶酪;

所以需要创建两个类,分别表示猫和老鼠;

  • 第二步:使用伪代码描述上面找到的对象;

描述对象的原则:只需要描述和需求有关的属性和行为;

伪代码,就是不是真实的代码;就是程序员自己写的自己能看懂的符号,例如中文……

猫{属性:名字;行为: 看见(老鼠){老鼠的吃(“奶酪”);
}
追(老鼠){老鼠的逃跑();
}
抓住(老鼠){老鼠的叫(“啊,要死啦!”);
}
}
老鼠{属性:名字;行为:吃(奶酪){}跑(){}叫(叫的内容){}
}

第三步:使用伪代码描述场景:

猫  t = new 猫();
老鼠 l = new 老鼠();
t的名字 = “汤姆”;
l的名字 = “杰瑞”;

t.看见(l);
t.追(l);
t.抓住(l);

第四步:书写代码:

表示猫的类:

/*** * Cat* 表示猫的类* @author 快学大数据* 2018年6月14日 上午11:51:38*/
public class Cat {String name;/*** 猫看见老鼠的功能* @param m*/public void see(Mouse m) {System.out.print(name + "看见");//老鼠在吃奶酪m.eat("奶酪");}/*** 猫追老鼠的功能* @param m*/public void zhui(Mouse m) {System.out.println(name + "开始追"+m.name);//调用老鼠对象的方法,表示老鼠在逃跑m.run();}/*** 表示猫抓住老鼠的功能* @param m*/public void catchMouse(Mouse m) {System.out.println(name + "抓住了"+m.name);//调用老鼠对象的方法,表示老鼠被抓住后的惨叫m.say("啊,要死啦!");}
}

表示老鼠的类:

/*** * Mouse* 表示老鼠的类* @author 快学大数据* 2018年6月14日 上午11:52:26*/
public class Mouse {String name;//老鼠的名字/*** 老鼠吃东西的功能* @param food*/public void eat(String food) {System.out.println(name + "在吃" + food);}/*** 老鼠逃跑的功能*/public void run() {System.out.println(name + "正在疯狂的逃跑……");}/*** 老鼠叫的功能* @param str*/public void say(String str) {System.out.println(name + "大声的说:"+str);}
}

模拟场景的类:

/*** * Test* 测试猫抓老鼠的场景类* @author 快学大数据* 2018年6月14日 上午11:58:10*/
public class Test {public static void main(String[] args) {//1、先创建一个猫对象Cat cat = new Cat();//2、给这个猫起个名字cat.name = "汤姆";//3、创建一个老鼠对象Mouse m = new Mouse();//4、给这个老鼠起个名字m.name = "杰瑞";//调用方法,输出场景要求cat.see(m);cat.zhui(m);cat.catchMouse(m);}
}

https://www.zhihu.com/video/1065595884678664192


局部变量和成员变量

  • 局部位置:局部是指某个范围。例如:方法的大括号中的这些个范围,它就是一个局部范围。
  • 成员位置:在定义好类之后,在类的大括号内部的范围。

局部变量没有默认值,使用之前必须先赋值;
成员变量的位置在堆内存,所以都有默认值,使用之前可以先不赋值;

生命周期(内存的声明周期就是指内存的分配到回收):

  • 局部变量:局部变量的内存在栈内存的方法里面,函数进栈开始分配空间;函数出栈内存被释放;
  • 成员变量:成员变量在堆内存中;创建对象时分配内存;对象成为垃圾空间被回收时释放;
  • 局部变量:在局部范围中定义的变量,它们全部属于局部变量,并且它的使用范围就在从定义的位置往下到范围结束。
  • 成员变量:直接在类的成员位置上定义的变量。这些变量不受位置的限制,可以在任何方法中被使用。但是建议将所有的变量定义在类的最前面位置。

https://www.zhihu.com/video/1065596048357060608

java数组最大下标_【Java视频教程】day09-面向对象相关推荐

  1. java 数组操作_9个java数组常用操作实例

    数组的特点: 数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来唯一确定数组中的元素.根据数组的维度,可以将其分为一维数组.二 ...

  2. java 数组的方法_数组常用方法

    [TOC] # 定义 ~~~ //初始化一个长度为8的定长数组,其所有元素均为0 val arr1 = new Array[Int](8) //直接打印定长数组,内容为数组的hashcode值 pri ...

  3. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用

    Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...

  4. java数组个数无限_基于Java代码实现数字在数组中出现次数超过一半

    下文通过几种方法给大家介绍java数组数字出现次数,具体内容如下所示: 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散 ...

  5. java数组实现队列_使用数组在Java中进行队列实现

    java数组实现队列 什么是队列? (What is a Queue?) Queue is a special type of data structure, which is designed to ...

  6. java 数组 取部分_在Java中只获取一部分数组?

    在Java中只获取一部分数组? 我在Java中有一个Integers数组,我只想使用它的一部分. 我知道在Python中你可以做类似这个数组[index:]的东西,它从索引中返回数组. 这样的事情在J ...

  7. java 数组 字符串 编程_如何将数组转化为字符串,编程怎么实现呢

    展开全部 其实问主你636f707962616964757a686964616f31333335336339的问题关键应该是整型怎么转成字符串; 有三种方法1)String.valueOf(int i ...

  8. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

  9. java数组怎么定义?java数组定义方法

    有时候我们在学习java编程的时候,想定义数组,但是不知道怎么处理,或者忘记了,java数组怎么定义?本篇来简单回答一下这个问题. 本教程操作环境:windows7系统.java10版,DELL G3 ...

最新文章

  1. 将函数实现放在头文件中
  2. form表单获取input对象浏览器区别
  3. c#中消息机制阻塞实例与结论
  4. 南邮计算机学院是211,南京邮电大学是211还是985
  5. 数字图像处理基础与应用学习,第二章
  6. 字符串固定长度 易语言_易语言宽字符数据类型怎么设置
  7. [转] Omnifocus 2 for mac license
  8. C++ 纯虚函数与抽象类
  9. JavaScript高级程序设计 DOM事件处理 读书笔记
  10. 测试类报错:空指针异常
  11. [翻译]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表现模式架构对比
  12. 百度文库免费下载含豆丁、道客巴巴等
  13. 鲸会务手把手教您线上年会抽奖怎么玩
  14. python词性标注_自然语言处理基础技术之词性标注
  15. DOS批处理文件加密文件夹
  16. maven仓库的优先级,profile的优先级
  17. Python 判断无向图是否存在环
  18. apple pay 技术_如何在手机上设置Apple Pay和Google电子钱包
  19. LeetCode 648. 单词替换
  20. 集成支付宝SDK流程

热门文章

  1. Linux下find命令的用法
  2. yum与rpm的使用
  3. HTML5的明天,局部有小雨
  4. 没有足够的权限删除OU
  5. php ci 参数,CI如何写一个控制器,并传递参数正常解析访问?
  6. android socket io和服务器_Java socket通讯服务器和客户端教学版
  7. Amazon运营如何做?Amazon运营需做好全局的加减法
  8. js模板引擎_VueSSRNuxt.js
  9. ABAP代码检查的注意事项有哪些
  10. SAP中和计量单位有关的表