Java——面向对象

Java——面向对象,第1张

Java——面向对象 面向对象 【Java语言的核心机制,最重要的内容,Java语言的特色】

=========================================================================

*面向过程和面向对象的区别(盖饭,蛋炒饭/耦合度,扩展力)

面向过程:主要关注点是:实现的具体过程,因果关系。【集成显卡开发思路】

      *优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低。 

*缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的方式导致元素之间的“耦合度”非常高,只要其中一环出问题,整个系统受到影响,导致最终的软件“扩展力”差。另外,由于没有独立体的概念,所以无法达到组件复用性的功能。

面向对象:主要关注点是:主要关注对象【独立体】能完成哪些功能。【独立显卡开发思路】

*优点:耦合度低,扩展力强。更容易解决现实世界当中更复杂的业务逻辑。组件复用性强。

*缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。

— —C语言是纯面向过程的、C++半面向对象、Java纯面向对象。

— —现在出现的编程语言多数都是面向对象的。人在认识现实世界的时候以面向对象的方式。

— —面向对象更符合人的思维方式。

*面向对象的三大特征【背会】

        —封装

        —继承

        —多态

所有面向对象的编程语言都有这三大特征。

采用面向对象的方式开发一个软件,生命周期当中:【整个生命周期中贯穿使用OO面向对象方式】

        *面向对象的分析:OOA

        *面向对象的设计:OOD

        *面向对象的编程:OOP

*类和对象的概念

|| 什么是类

        --首先类在现实世界当中是不存在的,是一个模板,一个概念,是人类大脑思考抽象的结果。

        --类代表了一类事物。

        -- 在现实世界当中,对象A与对象B之间具有共同特征,进行抽象总结出一个模板,这个模板被称为类。

|| 什么是对象

        --对象是实际存在的个体。

- - - 描述一下整个软件开发的过程 - - -

# 程序员先观察现实世界,从现实世界当中寻找对象

# 寻找了N多个对象之后,发现所有的对象都有共同特征

# 程序员在大脑中形成了一个模板【类】

# Java程序员可以通过代码来表述一个类

# Java程序中有了类的定义

# 然后通过类可以创建对象

# 有了对象之后,可以让对象之间协作起来形成一个系统
 

* 类 - -【实例化】- - > 对象
对象又被称为实例 / instance

*对象 - - 【抽象】- - > 类 

*重点:

类描述的是对象的共同特征。

共同特征例如:身高特征。这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个

                         特征。因为这个特征具体的某个对象上之后,值不同。有的对象身高180,有的

                         对象身高200。

*一个类主要描述什么信息呢?

        一个类主要描述的是 状态 + 动作  。

        状态信息例如: 名字、身高、性别、年龄……

        动作信息例如: 跳舞、打球、唱歌、吃……

状态 - - > 一个类的属性

动作- - > 一个类的方法      

*         类{

                属性;        //描述对象的状态信息

                方法;        //描述对象的动作信息

        }

       【注】:状态和动作当具体到某个对象上之后,发现最终的结果可能不一样。

                        对象和对象之间有共同特征,但也有数据上的差异。

*类的定义【从这里开始编写代码】

    语法结构:

        [修饰符列表] class 类名{
                属性;

                方法;

        } 

例: 学生类,描述所有学生对象的共同特征:
                学生对象有哪些状态信息:

学号int姓名String性别boolean年龄int……

(年龄是一个属性,是一个数据,是数据就应该有数据类型)

                学生对象有那些动作信息:

吃饭睡觉学习跳舞……

重点:属性通常是采用一个变量的形式来完成定义的。

//学生类  引用类型

public class Student {
	//属性【描述对象的状态信息】
	//属性通常采用变量的方式定义
	//在类体当中,方法体之外定义的变量被称为“ 成员变量 ”
	//成员变量没有赋值,系统赋默认值:一切向0看齐。
	
	//学号
	int num;    //String num; 也可以
	//姓名
	String name;
	//性别
	boolean sex;
	//年龄
	int age;
	//住址
	String address;
	
	//方法
	//方法描述的是对象的动作信息
	//当前例子就只描述属性了,不描述方法。
}

Java语言中包括两种数据类型:

— 基本数据类型:byte short int long float double boolean char

— 引用数据类型 : String.class System.class【前两个SUN提供的】 Student.class User,class ……(程序员自定义的)

        int age = 10;

        String username = "Zhang San";

        Student s = ???;

Java语言中所有的class都属于引用数据类型。


对象的创建和使用

=========================================================================

*对象的创建和使用——内存分析

/ / 通过一个类可以实例化N个对象
/ / 实例化对象的语法:

new 类名();

 new 运算符的作用是创建对象,在JVM堆内存当中开辟新的内存空间

方法区内存:在类加载的时候,class字节码代码片段被加载到到该内存空间当中。

栈内存空间(局部变量): 方法代码片段执行时,会给该方法分配内存空间,在栈内存中压栈。

堆内存空间:  new的对象在堆内存中存储。

例: new student();

成员变量没有手动赋值的话,系统赋默 :

数据类型默认值byte, short, int, long0float,double0.0booleanfalsecharu000引用数据类型null

*什么是对象:new运算符在堆内存中开辟的内存空间称为对象

*什么是引用:引用是一个变量,并且保存了另一个Java对象的内存地址

【注】:Java中程序员不能直接 *** 作堆内存,Java中没有指针,不像C语言,只能通过“ 引用 ”去访问堆内存当中对象内部的实例变量。 

访问实例变量的语法格式是

读取数据:引用.变量名

修改数据:引用.变量名 = 值;

public class OOTest01 {
	public static void main(String[] args) {
		
		//int是基本数据类型,i是变量名,10是一个int类型的字面值
		int i = 10;
		
		//Student是一个自定义的引用数据类型,s是变量名,new Student()是一个学生对象
		//s;是一个局部变量【在栈内存中存储】
		Student s = new Student();
		
		//访问实例变量的语法格式是
		//读取数据:引用.变量名
		//修改数据:引用.变量名 = 值;
		
		int stuNum = s.num;
		String stuName = s.name;
		int stuAge = s.age;
		boolean stuSex = s.sex;
		String stuAddr = s.addr;
		
        //输出系统初始赋值
		System.out.println("学号 = " + stuNum);//0
		System.out.println("姓名 = " + stuName);//null
		System.out.println("性别 = " + stuSex);//false
		System.out.println("年龄 = " + stuAge);//0
		System.out.println("地址 = " + stuAddr);//null

	}
}

当然也可以这样访问(这种方式较多使用) :

public class OOTest01 {
	public static void main(String[] args) {

		Student s = new Student();

        //赋值:
		s.num = 8;
		s.name = "叶子森";
		s.age = 19;
		s.sex = true;
		s.addr = "河南郑州";
		
		System.out.println("学号 = " + s.num);
		System.out.println("姓名 = " + s.name);
		System.out.println("性别 = " + s.sex);
		System.out.println("年龄 = " + s.age);
		System.out.println("地址 = " + s.addr);
	}
}

作图理解:

=========================================================================

  *类的嵌套使用(内部相互引用)

用户类:

//用户类
public class User {
	//属性【以下都是成员变量之实例变量】
	
	//用户编号
	int num;
	//用户名
	String name;
	
	//家庭住址
	Address addr;

}

 地址类:

//地址类
public class Address {
	
	//城市
	String city;

	//街道
	String street;
	
	//邮编
	String zipcode;
	
}

测试类: 

//测试类
public class OOTest02 {
	public static void main(String[] args) {
		
		//创建User对象
		User u = new User();
		
		u.num = 14;
		u.name = "Bergling";
		u.addr = new Address();
		u.addr.city = "瑞典斯德哥尔摩";
		u.addr.street = "斯科斯基街道";
		u.addr.zipcode = "198998";
		
		System.out.println(u.name + " 居住在: " + u.addr.city);
		System.out.println(u.name + " 居住街道: " + u.addr.street);
		System.out.println(u.name + " 邮编号码: " + u.addr.zipcode);
	}
}

其中所写格式也可如此编写

        User u = new User();
		//上个版本所写:
		//u.addr = new Address();
		
		Address a = new Address();
		u.addr = a;

=========================================================================

***对此关于JVM的内存管理:

=========================================================================

*对象的创建与使用——空指针异常

//顾客类
public class Customer{
    int id;
}

 测试程序:

public class OOTest04{
    public static void main(String[] args){
        
        Customer c = new Customer();
        System.out.println(c.id);    //0

        c = null;
      //System.out.println(c.id);
      //运行报错,空指针异常
    }
}

空引用访问 “ 实例 ” 相关的数据一定会出现空指针异常

运行报错:java.lang.NullPointerException

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5707577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存