15.面向对象编程(一种思想)

面向对象和面向过程的思想对比:

面向过程:自己一步一步进行编程,以  过程  为中心

面向对象:通过指挥对象实现具体的功能,以  对象  为中心

面向对象是基于面向过程演变而来的,因为对象自己必须一步一步编写执行过程

面向对象小结:

1.客观存在的任何事物,都可以看为程序对象(任何事物都是一步步演变的)

2.使用面向对象可将复杂的问题简单化(调用对象即可)

3.从执行者的位置,变成指挥者

类:

含义:类是对现实生活中一类具有崆峒属性和行为的抽象、描述

类的组成:

1.属性:该事物的各种特征。例:姓名、年龄。。。 (成员变量)

2.行为:该事物存在的功能(能够做的事情)(成员方法,写法和之前方法一样,只不过去掉了staitc关键字 )

对象:

含义:是能够看得到摸得着的真实存在的实体

类和对象的关系:

类是对象的描述,

对象是类的具体

为什么不把psvm直接写到Student类里?

因为Student类里的描述无需psvm

例:

public class Student{

成员变量;

(String name = "张三";int age  =  16; 不能赋值,如果赋值就变成具体的类了,而且每次创建都是同一个对象张三,无法灵活运用?????)(成员变量在具体应用中有什么作用???)-------应该是这样问:为什么成员变量要private不让外类访问,主要目的是限制成员变量只能在本类中进行条件限制,成员变量是个容器,用来装数据的,最后用带参构造封装到一个地址中

成员方法;(成员变量和成员方法都是对Student这个类的描述)

}

Student这一整个类,只是对具体事物的抽象化,不是具体存在的事物,可以类比成设计图

public class TestStudent{

psvm{

创建对象;

调用方法;

}

}

没有主方法(psvm),程序是无法运行的,且主方法不是Student的描述内容。

创建对象:

格式:类名  对象名  =   new  类名();

例:Student a = new  Student();

sout(a) = com.it.object.Student@bc213s2

全类名:包名+类名

@:分隔符

bc213s2:16进制地址值

使用对象:

1.使用成员变量

格式:对象名.成员变量名

a.name;

2.使用成员方法

格式:对象名.成员方法名

a.study();

main方法正常被方法区和栈内存调用,当检测到Student s  = 时 (还没new对象之前),方法区会将Student类加载进入方法区,方法区产生了main.class和Student.class 两个字节码文件,

方法区:Student.class文件

String name
int age

study()

当Student s = new Student()时,new了一个对象。在堆内存产生001地址值,001地址值这个空间会分为两个部分  成员变量  和  成员方法,默认成员变量的值为默认初始值,而成员方法则记录的是指向  “方法区:Student.class文件的study()”  的成员方法的地址值。

堆内存:(地址值:001)

String name
null

int age

0
成员方法地址(指向  “方法区:Student.class文件的study()”  的成员方法的地址值)

sout(s)=001;

当s.study(); 时,流程是通过s进入001这个地址值,再通过“成员方法地址”进入方法区,然后调用方法,进入栈内存执行

注意:方法区一定要有对应的字节码文件,否则进不到栈内存和堆内存

创建多个对象(两个及以上),方法区的字节码文件只用加载一次,后面复用即可,因为Student是抽象的,且都是同一个类。且当new完后,在堆内存会创建对应数量的堆内存空间,并将地址值返回,(具体参考上面的:堆内存001这个地址)这里其中注意一点,虽然每个地址值都不一样,但是每个地址值里的 【成员方法地址】 都是指向同一个地址,即指向  “方法区:Student.class文件的study()” 

两个引用指向同一个对象:

Student  s1 = new  Student();

sout(s1)=001;

Student  s2 = s1;

s1 = null;

sout(s1.name)=  报错  -------   NullPointException

当s2也等于null时,s1和s2都切断了和堆内存的地址指向后,堆内存的对象无法被找到,会被jvm判定成“垃圾对象”,当java垃圾回收器空闲时会自动清理。

垃圾回收器:

当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到,就会被jvm判定成“垃圾对象”,当java垃圾回收器空闲时会自动清理。(意味着有些是得手动清理)

成员变量和局部变量的关系:

成员变量:类中方法外

局部变量:方法中的变量,包含方法(形参)

区别

成员方法局部方法
类中位置不同类中方法外方法中的变量,包含方法(形参)
内存中的位置不同堆内存栈内存
生命周期不同栈内存中的有对象存在且指向堆内存的对象,成员方法就会一直存在。只要该对象弹栈了,或切断了指向(对象名被赋值了null)堆中的对象会被jvm虚拟机判定成垃圾对象,且被java垃圾回收器清理。一般弹栈即消失随着方法的存在而存在,弹栈后消失
初始化值不同有默认初始化值没有默认初始值,必须先定义,才能使用(形参也必须先赋值??????)-----形参在调用之前就必须被赋值,否则无法创建有参构造,意思是创建有参构造必须先输入值,然后才能创建成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值