乐字节Java编程语言发展,面向对象和类
大家好,上次我们讲过了乐字节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编程语言发展,面向对象和类的更多相关文章
- 乐字节Java反射之三:方法、数组、类加载器和类的生命周期
本文承接上一篇:乐字节Java发射之二:实例化对象.接口与父类.修饰符和属性 继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. publ ...
- 乐字节Java|封装JavaBean、继承与权限修饰
本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ...
- 乐字节Java继承|方法重写、super和final关键字
大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...
- 乐字节Java|GC垃圾回收机制、package和import
本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...
- 乐字节Java反射之四:反射相关操作
大家好,乐字节小乐继续为Java初学者讲述Java基础知识.上次说到乐字节Java反射之三:方法.数组.类加载器,这次是Java反射之四:反射相关操作 1.操作属性 //1.获取Class对象 Cla ...
- 乐字节Java反射之二:实例化对象、接口与父类、修饰符和属性
大家好,小乐继续接着上集:乐字节Java反射之一:反射概念与获取反射源头Class 这次是之二:实例化对象.接口与父类.修饰符和属性 一:实例化对象 之前我们讲解过创建对象的方式,有new .克隆.反 ...
- 乐字节Java反射之一:反射概念与获取反射源头class
一.Java反射机制概念 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”,如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAVA有着一个非常突出 ...
- 乐字节Java变量与数据结构之二:Java常量与变量
大家好,小乐又来给大家讲述Java基础知识.上次说了乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符,这次将接着往下说,谈谈Java常量与变量. 1.常量 1).定义 在程序执行的过 ...
- 乐字节Java学习01-Java语言概述,Java发展前景,Java的特点
从这篇文章开始,小乐准备写一整系列的Java学习文章,一步一步带您进入Java的神奇世界! 这是第一篇:Java语言概述以及Java的发展前景 1.SUN公司介绍 SUN公司全称是Stanford U ...
随机推荐
- /etc/crontab
- 10月清北学堂培训 Day 1
今天是杨溢鑫老师的讲授~ T1 1 题意: n * m 的地图,有 4 种不同的地形(包括空地),6 种不同的指令,求从起点及初始的状态开始根据指令行动的结果. 2 思路:(虽然分了数据范围但是实际上 ...
- 1820:【00NOIP提高组】进制转换
#include<bits/stdc++.h>//十分简单(滑稽)的一道模拟题 using namespace std; ]={'A','B','C','D','E','F','G','H ...
- 函数第二部分:为什么说动态参数是没有计划好的参数-Python基础前传(11)
动态参数1-一个星号变元组 动态参数存在的意义? 函数的作者有时候也不知道这个函数到底需要多少个参数,这时候动态参数就有存在的意义了 动态参数创建-加* 底层原理是:把数值型或其他数据类型变成了元组类 ...
- Java 有状态和无状态对象的区别
无状态会话Bean 无状态就是对于一次操作,不能保存数据.无状态对象(Stateless Bean)是没有实例变量的对象,不能保存数据,是不变类,是线程安全的.例如: public class ...
- Hadoop namenode连接journalnode限制导致集群启动失败
错误1:刚搭建的新集群,启动journalnode以后,格式化namenode节点,出现如下错误 注意其中划红线的地方. 出现这个错误的原因是journalnode节点还没有准备好,而namenode ...
- ListView中的Item不能点击的解决方法
有时,为了实现某种功能,在Android程序中会考虑在ListView的每一个Item中添加一个Button(或ImageButton等). 但是,这样会出现一个问题: 当同时设置了Button的on ...
- Thingsboard学习之一CentOS安装系统更新
首先安装好系统,查询到系统的IP地址后,使用Putty登入系统 更新系统 yum update 安装git yum install git 动图演示
- 阿里云 -- Go module 代理 镜像
简介 go module公共代理仓库,代理并缓存go模块.你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建 地址 https://mirrors.aliyun.com/go ...
- Flume-Hbase-Sink针对不同版本flume与HBase的适配研究与经验总结
https://cloud.tencent.com/developer/article/1025430 Flume-Hbase-Sink针对不同版本flume与HBase的适配研究与经验总结 mike ...