3.Java中的面向对象思想(一)——概述【Java学习笔记Hatter】Java开发工程师

/ 福建工程学院音乐学院Java开发工程师 / 2017-03-07

Java工程师,Java开发初学者,Java学习经验分享,面向对象思想,封装,静态

面向对象(概述)

1.面向过程:强调的是功能行为。   

Java工程师,Java开发初学者,Java学习经验分享,面向对象思想,封装,静态

面向对象:将功能封装进对象,强调了具备功能的对象。

使执行者变成了指挥者。

Java工程师,Java开发初学者,Java学习经验分享,面向对象思想,封装,静态

Java工程师,Java开发初学者,Java学习经验分享,面向对象思想,封装,静态

面向对象是基于面向过程的(找对象/建立对象,使用对象,维护对象的关系)

例:出去吃饭,用餐者叫服务员过来点餐即调用对象的点餐功能,服务员告诉厨师需求的订单,即服务员这个对象又调用了,厨师对象的煮菜功能。


2.三个特征:封装继承多态


3.类与对象的关系:类就是对现实生活中事物的描述,描述事物其实就是在描述事物的属性与行为;对象就是这类事物。

映射到Java中,描述就是class定义的类;具体对象就是对于Java在堆内存中用new建立的实体。

类类型变量指向对象


4.成员变量与局部变量

成员变量作用于最整个类中,局部变量作用于函数或语句中;(作用范围)

成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量在栈内存中。(在内存中的位置)


5.匿名对象

匿名对象使用方式1:当对对象的方法只调用一次时,可以用匿名对象来完成; 如果对一个对象进行多个成员调用,必须给这个对象定义一个名字。

匿名对象使用方式2:可以用匿名对象作为实际参数进行传递


6.封装

原则:

(1)将不需要对外提供的内容都隐藏起来。

(2)把属性都隐藏,提供公共方法对其访问。

private:私有只在本类中有效。私有仅仅是封装的一种表现形式。

成员私有化后,该类外的建立的对象不能直接访问,需在该类中提供对外访问私有化成员的方法。提供对外访问方法,是因为可在访问方法中对访问数据进行操作,提高代码健壮性。


7.构造函数

(1)对象一建立就会调用与之对应的构造函数。

(2)构造函数的作用:可以用于给对象进行初始化。

(3)当一个类中没有定义构造函数,系统会自动定义一个无参构造函数

(4)一般方法与构造方法的区别:

写法上有不同:

构造函数是在对象已建立就运行,给对象初始化。而一般方法是对象调用才执行,是给对象添加对象具备的功能;

一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次。

(5)什么时候定义构造函数?

当分析事物时,该事物具备一些特性或行为,那么将这些内容定义在构造函数中。

(6)构造代码块

作用:给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。(不同对象的共性内容)

和构造函数的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象进行初始化。

 

8.this关键字

(1)this:(代表本类的对象,代表它所在函数所属对象的引用)。

哪个对象在调用this所在的函数,this就代表哪个对象。

(2)this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,用this来表示这个对象。但凡本类功能内部使用了本类的对象,都用this表示。

(3)this(name):用于构造函数间的互相调用

(4)this语句只能定义在构造函数的第一个语句

因为如果初始化中还有初始化,先执行更细节的初始化,再执行自己的初始化


9.静态static

(1)用法:修饰符,用于修饰成员(成员变量,成员函数),静态修饰内容被对象所共享。

(2)当成员被静态修饰后,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员

(3)特点:

           ①随着类的加载而加载,随着类的消失而消失,说明它 生命周期最长

           ②优先于对象存在,静态是先存在,对象是后存在的

           ③被所有对象共享

           ④可以直接被类名所调用


(4)实例变量(成员变量)和类变量的区别:

①类变量随着类的加载而存在于方法区中。

  实例变量随着对象的建立而存在于堆内存中。

②类变量生命周期最长,随着类的消失而消失。

  实例变量生命周期随着对象的消失而消失。


(5)static使用注意事项

①静态方法只能访问静态成员;非静态可访问静态也可以访问非静态

②静态方法中不可以定义this,super关键字。因为静态优先于对象存在。


(6)利:对对象的共享数据进行单独空间的存储,节省空间

     弊:生命周期过长,访问局限性


(7)什么时候使用静态?

     当对象中出现共享数据时。对象中的特有数据要定义成非静态存在于堆内存中(成员变量)

     什么时候定义静态函数?

当功能内部没有访问到非静态数据(对象的特有数据),该功能可以定义成静态的(函数)


(8)静态代码块

随着类的加载而执行,只执行一次,用于给类进行初始化的,优先于主函数。


10.main函数

作为程序入口被JVM调用,主函数是固定格式的,JVM识别。


11.单例设计模式

解决一个类在内存中只存在一个对象

如何保证对象唯一:

(1)为了避免其他程序过多建立该类对象,先控制禁止其他程序建立该类对象,将构造函数私有化;

(2)还为了让其他程序可以访问到该类对象,在本类中,自定义一个对象,在类中创建一个本类对象;

(3)为了方便其他程序对自定义对象的访问,可以对外提供一些访问形式,提供一个函数可以获取到该对象。

 

对于事物该怎么描述,还怎么描述。若需要将事物的对象在内存中保证唯一时,就加上以上三步即可。

代码:

class Single {

private int num;

private Single() {

}

public void setNum(int num) {

this.num = num;

}

public int getNum() {

return num;

}

private static Single s = new Single();

public static Single getInstance() {

return s;

}

}


public class SingleDemo {

public static void main(String[] args) {

Single s1 = Single.getInstance();

Single s2 = Single.getInstance();

s1.setNum(30);

System.out.println(s2.getNum());

}

}



 

 

Java工程师,Java开发初学者,Java学习经验分享,面向对象思想,封装,静态


 



公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇