一、什么是面向对象
Java的核心思想就是面向对象!
面向对象思想:
- 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考,最后才对某个分类下的细节进行面向过程的思索。
- 面向对象适合处理复杂的问题,需要多人协作的问题。
- 对于描述复杂的事物,为了从宏观上整体合力分析,我们额需要使用面向对象的思路来分析整个系统。(但是,具体到微观操作,仍然需要面向过程的思路去处理。)
面向对象编程(Object-Oriented-Programming):
本质是以类的方式组织代码,以对象的形式(封装)数据,核心是”抽象“。
三大特性:
- 封装
- 继承
- 多态
从认识论的角度考虑,先有对象后有类,类是对具体的对象的抽象。
从代码运行的角度考虑,先有类后有对象,类是对象的模板。
二、方法回顾及加深
方法的调用:递归
- 静态方法&非静态方法
package com.oop.Demo01;
public class Demo02 {
public static void main(String[] args) {
//实例化这个Student类,然后才能调用其非静态方法
//类名 对象名 = new 类方法名;
Student student = new Student();
student.chat();
}
/*
static静态方法是和类一起加载的,它的时间片是很早的,而非静态方法是类实例化后才存在
所以,static静态方法不能调用非静态方法,因为还不存在!!!
而static静态方法可以调用static静态方法,非静态方法可以调用非静态方法,非静态方法可以调用static静态方法
*/
public static void a(){
//b();错误
}
public void b(){
a();
}
}
- 形参&实参
- 值传递&引用传递
package com.oop.Demo01;
public class Demo03 {
public static void main(String[] args) {
//int a = 1;
//System.out.println(a);
//Demo03.change(a);//传值调用
//System.out.println(a);
//引用调用: 传递对象,本质还是值传递
//对象,内存!
Person person = new Person();
System.out.println(person.name);//null
Demo03.change(person);//传递对象作为参数调用change()方法
System.out.println(person.name);//姚政
}
public static void change(Person person){
//person是一个对象,指向的是 ---> Person person = new Person(); 这是一个具体的人可改变属性!
person.name="姚政";
System.out.println(person.name);
}
}
//定义了一个Person类,有一个属性:name
class Person{
String name;
}
- this关键字
三、类与对象的创建
类 = 属性 + 方法
使用new关键字创建对象:
使用new关键字创建对象的时候,除了分配内存空间之外,还会对创建的对象进行初始化,以及对类中构造器的调用。
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的,并且它满足:
- 必须和类的名字相同
- 必须没有返回类型,也不能加 void
创建对象的内存分析:
四、小结
- 类与对象:类是一个模板、抽象,对象是一个具体的实例
- 方法:定义、调用
- 对象的引用:引用类型,对象是通过引用来操作的,栈--->堆,引用的是对象在堆中的地址
- 属性:字段Field 成员变量
默认初始化:
数字: 0 0.0
char: u0000
boolean: false
引用: null
修饰符 属性类型 属性名 = 属性值 - 对象的创建和使用
- 必须使用new关键字创建对象 ,构造器 Person yaozheng = new Person();
- 对象的属性 yaozheng.name
- 对象的方法 yaozheng.study()
- 类:
静态属性 属性
动态属性 方法