2019.07.03(day05)
面向对象和类

为什么要学面向对象?
就是把现实世界的事和物转到计算机中,让计算机帮人们做事
(现实世界的对象转换为计算机中的类–>计算机中的类–>计算机内存中的对象)
对象可以存储不同类型的数据(比数组更进一步)
使用面向对象+设计模式+面向对象的设计原则就可以设计出很好的框架

如何掌握面向对象?

1.首先要掌握类

public class 类名{
	//最难的就是在类中写属性和方法
	//多个属性(代表数据)
	//多个方法(代表功能)
	//符合单一职责,此类值表达一件事
}


public class Student{
	int age;//学生的年龄
	String name;//学生的名字
	String num;//学生的学号
	public void study(){}//学生有学习的能力
	public void dajia(){}//学生有大家的能力	
}	

Student stu=new Student();
有类这种数据类型后,就可以通过这种数据类型在堆空间中申请空间
可以用类类型申请个无数个内存空间,且每个空间对应一个学生的信息

(1)什么是类:
类就是一个普通的名词
类可以做到数组做不到的东西,对数据管理的一种进步
类是一种特殊的由程序员自定义的数据类型
类是一种数据结构(逻辑)结构,组织多个数据类型的一种结构

现实世界的事和物
-->通过程序员抽象成类(属性和方法)
-->用类类型在堆内存中申请(new)内存空间,并存储数据	
-->从内存中取出对象的数据,根据需求处理数据
-->把处理后的结果显示在界面(控制台,网页,安卓app...)

(2)面向对象的难点:
程序员要考虑类中放置什么样的属性和方法
最难的事就是把现实世界的事和物转换到计算机中
就是把现实世界的事和物对应到计算机的"类"上
如果了解或理解了现实世界的事和物,做成java类就很容易

(3)类的特点:
封装:用类把数据和操作数据的方法封装在一起
继承:类和类之间是有继承关系,是为了让子类复用父类的属性或方法
多态:是面向对象的灵魂

(4)类和对象的内存机制:
类和对象在jvm被分为三个主要部分:
方法区:(由jvm控制)
存储的是类的定义
静态数据
常量池

堆区:
对象、数组申请的内存空间(new出来的空间)
堆空间储存的是数组元素,对象的数据,程序员可以通过栈来访问堆区

栈区:
八种基本数据类类型的数据
数组和对象在堆中的地址
弹栈之后,不能使用基本数据类型和对象类型

访问关系:
用对象名调用方法,事实上就是访问方法区的方法
在栈区取出堆区的地址或直接使用八种基本数据类型
从栈区取出堆的地址,就可以访问堆中的数据

(5)给对象存储数据的方法:(为了保证数据的安全性,把数据变为私有的)
1.用setter方式存储数据
2.用构造函数的方式存储数据

public void setName(){
	this.name=name;
}

(6)从对象获取数据的方法:
getter方式

public int setName(){
	return name;
}

java类为什么要实现序列化 java为什么要有类_java类为什么要实现序列化


综上所述:

程序员写的常规类有两种类模型

第一种:(适合存储数据)
a.类中只有私有属性,和公有的setter和getter
b.类中存在有参数的构造函数

第二种:(适合做功能,所需要的数据通过方法的参数传递进去)
此类只有方法,没有属性