一、面向对象简述
面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。
但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式且更符合人类思考问题的方式.
在面向对象定义之中,也规定了一些基本的特征:
(1)封装:保护内部的操作不被破坏;
(2)继承:在原本的基础之上继续进行扩充;
(3)多态:在一个指定的范围之内进行概念的转换。
对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。
二.类和对象的基本概念
类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:是类的一个实例,不同的对象之间千差万别,主要是属性值不同
三.类与对象的定义和使用
类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:
格式一:
格式二:
引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。new出来的都在堆上开辟空间.
如何根据对象来调用属性和方法呐?我们通过访问修饰符.来操作,我们通过具体的代码来演示一下
public class Test1{
public static void main(String[] args) {
Person person = new Person();
person.age = 10;
person.name = "张三";
person.eat();
person.show();
}
}
class Person{
int age;
String name;
public void eat(){
System.out.println("吃饭");
}
public void show(){
System.out.println("我叫" + name + ",年龄" + age);
}
}
那么,问题来了,以上两种不同的实例化方式有什么区别呢?
我们从内存的角度分析。首先,给出两种内存空间的概念:
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间;
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
以上就是俩种对象实例的不同
static:与对象无关!!!直接通过类名称调用,在jvm方法区中保存该类属性,该类的所有对象共享该属性,直接通过类名称调用