面向对象编程(OOP)


面向过程是一个线性的思维方法,按顺序解决问题。

而面向对象是分类的思维模式,把打的问题分成几个类,然后再用面向过程的思想对这些分类进行单独思考。适用于处理复杂问题及需要多人处理的问题。
总结:


面向对象编程(Object-Oriented Programming ,OOP)
本质:以类的形式组织代码,以对象的形式封装数据。
抽象:把共同点抽取出来。例如学生对象,可以抽取其学号等来表示。

类是对象的抽象,在编程时先要写类,然后再在main函数中进行类的调用(用new来新建一个对象)



带异常的方法:

return 和 break的区别:
![]()
方法的调用:

静态方法:方法中带有static ,在其他类中调用时可以直接用 类名.方法名 进行调用。


非静态方法:方法中不带有static ,在其他类中调用时要用new方法实体化这个类(即创建一个对象)


在静态方法中调用非静态方法出现异常是因为:静态方法和类一起加载(比较早),而非静态方法在实例化之后才存在(较晚)。

方法中的参数为形式参数,而实例化对象后的调用时的参数为实际参数
![]()
值传递和引用传递:
什么是局部变量、全局变量、静态变量 ???
全局:具有文件作用域的变量
静态:具有静态存储期或内部链接属性
局部:具有函数或块作用域的变量
基本数据类型和局部变量存放在栈中,用完就消失。

静态变量放在方法区;实例(成员)变量放在堆中;局部变量(参数)放在栈中。
值传递:java为值传递
解析:方法change中的a为形式参数,而main函数中的a是实际参数。
形参改变不能带给实参(因为这两个a是两个不同的东西,形参a为局部变量,出了change方法会在栈中被清除,不能带出给实参) 要注意的是,方法中return a是返回了a的值 ——>10,而不是返
回了形参a。只有拿实参a去接收方法返回的值,才能改变实参a的值。
结果:

引用传递:实例指向对象,但是本质还是值传递
在demo2类中写了一个change方法,参数是一个Person类的对象,修改该对象的name属性为"tzy"。 对象用的是引用传递,main方法中a为引用变量名,其指向的是a在堆中的地址。调用change方法时改变的是a在堆中的name属性,堆中的改变在出了方法时不会被清除,所以name改变了。

创建对象时的内存分析:
方法区属于堆,里面存了各个类(引用的模板)和静态方法区以及静态变量,在加载时是最先加载的(所以类和静态方法可以被其他对象调用)。栈里面存放的是方法和引用变量名(栈中的引用变量名 指向的是堆中实例的地址)。当new了一个实例时,会从方法区引用类,然后在对象中创建一个实例,栈中的引用变量名 引用的是堆里面的实例。

类和对象的创建:

类的创建:
一个类里面会包含属性(字段)和方法
PS:因为类是抽象的,在创建类的时候,属性不能够在类的创建时赋值(但是类在创建一个对象时会进行默认初始化和对构造器的调用 例如String类型默认为null,int类型默认为0)。而对象是类的一个实体,在类实例化后产生一个具体事例后,可以对事例进行赋值。
this.name的中this指的是类被实例化后,当前的实例。

对象的创建:

类是用来组织代码的!而每个具体的对象是对数据的封装!
构造器:

作用:
1.用于初始化值(在实例化的时候 给属性附一个初始值)
2.使用new关键字的时候,本质是在调用构造器
特点:
1.必须和类名相同
2.不能反回值
PS:1.一旦定义了有参构造,无参就必须显示定义
2. this.xxx后面xxx的内容为类中的,而不是形参
一个空的类中,什么都不写,他也会有一个方法。
如下Person类中,会隐式定义一个Person()方法

但是一旦定义了有参构造,无参就必须显示定义

类与对象总结:

除了基本类型(8个),其他的都算引用类型。 对象是通过引用来操作的:栈--->堆(栈中的引用变量指向的是对象的地址)


本文详细解读了面向对象编程(OOP)的核心理念,包括类与对象的创建、抽象与封装、构造器的作用,以及值传递与引用传递的区别。通过实例演示,讲解了静态方法、实例方法和参数传递。深入探讨了类、对象内存分配与调用机制,适合理解OO设计的开发者阅读。
373

被折叠的 条评论
为什么被折叠?



