面向对象

Posted xgbbd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

面向对象含义

Java的核心思想就是OOP(面向对象编程)

OO:面向对象

技术图片

技术图片

面向过程:线性思维

面向对象:分类思维

面向过程和面向对象不可分割,面向对象相当于一个框架,面向过程相当于具体执行流程

技术图片

抽象:把共性抽取出来 抽"像"

方法的定义及调用

技术图片

静态方法:加static 的方法

技术图片

静态方法可直接通过类名进行调用

技术图片

非静态方法需要把类进行实例化

new Student()代表把类实例化了,.say()相当于调用了其中的方法

一般形象的写为如下方式:

技术图片

Student student = new Student(); 快捷键:new Student()+alt+enter

public class Demo1 {
    //main方法    用于启动当前程序
    public static void main(String[] args) {

    }
    
    //static是和类一起加载的,即类存在的时候它就存在了
    public static void a(){
        b();    //一个已经存在的调用不存在的会报错,所以这里调用b()的时候会报错
    }

    //b()是类实例化之后才存在的
    public void b(){

    }

}

方法中,实际参数和形式参数的类型要对应

值传递和引用传递:

Java中都是值传递

//值传递   只是把值传给了形参
public class Demo2 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);   //1

        Demo2.change(a);
        System.out.println(a);   //1
        //因为方法中的形参并没有返回一个结果,它的返回值为空
    }

    //返回值为空
    public static void change(int a){
        a = 10;
    }
}
//引用传递   一般是传递一个对象   本质还是值传递
//一个类里面只能有一个public class,但是可以有多个class
public class Demo3 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);   //null

        Demo3.change(person);
        System.out.println(person.name);


    }

    public static void change(Person person){
        //Person是一个对象,指向Person person = new Person();  这是一个具体的人,可以改变属性
        //本质还是在传递值,把xg传递给了对象的属性
        person.name = "xg";
    }

}

class Person{
    String name;
}

类与对象

技术图片

构造器

技术图片

在IDEA下查看编译后的class文件

技术图片

技术图片

可以观察到在class文件中默认添加了一个方法,且这个方法没有返回值

技术图片

进行debug调试发现,构造器走完了才生成对象,输出person.name

alt + insert ---> Constructor生成构造器

选择Select None 生成无参构造函数

按住ctrl可进行多选

构造器:

  1. 和类名相同
  2. 没有返回值

作用:

  1. new 本质是在调用构造方法
  2. 初始化对象的值

注意点:定义的有参构造,若想使用无参构造,需显示定义

以类的方式组织代码,以对象的方式封装数据

创建对象内存分析

总结

  1. 类与对象

    类是一个模板,抽象的,对象是一个具体的实例

  2. 方法

    定义、调用

  3. 对象的引用

    引用类型:除开基本类型(8)之外的

    对象是通过引用来操作的,就是内存栈中的,真实对象是在堆里面的(引用就是指向对象的一个地址)

  4. 属性:字段Field 成员变量

? 默认初始化:

? 数字:0 0.0

? char:u000

? boolean: false

? 引用:null

? 除开基本类型之外的统统为null

? 修饰符 属性类型 属性名 = 属性值;

  1. 对象的创建和使用

    --必须使用new 关键字创建对象,创建对象还需要有构造器

? --对象的属性 xg.name

? --对象的方法 xg.sleep()

  1. 类(类中只有这2个):

    静态的属性 属性

    动态的行为 方法

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器