大家好,上次我们讲过了乐字节Java编程之方法、调用、重载、递归,接下来我们将会进入到Java封装的内容。Java编程语言发展,面向对象和类。
机器语言——直接由计算机的指令组成,指令、数据、地址都以“0”和“1”组成:可以被计算机直接识别并执行。
汇编语言——用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。
高级语言——屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言剔除了结构化数据和语句,数据和过程抽象等概念。
面向对象的语言——与以往的各种语言的根本不同是,它的设计出发点就是为了更能直接地描述问题域中客观存在的事物。
语言的发展是朝着人类更容易理解的方向前进。
OOP(Object Oritented Programming)面向对象编程,属于编程的一种通用的思想。OOP使我们的开发变得不再那么复杂,并大大增加了程序的灵活性和扩展性。如果你尚未使用OOP思想来完善你的程序设计,那你真的OUT了。
代码世界中与现实生活中一样,社会需要分工,我们不必描述所有一切事物的制作过程,因为有时,我们只想要这个东西,并不关心它的过程。
我要吃鱼香肉丝盖饭
面向过程:我买菜、我洗菜、我切菜、我放水、我点火、我做饭、我炒菜。。。。
面向对象:找家饭馆,大吼一声“我要吃鱼香肉丝盖饭”
至于饭怎么来的我不管
所有的细节信息都封装在这个饭馆类的内部,我不需要关心里面到底有几道工序
面向过程就是知道一个很NB的人来完成一件事;面向对象就是指导一群人来完成一件很NB的事。
面向对象的基本思想是,从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。
面向对象更加强调运用人类中日常的思维逻辑中经常采用的思想方法与原则,如抽象、分离、继承、聚合、多态等。
对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和“方法(method)”。
3.1 类
类是用于描述同一类型的对象的一个抽象的概念,类中定义了这一类对象所具有的静态属性和动态属性。
类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
类,说白了就是归类,就是对同种事物进行抽象,抽出“像”的部分,包含有关事务(对象)动作方式的信息,包括它的名称、属性、方法及所在的场景或联系。
例子:
根据客户的需要,我们来制作一个蛋糕。首先要有一个制作蛋糕的菜谱(类),里面当然要有制作这个蛋糕需要什么原材料(成员属性),还要告诉我们如何去做(成员方法)。
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; } }
关联关系
继承关系
聚合关系(整体和部分)
实现关系
多态
对象是Java程序的核心,在Java程序中“万事万物皆对象”。
类是用来创建同一类型的“模板”,在一个类中定义了该类对象所具有的成员变量以及方法
JDK提供了很多类供编程人员使用,编程人员也可以定义自己的类。
成员变量=属性 方法=功能
//用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;}
成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)
定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量的作用范围为整个类体
Java语言中除基本类型之外的变量类型都称为引用类型
Java中的对象是通过引用对其操作的。
例如:
Dog dog;
dog = new Dog();
如何在内存中区分类和对象?
类是静态的概念,代码区
对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。
必须使用 new 关键字创建对象,new做三件事:
①会在堆中为相应类型分配空间
②会调用相应的构造方法来初始化对象
③将在堆中开辟的空间的地址返回回来
使用对象(引用).成员变量来引用对象的成员变量。
使用对象(引用).方法(参数列表)来调用对象的方法。
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。
乐字节原创,转载请注册出处。
接下来,小乐会继续讲述Java构造器,引用与内存分析,敬请关注 乐字节