3.Java中的面向对象思想(一)——概述【Java学习笔记Hatter】Java开发工程师
面向对象(概述)
1.面向过程:强调的是功能行为。
面向对象:将功能封装进对象,强调了具备功能的对象。
使执行者变成了指挥者。
面向对象是基于面向过程的(找对象/建立对象,使用对象,维护对象的关系)
例:出去吃饭,用餐者叫服务员过来点餐即调用对象的点餐功能,服务员告诉厨师需求的订单,即服务员这个对象又调用了,厨师对象的煮菜功能。
3.类与对象的关系:类就是对现实生活中事物的描述,描述事物其实就是在描述事物的属性与行为;对象就是这类事物。
映射到Java中,描述就是class定义的类;具体对象就是对于Java在堆内存中用new建立的实体。
类类型变量指向对象
成员变量作用于最整个类中,局部变量作用于函数或语句中;(作用范围)
成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量在栈内存中。(在内存中的位置)
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());
}
}


1914篇文章