面向对象思想
是针对面向过程,面向过程是对功能具体描述,面向过程其实是对相似对象的抽象化,简单来说就是偷懒
我们常常使用现成的类,直接调用方法实现功能,这个类可能是已有的库,也可能是自己编写的
如我们想打印数组元素,要写出如下代码
1而我们使用现成库就很简单
2面向对象的特点:封装,继承,多态1
类
定义,肯定是现有图纸,才有手机,所以我们就定义类来作为实例的描述,类有属性和行为
这里java叫做成员变量和成员方法
通常我们想创建实例需要几步,导包(import 包名.类名),创建实例,调用方法属性,如果类就在本文件夹内定义不用导包
3如上我们定义了Student类,我们在同文件夹使用Demo来引用,因为同文件夹,所以并不用导入,可以直接实例化,我们使用其方法,如下
4对象引用内存图如下
5其中我们定义了2个类,于是方法区塞进2个class,Phone和Demo01PhoneOne,这里谁有main谁进栈,进入到栈的最底端,于是Demo01PhoneOne的main在最底,然后按main逐行执行,开始创建了实例,就会参照方法区Phone在堆内开辟相同空间,其中成员变量开始未赋值为默认值,字符串null,浮点0.0,成员方法存的是方法区的地址接口。然后给one实例存的是堆空间地址,然后给one的几个属性赋值,就会一次访问堆对应空间,修改内容,最后调用方法,调用方法,先找到堆内方法地址,然后找到方法区方法,将其压栈,方法运行完从栈内清空,最后main运行完,也从栈的空间清空
6上图又进行了2个实例的内存分析,创建了实例two,此时会另外在堆内开辟空间,他们的方法区指向都是一样的,其他就没什么可说的了,这里可以去记一个快捷键,我们赋值One的代码,然后ctrl+v到下面,然后选中one,用shift+F6可以把后面所有的One全选,然后一起修改
7我们可以把实例当做参数传给函数,如上图,实际是传入了内存的堆地址,然后我们就可以安装对应的地址和类结构解析属性
成员变量和局部变量的区别
1位置:局部变量在方法内部,成员变量在方法外类内部
2作用域:局部变量方法内使用,成员变量类内都能使用
3默认值:局部变量如果没有赋值,不能使用,成员变量如果没有赋值会有个初始值
4内存位置:局部变量运行位与栈内存,成员变量位于堆内存
5生命周期:局部变量随进栈而诞生,随出栈而销毁,成员变量随实例创建而在堆空间创建,当引用消失后,被垃圾回收机制回收(java程序员通常无法控制)
类三大特性之封装
封装体现在方法的封装,还有关键字private,封装的本质就是将一些细节信息隐藏起来,我们只需要知道输入输出和实现的功能即可
private关键字是私有化的意思,针对于public公有
8比如,我们如上图引用Person类,然后在Demo03Person里尝试实例化对象,因为年龄可以随便修改,我们就有可能设置出来个负值,所以就有需求对我们不合理的设置进行限制
9我们给age定义前加个private,这样age就变成了私有化,age在类内部还是随便访问的,但是在类外是无法使用的
10如上,之前的设置年龄的语句就被IDE提示了红色,都是文件也被波浪号标识,鼠标移上去可以看见有提示是私有变量,但是这样我们设置正数也无法访问了,这样我们就得考虑创建类方法来使用私有变量
11我们定义2个方法,注意这个方法是公有的,否则实例无法调用,一个是setAge,一个是getAge,其中setAge是需要传参的,而getAge不需要,只需要返回值,所以间接使用成员变量就是定义一对儿getter和setter方法
12在initialJ中,对于getter,和setter有快速创建,如输入pv,就会提示创建setter,输入ps就会提示String的getter
this关键字
this可以指代实例对象,和python的self类似,这样赋值时就可以重名问题
13构造方法
public 类名(参数){构造体} 类名必须和使用类名完全一致,而且构造方法不要写返回类型,连void都不要写,这个方法的调用是new时调用
14 15如上,我们定义构造方法,只打印,这里可以看到我们new实例对象会调用构造方法。如果没有写构造方法,编译器会默认执行无参数什么都不做的构造方法,一旦编写构造方法,那编译器就不默认创造构造方法
16构造方法也是可以重载的,只要参数列表不同即可,这样我们可以使用默认值和指定值初始化实例,如上
编写一个标准类的几步
1所有成员变量都用private修饰
2给每个成员变量定义一个getter和setter方法
3编写一个无参数的构造方法
4编写一个有参数的构造方法
这样的标准类也叫做java bean
17我们IDE initialJ有自动生成getter和setter的方法,我们可以点击code->generate或者alt+Insert
18点击getter和setter,默认只选择一项,可以ctrl多项选择,按OK,就自动添加
19自动添加玩的效果如下
20同理,我们在刚才生成的位置还看见了constructor,这就是构造方法,
21点击selectnone,就创造了无参的构造方法,点击变量(ctrl多项选择)即实现有参的构造方法,结果如下
22一般类内顺序是成员变量,无参构造,有参构造,getter,setter,我们使用IDE会节省很多代码构造时间
网友评论