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

一、编程语言的发展

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

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

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

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

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

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

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

二、面向对象概述

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

我要吃鱼香肉丝盖饭

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

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

至于饭怎么来的我不管

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

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

⑵面向对象的设计思想

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

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

三、对象和类的概念

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

3.1 类

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

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

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

例子:

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

3.2 符合Java的类

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

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

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

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

class Baker{
String name; // 名字
public Cake makeCake(){
Cake cake = new Cake();
cake.shape = “麻将型”;
cake.cream = 50;
cake.water = 500;
cake.eggs = 5;
cake.bakeTime = 5;
cake.others = “黄油、糖、水果、颜料”;
return cake;
}
}

3.3 类(对象)之间的关系

关联关系

继承关系

聚合关系(整体和部分)

实现关系

多态

四、Java与面向对象

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

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

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

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

4.1 Java类的定义

//用class关键字定义一个类,例如
class Person{
// 成员变量
int id;
int age = 20;
// 方法定义
int getAge(){return age;}
void setAge(int i){age = I;}
}

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

声明成员变量的格式为:

[<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. hdu 6183

    给出二维平面$opt1.$ 对点 $(x, y)$ 增减颜色 $c$,$opt2.$ 询问矩形 $(1, y_1), (x, y_2)$ 内出现过的颜色种数$x, y <= 1e6, c < ...

  2. [TJOI2013]松鼠聚会 曼哈顿距离

    [TJOI2013]松鼠聚会 luogu P3964 首先容易得到两点间距离是\(max(|x_1-x_2|, |y_1-y_2|)\)(即切比雪夫距离) 然后有个套路:原\((x,y)\)求曼哈顿距 ...

  3. Lua 常用函数 一

    lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数.如果 ud 不是 NULL ,Lua ...

  4. Python里面如何实现tuple和list的转换?

    #list to tuple lis=[,,,,,] x=tuple(lis) print(type(x),x) #tuple to list tup=(,,,,,) y=list(tup) prin ...

  5. [WEB安全]Weblogic漏洞总结

    0x01 Weblogic简介 1.1 叙述 Weblogic是美国Oracle公司出品的一个应用服务器(application server),确切的说是一个基于Java EE架构的中间件,是用于开 ...

  6. excel被保护或者锁定时候按住alt和enter可以输入换行

    excel被保护或者锁定时候按住alt和enter可以输入换行

  7. openfoam变热物性参数的设置【转载】

    转载自:http://blog.sina.com.cn/s/blog_9de422500102va73.html 物性参数在constant/thermophysicalProperties文件中设置 ...

  8. Arts打卡第9周

    Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...

  9. linux使用nslookup查询dns

    nslookup命令主要用于查询DNS信息 nslookup工具的安装以及使用使用yum install bind-utils安装即可 交互模式与非交互模式直接运行nslookup即可进入交互模式,连 ...

  10. Ubuntu下GDB调试器的使用

    gdb调试器时一款GNU组织开发.发布的UNIX/Linux环境下的程序调试工具,没有图形界面,但功能强大. GDB使用流程: 先编写一个测试文件gdbTest.c 保存后用gcc对文件进行编译,需要 ...