在这里先给大家介绍一些名词
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
面向对象的三大特征:
a.封装性:所谓封装就是把客观事物封装成抽象的类,并且类可以让自己的数据和方法只让可信的类或对象操作,对不可信的进行隐藏。换句话说就是:内部操作外部而言不可见
b.继承性:可以使用现有类的所有功能,并且在无需重新编写原有代码的前提下对这些功能进行扩展
c.多态性(**):多态就是指一个类实例的相同方法在不同情形下有不同的表现形式,多态机制可以使得具有不同内部结构的对象可以共享相同的外部接口
面向对象最大的特征:能进行现实生活的抽象
1、类与对象
类与对象的概念:
类是一个共性的概念,而对象时一个具体的、可以使用的事物
首先产生类,类是产生对象的蓝图,而后才可以产生对象,对象的所有行为一定在类中进行了完整定义
类的组成:
1.方法(对象操作的行为)
2.属性(变量,描述了每个对象的具体特点)
类与对象的定义和使用
类的定义语法:
class 类名称{
属性1;
属性2;
属性...
方法1(){}
方法2(){}
方法...(){}
}
类中的方法不能由主方法直接调用,而是需要由对象调用
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
有了类就可以产生对象
类名称 对象名称 = new 类名称();
Person per = new Person("张三",23);
有了对象就可以调用实例变量和实例方法
System.out.println(per.name);//变量必须是public修饰,private修饰的变量不能被调用
System.out.println(per.getInfo());
完整代码:
class Person{
public String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo(){
return "姓名:"+this.name+",年龄:"+this.age;
}
}
public class Test {
public static void main(String[] args) throws Exception {
Person per = new Person("张三",23);
System.out.println(per.name);
System.out.println(per.getInfo());
}
}
2、对象内存分析
栈内存:虚拟机局部变量表,存放局部变量(保存基本数据类型、对象引用-堆内存地址(对象名称))
堆内存:保存真正的数据,对象的属性信息
Person per = new Person();
只要出现了new关键字,就会在堆上分配内存并且产生Person类的对象per引用这部分内存per.name = "张三";
per.age = 23;
通过per的引用设置对象的属性值,没有设置之前堆内存中的属性值为默认值,即name=null,age=0
对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时错误)编译过程不会报错
引用传递分析:
引用传递的本质:一块堆内存空间可以被多个栈内存所指向
Person per1 = new Person();//new表示在堆上分配内存空间
Person per2 = new Person();
per1 = per2;//将per2所指向的堆内存地址赋值给per1,per1与per2指向同一块堆内存空间
那么之前per1所指向的堆空间就变为垃圾空间
垃圾空间:没有任何栈内存指向的堆内存空间