java学习笔记--第五章 面向对象
程序员文章站
2024-03-01 18:23:46
...
这个系列的博客是我个人学习java的学习笔记分享,面向已经有一定C语言编程基础的同学。
每一章的内容都是我学习过、整理过的笔记,具有一定的学习参考价值。
如有错误请与我联系修改,十分感谢!
第五章 面向对象
- OOP:面向对象编程。
- 类的概念:把某些具有相同属性和行为的事物抽象成一类。
class 类名{ 属性 方法 }
- 类名首字母大写;
- 定义类的时候如果是public class类名,说明是主类,文件名要与主类类名相同
-
java中属性可以没有初始值的,系统会自动给
- String 默认null
- Boolean默认false
- int默认0
- double默认0.0
- 类中使用自定义类定义属性默认值:null
- 在定义属性的时候可以指定默认值
- 方法的定义:
public <static> 返回值类型[void] 方法名(数据类型 数据,....){方法内容}
- 对象的概念:类是一个概念,对象是一个具体的实例。
- 创建对象:
例:Dog dog = new Dog();
-
对象创建的内存结构:
- 栈:用于存储基本数据类型的值或者是局部变量。容量小,速度快。
- 堆:用于存储引用数据类型,容量大,速度慢。
- 数据共享区:用于存储引用数据类型,存储一些共享的数据(类)。
- 每个类class加载到数据共享区,jvm解析这个类的内容。
- 方法是每个对象共享,但是方法内的数据是那个对象调用的这个方法,那这个属性就是在哪个对象的。
- 对象存储在堆中,引用存储在栈中,堆中每个对象的数据都是隔离的。
-
成员变量(属性):
除了属性,其他的都是局部变量- 属性特点:
- 范围:根据权限修饰来定
- 存储位置:跟对象走,在堆或者数据共享区
- 有默认值
- 生命周期:由jvm通过垃圾回收机制决定。
- 属性特点:
-
避免使用匿名对象
-
封装:
- 提高数据安全性,通常对于类中的属性可以随意改变,封装就可以让其私有化。
- 定义属性的时候不用public用private就是私有的,私有属性的只能在本类中的方法使用。
- 所以我们可以在类中提供一个公有的设置封装属性和获取封装属性的公有方法,来实现对私有属性的访问。
- 属性和局部变量名字相同时,使用this.属性名 可加以区分。
注意,都只能在本类中使用
-
构造器:构造方法
用于创造对象的方法。- 当不单独设置的时候使用默认构造器。
语法:权限修饰符 类名(数据类型 参数名){}
- 它没有数据类型,没有返回值,就是在运行类的时候同时运行构造方法,如果构造方法有参数,创建实例对象的时候括号里要写上相应的参数。
- 可以有多个构造器,只要参数不相同就行,根据传入的参数来决定用哪个。
- 如果在已有有参构造器情况下使用默认构造器,需要有显示的定义,就是把默认构造器写一遍,否则自动删掉默认构造器。
- 构造方法之间的调用:
使用this,调用其他构造器的对象可以:this(要调用的构造方法中的参数形式); 注意,this调用的时候必须放在构造器的第一行;
- 当不单独设置的时候使用默认构造器。
-
方法重载:
- 一个类中可以有多个方法具有相同的名字,但方法的参数必须不同,就可以不同的存在。
- 满足:
- 参数个数不同;
- 参数个数相同但参数列表中对应的某个参数的类型不同;
-
可变参数:方法中的参数有一种书写形式为可变参数。
- 在做方法的参数时,可以用…来省略同类型的参数名字,例如:
public void f(int ... x) # 表示有很多int型参数,x做代表,可以看作是数组头 # 此时操作方法的时候,就可以通过x把所有的参数都进行操作了
- 在for循环中,也可以有简便形式:for(声明循环变量:参数代表){},例如:
for(int param : x){sum = sum+param} # param可以看作是循环从x这个参数代表中拿数据,然后进行相加
- 在做方法的参数时,可以用…来省略同类型的参数名字,例如:
-
static的使用
- 使用在属性上:
- 使用在属性上叫类属性(区别一般的对象属性)
- 类属性的访问,可以用: 类名.类属性 || 对象名.类属性 访问
- 当类创建的时候,类属性就已经存在了,所以即使没有创建对象,也可以通过调用类名.类属性的方式访问。
- 类属性是对所有对象共享的。
- 使用在方法上:
- 使用在方法上就是类方法。
- 类方法的访问也可以是用类名和对象名来访问.
- 对象方法必须要有对象才能调用,但是类方法不用对象就能直接调用。
- 类方法不能调用对象属性,不能访问对象方法,因为类方法初始化很早,只能访问类属性;反之可以
- 局部变量不能用static修饰
- static修饰的方法可以重载
- 对于用static修饰的成员变量不能使用this
this代表当前对象下的成员变量,但是static修饰的成员变量在类加载的时候就存在了,所以不能用this
- 使用在属性上:
-
静态代码块
-语法: 在类中 static{ }
主要进行初始化资源。- 在类初始化的时候就执行静态代码块,比main都快
- 其他属性和类方法,类对象可类比
- 类属性必须在static{}前写,否则不能再static{}中调用
-
括:单例模式
-
设计模式是前人总结的代码设计思想,共23中,本次为其中一种。
-
单例模式:只去创建一个实例(对象)
-
步骤:
(1). 私有化构造器(不让你创建对象) (2). 定义一个公共类方法,用于获得单例的对象,其返回值类型是这个类的类型. (3). 定义一个类属性,返回值类型是这个类类型。 - 懒汉模式: (4) 在类方法中写一个if,当类属性为null的时候开辟新的对象,否则不给开,然后返回这个类属性。 (5)调用的时候就 类数据类型 对象名 = 类名.类对象名(); - 恶汉模式: (4) 直接给类属性初始化成一个对象,然后在类方法中返回这个类属性。
-
-
static不能修饰构造方法和局部变量
-
一个类声明的两个对象如果具有相同的引用,二者就具有完全相同的变量(实体)。
-
使用空对象编译不会错,但是运行会出错。
-
new创建对象的全过程:
(1)为成员变量分配内存,指定默认值
(2)初始化成员变量,也就是用户声明成员变量时给的默认值
(3)执行构造方法
(4)计算出一个引用值
- 访问权限的修饰符详讲:private,友好,protected,public
- 权限修饰符在类上:
- 调包引用只能引用public类;
- 权限修饰符在方法上:
-
private只能在本类中使用;
-
友好方法和private不能被继承;
-
protected方法不能被其他无关类中使用;
上一篇: 基于spring 方法级缓存的多种实现
下一篇: 实例-原型链继承