大家好,上次我们讲过了乐字节Java编程之方法、调用、重载、递归,接下来我们将会进入到Java封装的内容。Java编程语言发展,面向对象和类。

一、编程语言的发展

机器语言——直接由计算机的指令组成,指令、数据、地址都以“0”和“1”组成:可以被计算机直接识别并执行。

汇编语言——用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。

高级语言——屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言剔除了结构化数据和语句,数据和过程抽象等概念。

面向对象的语言——与以往的各种语言的根本不同是,它的设计出发点就是为了更能直接地描述问题域中客观存在的事物。

语言的发展是朝着人类更容易理解的方向前进。

OOP(Object Oritented Programming)面向对象编程,属于编程的一种通用的思想。OOP使我们的开发变得不再那么复杂,并大大增加了程序的灵活性和扩展性。如果你尚未使用OOP思想来完善你的程序设计,那你真的OUT了。

代码世界中与现实生活中一样,社会需要分工,我们不必描述所有一切事物的制作过程,因为有时,我们只想要这个东西,并不关心它的过程。

二、面向对象概述

⑴面向过程的设计思想和面向对象的设计思想

我要吃鱼香肉丝盖饭

面向过程:我买菜、我洗菜、我切菜、我放水、我点火、我做饭、我炒菜。。。。

面向对象:找家饭馆,大吼一声“我要吃鱼香肉丝盖饭”

至于饭怎么来的我不管

所有的细节信息都封装在这个饭馆类的内部,我不需要关心里面到底有几道工序

面向过程就是知道一个很NB的人来完成一件事;面向对象就是指导一群人来完成一件很NB的事。

⑵面向对象的设计思想

面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。

面向对象更加强调运用人类中日常的思维逻辑中经常采用的思想方法与原则,如抽象、分离、继承、聚合、多态等。

三、对象和类的概念

对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”。

3.1 类

类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所具有的静态属性和动态属性。

类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

类,说白了就是归类,就是对同种事物进行抽象,抽出“像”的部分,包含有关事务(对象)动作方式的信息,包括它的名称、属性、方法及所在的场景或联系。

例子:

根据客户的需要,我们来制作一个蛋糕。首先要有一个制作蛋糕的菜谱(类),里面当然要有制作这个蛋糕需要什么原材料(成员属性),还要告诉我们如何去做(成员方法)。

3.2 符合Java的类

  1. public class Cake{
  2. public String shape; // 蛋糕的形状
  3. public int cream; //奶油的量
  4. public int eggs; //鸡蛋的量
  5. public int water; //水的量
  6. public int bakeTime; // 烤制时间
  7. public String others; // 其他配料
  8. // 制作
  9. public void makeCake(){
  10. System.out.println(“放入” + cream + “的奶油,加入” + eggs+ “鸡蛋…”);
  11. }
  12. }

由此可见:类就是模板,同时是复杂的数据类型

有了上述蛋糕类,还没有拥有一个实实在在的蛋糕(对象),只有当我们照着菜谱上写的,把原材料准备齐全,照着一步一步去做,方可得到这个蛋糕(对象的实例化)

现在我们的高级面点师来了,他知道如何去做:只要有菜谱和材料

  1. class Baker{
  2. String name; // 名字
  3. public Cake makeCake(){
  4. Cake cake = new Cake();
  5. cake.shape = “麻将型”;
  6. cake.cream = 50;
  7. cake.water = 500;
  8. cake.eggs = 5;
  9. cake.bakeTime = 5;
  10. cake.others = “黄油、糖、水果、颜料”;
  11. return cake;
  12. }
  13. }

3.3 类(对象)之间的关系

关联关系

继承关系

聚合关系(整体和部分)

实现关系

多态

四、Java与面向对象

对象是Java程序的核心,在Java程序中“万事万物皆对象”。

类是用来创建同一类型的“模板”,在一个类中定义了该类对象所具有的成员变量以及方法

JDK提供了很多类供编程人员使用,编程人员也可以定义自己的类。

成员变量=属性 方法=功能

4.1 Java类的定义

  1. //用class关键字定义一个类,例如
  2. class Person{
  3. // 成员变量
  4. int id;
  5. int age = 20;
  6. // 方法定义
  7. int getAge(){return age;}
  8. void setAge(int i){age = I;}
  9. }

类的定义主要有两方面组成——成员变量和方法

声明成员变量的格式为:

[<modifiers>] type <attr_name>[=defaultValue];

例如: int id; private int age = 20;

声明方法的格式为;

[<modifiers>] <return_type> <name> ([<argu_list>]){

[<statements>]

}

例如:public int getAge(){ return age;}

4.2 成员变量

成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)

定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

成员变量的作用范围为整个类体

4.3 Java面向对象基本概念

Java语言中除基本类型之外的变量类型都称为引用类型

Java中的对象是通过引用对其操作的。

例如:

Dog dog;

dog = new Dog();

如何在内存中区分类和对象?

类是静态的概念,代码区

对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。

4.4 对象的创建和使用

必须使用 new 关键字创建对象,new做三件事:

①会在堆中为相应类型分配空间

②会调用相应的构造方法来初始化对象

③将在堆中开辟的空间的地址返回回来

使用对象(引用).成员变量来引用对象的成员变量。

使用对象(引用).方法(参数列表)来调用对象的方法。

同一类的每个对象有不同的成员变量存储空间。

同一类的每个对象共享该类的方法。

乐字节原创,转载请注册出处。

接下来,小乐会继续讲述Java构造器,引用与内存分析,敬请关注 乐字节

乐字节Java编程语言发展,面向对象和类的更多相关文章

  1. 乐字节Java反射之三:方法、数组、类加载器和类的生命周期

    本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. publ ...

  2. 乐字节Java|封装JavaBean、继承与权限修饰

    本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ...

  3. 乐字节Java继承|方法重写、super和final关键字

    大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...

  4. 乐字节Java|GC垃圾回收机制、package和import

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

  5. 乐字节Java反射之四:反射相关操作

    大家好,乐字节小乐继续为Java初学者讲述Java基础知识.上次说到乐字节Java反射之三:方法.数组.类加载器,这次是Java反射之四:反射相关操作 1.操作属性 //1.获取Class对象 Cla ...

  6. 乐字节Java反射之二:实例化对象、接口与父类、修饰符和属性

    大家好,小乐继续接着上集:乐字节Java反射之一:反射概念与获取反射源头Class 这次是之二:实例化对象.接口与父类.修饰符和属性 一:实例化对象 之前我们讲解过创建对象的方式,有new .克隆.反 ...

  7. 乐字节Java反射之一:反射概念与获取反射源头class

    一.Java反射机制概念 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”,如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAVA有着一个非常突出 ...

  8. 乐字节Java变量与数据结构之二:Java常量与变量

    大家好,小乐又来给大家讲述Java基础知识.上次说了乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符,这次将接着往下说,谈谈Java常量与变量. 1.常量 1).定义 在程序执行的过 ...

  9. 乐字节Java学习01-Java语言概述,Java发展前景,Java的特点

    从这篇文章开始,小乐准备写一整系列的Java学习文章,一步一步带您进入Java的神奇世界! 这是第一篇:Java语言概述以及Java的发展前景 1.SUN公司介绍 SUN公司全称是Stanford U ...

随机推荐

  1. [TJOI2013]奖学金 乱搞

    [TJOI2013]奖学金 乱搞 从\(c\)个二元组\((v,w)\)中选出\(n\)个,使其\(v\)的中位数最大的同时使\(w\)和小于等于\(f\),求这个中位数 有点意思.有点像二分答案的思 ...

  2. 分治FFT学习笔记

    用途 在\(O(n\log^2 n)\)的时间内做诸如 \[ f_n=\sum_{i=0}^{n-1} f_ig_{n-i} \] 或是 \[ f_n=\sum_{i=0}^{n-1} f_if_{n ...

  3. 下载安装tomcat 部署本地项目

    原文地址:https://blog.csdn.net/weixin_40396459/article/details/81706543 下载地址:http://tomcat.apache.org 点击 ...

  4. docker部署vue前端

    1.下载安装nginx image docker pull nginx:latest 2.准备将编译后的代码上传到主机上 3.编写dockerfile, nginx conf,并创建镜像 Docker ...

  5. local模式运行spark-shell时报错 java.lang.IllegalArgumentException: Error while instantiating 'org.apache.spark.sql.hive.HiveSessionState':

    先前在local模式下,什么都不做修改直接运行./spark-shell 运行什么问题都没有,然后配置过在HADOOP yarn上运行,之后再在local模式下运行出现以下错误: java.lang. ...

  6. SqlServer 获取 当前地址下 所有数据库字段信息 / 快速 批量插入数据库(TVPs)

    SQL执行 --拼装 当前地址下 所有数据库字段信息 BEGIN DECLARE @dataBaseName NVARCHAR(MAX)--数据库名称 DECLARE @tableName NVARC ...

  7. RK3399 4G模块移远EC20移植调试

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/11266330.html CPU:RK3399 系统:Android 7.1 1.通过串口打印或者adb获取 ...

  8. php手记之05-tp5软删除

    01-需要在设置软删除的模型里设置

  9. 每天一个linux命令:top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...

  10. mac kafka 环境搭建 以及PHP的kafka扩展

    1.kafka安装 brew install kafka 安装会依赖zookeeper. 注意:安装目录:/usr/local/Cellar/kafka/0.10.2.0 2.安装的配置文件位置 /u ...