面向对象
母胎solo怎么办? 那就自己new一个对象
在Java武侠界中,流传着这么一句话:万事万物皆对象
注意区分:
所谓面向对象,就是,以类/对象来作为最小单位,考虑的是谁来做
所谓面向过程,就是,强调功能行为,考虑怎么做
还是举一个 最 常见的 例子 :把大象装进冰箱
我也不知道大象会不会反抗,也不知道抬不抬得动,更别说冰箱能塞进一头大象了
这里其实也可以说明,大到宇宙,小到原子,在码界中都只是一个对象 ,可能觉得很抽象,别急!!我们一步一步来看
我们先用面向过程的思维来看:
把打开冰箱
把大象塞进去
把冰箱门关上
接下来来看看 面向对象 是怎么 操作的
以类/对象 作为最小单位,先找到主体:人 冰箱 大象
人{
打开(冰箱){
冰箱.打开功能();
}
抬(大象){
大象.进入(冰箱);
}
关闭(冰箱){
冰箱.关闭功能();
}
}
冰箱{
打开功能(){
}
关闭功能 (){
}
}
大象{
进入(){
}
}
解析: 首先三个主体,创建三个类,人这个类里面有三个方法,打开冰箱,把大象抬起来,把冰箱关上,打开冰箱,主体是冰箱,冰箱有打开功能,所以去调用冰箱这个类的打开功能,抬起大象,去调用大象这个主体里面的进入冰箱功能,最后关上冰箱,还是冰箱才有关闭功能,所以去调用冰箱的方法
这就是采用面向对象的思维去处理问题 ,强调具备功能的对象
这里有一个 类 跟 对象 的 概念
类: 是一个抽象的概念,表示的是有一个共性的东西,类中定义属性跟方法
对象: 一个独立的个体,每个对象有自己独特的属性
举个例子:
汽车是一个类,宝马,奥迪,大众 这些都是这个类的对象
对象又有一些自己的属性跟行为,比如 宝马 有自己的属性:品牌,颜色,名字,有自己的行为:跑
又比如动物是一个类,这里就不细分什么食草动物,食肉动物,什么什么科了
别杠,杠就是你对 图片图片图片
这个类中有狗,猫等这些对象, 狗这个对象有自己的属性:颜色,品种 有自己的行为:叫,摇尾巴,吃,睡觉等等
类和对象的创建
直接来个例子: 写一个person类,这个类有自己的属性跟方法
class Person {
//属性
String name = "zhangsan"; // 姓名
int age; // 年龄 若想要有初始值 int age =18;
ing sex //性别,1 男 0 女
// 方法,行为
public void eat(){
System.out.println("人会吃饭")
}
public void speak(){
System.out.println("人会说话")
}
public void sleep(){
System.out.println("人会睡觉")
}
}
上述是一个类,类创造出来了,接下来就要创建对象去使用,在java中创建对象很简单,直接new 就好了,new 出来的对象,获取当中方法,属性,直接类名调用,类名.属性名,类名.方法名
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
person.eat();
person.sleep();
person.speak();
}
我们也可以对类中的属性进行赋值
Person person = new Person();
person.name="lisi";
person.age=18;
person.sex=1;
System.out.println(person.name);
System.out.println(person.age);
System.out.println(person.sex);
输出结果
到这里,相信对 类 跟 对象 有了 一定的认识,再回过头来看大象放进冰箱这个例子,是不是对面向对象有更深层的认识
扩展
来看一看对象创建的内存解析:
首先来看虚拟机
具体JVM虚拟机运作,优化方面,在后续架构处理会专门来讲解,这边就不过多赘述啦,主要来看栈,堆,还有方法区,这是我们今天的主角
栈:指的是虚拟机栈,主要用于存储局部变量,在局部变量表中存放了各种基本数据类型,对象引用类型等等,方法执行完,会自动释放
堆:这个区域主要存放对象,可以说对象就是在堆内存中创建(后续的优化也主要是对堆进行优化)
方法区:用于存储被虚拟机加载的类信息,常量静态常量,以及编译后的代码
就拿我们创建的person类来举例:
写在最后:
以上就是本期的全内容了~