JAVA-面向对象 - 类、对象以及构造和this解析

面向对象

面向对象与面向过程

1.  面向对象以及面向过程实际上是一种思维方式,通过什么样的思维逻辑实现项目功能。

面向过程在流程中重点关注的是流程中的每一个动作/步骤,而面向对象在流程中重点关注对象。只要是找到了这个对象,就拥有了这个对象身上的一切功能。

2.  面向对象一定有优于面向过程吗?---不一定---一些相对简单的场景建议使用面向过程;一些相对复杂的事务建议使用面向对象。

3.  面向对象是基于面向过程的。

类与对象的关系

根据一类事物的共有特征和共有行为进行总结,将这一类事物的特征定义为属性,将这一类事物的行为定义为方法,就总结出来一个代表这一类事物的类。--- 类是对象的概括,在java中,也就是所写的 class{}  。而利用new关键字来创建一个对象(实例)---对象是类的具体化。

总结到类中的属性也叫作成员变量,总结到类中的方法称为成员方法。

注意: JVM会将.java文件编译为.class文件,并且每个类都会生成.class字节码文件,JVM运行的就是.class文件。

成员变量和局部变量区别:

1. 定义位置:成员变量是定义在类内;局部变量是定义在方法内

2. 作用范围:成员变量可以作用于整个类;局部变量只能作用于定义的方法内

3. 内存存储:成员变量会随着对象存到堆内存中,并且在堆内存中自动的赋予了一个默认值;局部变量在方法执行的时候到栈内存中存储,不会自动给予默认值

4. 生命周期:成员在对象被创建的时候出现,在对象被回收的时候销毁。局部变量在方法执行到对应的行的时候创建,在方法或者语句执行完成之后会立即释放

构造方法

我们在上文说过,通过new关键字对类进行实例化,其实准确的说是通过new关键字和调用类中的构造方法来创建对象。举个例子--- Random rand = new Random();这里new Random()是新创建的对象,而Random()就是Random类的构造方法。--- 每一个类中都至少一个有构造方法。如果没有手动添加,那么JVM在编译的时候添加无参构造。如果手动添加,JVM就不再添加了。

构造方法与类同名而且没有返回值类型。构造方法往往可以重载。

注意:可以在构造方法中写return吗?---可以---用于规避掉不合常理的数据

对象在内存中的存储

这里不能传图片。还是不画了,,看网上的图片吧!!!求原谅哦https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=java%E5%AF%B9%E8%B1%A1%E5%86%85%E5%AD%98&step_word=&hs=0&pn=0&spn=0&di=29064196700&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=936400053%2C3100324959&os=2064233391%2C3880928129&simid=4175401072%2C674133374&adpicid=0&lpn=0&ln=1969&fr=&fmq=1516245069593_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=http%3A%2F%2Fs1.sinaimg.cn%2Fmw690%2F005Qztfuty700Jsg5Xy20%26690&fromurl=ippr_z2C%24qAzdH3FAzdH3Fks52_z%26e3Bftgw_z%26e3Bv54_z%26e3BvgAzdH3FfAzdH3Fks52_8nuc9vckva8ado0ee_z%26e3Bip4s&gsm=0&rpstart=0&rpnum=0

this关键字

this用在本类方法中调用本类中的属性或者是方法的。

this代表本类的实际对象。

注意:在java中,所有的非静态属性和非静态方法都是通过对象来调用的,所有用this指代当前调用本类方法的对象。

this语句---this(参数)---表示调用本类中其他的对应形式的构造方法---this语句必须放在构造函数的第一行

构造代码块

在类内用{}包起来的代码块---构造代码块/初始化代码块。在创建对象的时候无论调用哪个构造函数,构造代码块都会先于构造函数执行一次。

构造代码块的用途主要也是用于构建对象,但是因为每个构造都需要执行这部分的代码,所以将构造代码块抽离出来,形成构造代码块,但是需要注意代码块的执行先于构造,涉及构造中赋值之后的操作,不适用。

你可能感兴趣的:(JAVA语言基础)