OOP

Oriented object program 面向对象编程

OOA

Oriented object analyze 面向对象分析

OOD

Oriented object design 面向对象设计


一切都是对象

C:面向过程 全是函数(功能体的封装)
面向过程与面向对象的比较

以满汉全席为例
    面向过程:
        强调的是功能行为
        108道菜每一道工序全部捋一遍
    面向对象:
        将功能封装进对象,强调具备了功能的对象
        分别找不同的厨师做不同的菜

entity:实体 new

面向对象的开发 设计 特征

开发的过程:不断创建对象,使用对象,指挥对象做事
设计的过程:管理和维护对象间的关系
面向对象的特征:

  • 封装(encapsulation)
  • 集成(inheritance)
  • 多态(polymorphism)

    物以类聚
    对现实实物软件抽象。

对象 类的实例

**用属性和行为描述事物**

java中用类class描述事物也是如此

  • 属性:对应类中的成员变量
  • 行为:对应类中的成员函数

    定义类其实在定义类中的成员变量和成员函数

类成员

成员变量
数值类型的成员变量的默认值是0
属性
成员函数
方法
定义方法
class 类名{} //首字母大写,

局部变量

定义在方法或者语句中
没有默认的初始化值,必须初始化
存在栈中
所在范围结束后,空间自动释放

堆栈

数组和对象在堆中
方法在栈中



class ClassDemo{
    public static void main(String[] args){
            //调用Person类
            Person p = new Person();
            p.run();
        }   
}
/**
 *定义类
 */
class Person{
//成员变量----属性(property)====字段(field)
    int height;
    int weight;
    int age;

//成员方法
    public void run(){
        System.out.println("run");
        }
}

这里写图片描述



堆栈溢出

堆 默认是四分之一物理内存
栈空间是1M
java -X
java -Xmx100m //设置jvm堆空间的最大值
java -Xms100m //设置jvm的堆空间初始值

class StackHeap{
    public static void main(String[] args){
        //堆溢出 java -Xmx100M
        byte[] arr0 = new byte[Integer.MAX_VALUE];
        out(1);
        }
    //栈溢出

    public static void out(int i){
        System.out.println(i);
        out(i + 1);
        }
    }

封装

将部分成员隐藏起来,外界只能通过其他方式进行方法
使用private进行修饰,保证安全
public
private

public class Cat {
    private String color;
    private int age;

    public Cat(){

    }

    public String getColor(){
        return color;
    }

    public void setColor(String c){
        color = c;
    }
}

class ClassDemo2 {
    public static void main(String[] arge){
        Cat c = new Cat();
        c.setColor("yello");
        System.out.print(c.getColor());
    }
}

这里写图片描述


优化
构造函数

public class Cat {
    private String color;
    private int age;
    //与类同名,为构造函数
    public Cat(){

    }
    //用构造函数创建对象,可以直接赋值
    public Cat(String c){
        color = c;
    }

    public String getColor(){
        return color;
    }

    public void setColor(String c){
        color = c;
    }
}

class ClassDemo2 {
    public static void main(String[] arge){
        Cat c = new Cat();
        Cat c2 = new Cat("white");
        c.setColor("yello");
        System.out.print(c.getColor());
        System.out.println("====================");
        System.out.print(c2.getColor());
    }
}

这里写图片描述

构造函数

  • 函数名和类名相同
  • 没有返回值 创建之后肯定返回该对象
  • 可以重载
  • 若类没有定义构造函数 jvm分配一个空构造
  • 创建对象 new Xx();
  • -

构造代码块

创建对象时调用
构造函数之前调用,先运行构造代码块(从头到尾),再运行构造函数(从头到尾)


/*
 *定义Dog类
 *
 */
 class Dog{
     //构造代码块
     {
         System.out.println("1.构造代码块");
         }

对象创建过程

1 构造代码块
2 构造函数

类成员

  • 成员变量
  • 成员函数
  • 构造代码块
  • 静态代码块
  • -

this

**指向对象自身的引用,this代本类对象的引用**
当函数内需要调用到该函数的对象时,就用this
public void setColor(String color){
    this.color = color;
    }

static

用于修饰成员(成员变量与成员函数)
被修饰的函数的特点:

  • 随着类的加载而加载
  • 优先于对象存在
  • 被所有对象所共享
  • 可以直接被类名调用

注意事项

  • 静态方法只能访问静态成员
  • 静态方法中不能写this super关键字
  • 主函数是静态的
int tires;
static String BRAND = "BMW"
//静态方法只能访问静态成员
public static void outBrand(){
    //若访问非静态成员则会出错
    System.out.println(tires);
    //只能访问static修饰的静态成员
    System.out.println(BRAND);
}


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐