Java入门(九)——OO(面对对象)

Java入门(九)——OO(面对对象)

目录

Java入门(九)——OO(面对对象)

面向对象(OO)

面向过程与面向对象的区别

面对对象的三大特征

 生命周期

类与对象

 开发过程

类的定义

范例代码


面向对象(OO)

面向过程与面向对象的区别

           * 面向过程:
                - 实现具体过程,因果关系
                - 优点:业务逻辑比较简单的程序可以快速开发,前期投入成本较低
                - 缺点:难以解决复杂的业务逻辑,元素之间“耦合度”(对象之间的依赖性)非常高,扩展力差,难以独立,无法达到组件复合。
           * 面向对象:
                - 主要关注对象【独立体】能完成哪些功能,更符合人的思维方式
                - 优点:耦合度低,扩展能力强,容易解决复杂业务,组件复用性强
                - 缺点:前期投入成本高,需要进行独立体的抽取,大量的系统分析与设计
      - C语言纯面向过程、C++半面向对象、Java纯面向对象


面对对象的三大特征

           - 封装
           - 继承
           - 多态


 生命周期

           - 面向对象的分析:OOA
           - 面向对象的设计:OOD
           - 面向对象的编程:OOP

类与对象

      - 类:模板、概念,大脑抽象的结果。代表一类事物。对共同特征进行总结。
      - 对象:实际存在的个体。目前在使用new运算符在堆内存中开辟内存空间。
      - 引用:是一个变量,不一定是局部变量,还可能是成员变量。引用保存了内存地址,指向堆内存当中的对象。

 开发过程

           - 观察现实世界,寻找对象
           - 寻找共同特征
           - 形成一个模板(类)
           - java表达类
           - 类的定义
           - 创建对象
           - 对象协作形成系统

类的定义

           - 语法结构:
                [修饰符列表] class 类名 {
                    属性;//描述对象的状态信息
                    方法;//描述对象的动作信息
                }
           - 当状态和动作具体到某一个对象之后,可能存在数据差异
         
 - 所有访问实例相关的数据,都需要通过“引用.”的方式访问,因为只有通过引用才能找到对象
- 只有一个空的引用,访问对象的实例相关的数据会出现空指针异常

范例代码

//定义一个公开的类
//Student是一个类,代表所有的学生
//访问类中的属性或方法,需要建立对象进行访问
class Student {
	
	//属性通常采用变量的方式来定义
	
	//状态【属性】
	//不创建对象,变量的内存空间是不存在的
	int no;//学号
	String name;//姓名
	boolean sex;//性别
	int age;//年龄
	String address;//地址
	
	//动作【方法】
	public static void a() {
		System.out.println("永远18岁!!!");
	}
}


public class OO {
	
public static void main(String[] args) {
		
		int i =10;//局部变量
		
		//通过一个类可以实例化N个对象
		//实例化对象语法:new 类名();
		//new运算符作用是创建对象,在JVM堆内存当中开辟新的内存空间
		
		/*
		 * 方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间中
		 * 栈内存(局部变量):方法代码片段执行的时候,会给方法分配内存空间,在栈内存中压栈
		 * 堆内存:new的对象在堆内存中储存
		 */
		
		Student s = new Student();
		//Student是一个引用类型
		//new Student() 是一个学生变量
		//Student s 是一个局部变量
		
		/*
		 * 访问实际变量的语法格式:
		      读取数据:引用.变量名
		      修改数据:引用.变量名 = 值
		 */
		int stuNo=s.no;
		String stuName=s.name;
		int stuAge=s.age;
		boolean stuSex=s.sex;
		String stuAddress=s.address;
		
		System.out.println("学号(未赋值):"+stuNo);
		System.out.println("名字(未赋值):"+s.name);
		
		System.out.println("------------------------------");
		
		stuNo=29;
		stuName="PDD";
		stuAge=18;
		stuSex=true;
		stuAddress="福建";
		
		System.out.println("学号:"+stuNo);
		System.out.println("姓名:"+stuName);
		System.out.println("年龄:"+stuAge);
		System.out.println("性别:"+stuSex);
		System.out.println("地址:"+stuAddress);
		
		Student.a();//方法调用
	}
		
	}

/*
 - 局部变量在栈内存中储存
 - 成员变量中实例变量在堆内存的java对象内存内部存储
 
 */

//分析图见笔记中 JVM内存结构.jpg

猜你喜欢

转载自blog.csdn.net/qq_61562251/article/details/135046239