面向对象编程

初始面向对象

面向过程思想:顺序执行,线性思维

面向对象思想:分类的思维模式 适合处理复杂的问题

属性+方法 = 类
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,使用面向对象的思路去分析整个系统。但是,到具体微观的操作,仍需要面向过程的思路去处理

面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据。
三大特性:封装,继承,多态

从认知角度考虑是先有对象后有类。对象,是具体的事物。类是抽象的,对对象的抽象
从代码运行角度考虑是先有类后有对象,类是对象的模板

方法的回顾

方法的定义

修饰符 返回值类型 方法名(){
    方法体
    return 返回值;
}

例:

    public String sayHello(){
        return "helo world";
    }
    public void hello(){
        return;
    }

break:跳出switch循环,结束当前所在的循环
continue:借宿本次循环,进入下一次循环
return:方法的结束,返回值

方法名:驼峰命名法,见名知义

方法的调用

静态(static)与非静态方法:

public class Demo02 {
    public static void main(String[] args) {
        //静态方法
        //Student.say();

        //非静态方法
        //实例化这个类new
        //对象类型 对象名=对象值
        Student student = new Student();
        student.say();
    }

    //static是和类一起加载的
    public static void a(){
        b();
    };
    //类实例化之后才存在
    public static void b(){};
package com.oop.demo01;

//学生类
public class Student {

    //非静态方法
    public static void say(){
        System.out.println("学生说话了");
    }
}

static是与类一起加载的,所以在同一个类里,有Static的方法不能直接调用非静态(实例化之后才存在)的方法。

值传递&&引用传递

值传递:

public class Demo04 {
    public static void main(String[] args) {
        int a=1;
        System.out.println(a); //1
        Demo04.change(a);
        System.out.println(a);//1

    }
    //返回值为空
    public static void change(int a){
        a=10;
    }
}

形参不能改变实参的值

引用传递

package com.oop.demo01;
//引用传递 对象 本质是值传递
public class Demo05 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name); //null

        Demo05.change(person);
        System.out.println(person.name);
    }
    public static void change(Person person){
        //person是一个对象,指向Person person = new Person ;具体的值,改变属性
        person.name="kmh";
    }
}

//定义一个Person类 有一个属性name
class Person{
    String name;  //类下的字段叫属性

        }

方法的参数指向对象person,改变的是Person里的值

对象的创建分析

类和对象的关系

类是一种抽象的数据类型,是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物
对象是抽象概念的具体实例

一个程序只需要一个main方法

//学生类
public class Student {
    //属性 :字段
    String name;
    int age;

    //方法
    public void study(){
        System.out.println(this.name+"在学习");
    }
}

this.name只想自己的类

创建和初始化对象

  1. 使用new关键字创建对象
    在使用new关键字创建时,除了分配内存空间,还会给创建好的对象,进行默认的初始化 以及对类中的构造器的调用
  2. 类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的。并且构造器有以下两个特点:
    (1) 必须和类的名字相同
    (2) 必须没有返回类型,也不能写void
package com.oop.demo02;
//java文件---》class
public class Person {
    //一个类即使什么都没写,他也会存在一个方法
    String name;

    //实例化初始值
    //1. 使用new关键是必须要有构造器,本质是在调用构造器
	 //2.用来初始化值
    public Person(){
        this.name="kongminghui";

    }
    //有参构造:一旦定义了有参构造,无参就必须显示定义
    public Person(String name){
        this.name=name;
    }
}
/*
 public static void main(String[] args) {
       //实例化了一个对象
        Person person = new Person();
        System.out.println(person.name);  //null
    }
 */
 //alt + inster 生成构造器

/*
    构造器
    1. 和类名相同
    2. 没有返回值
    作用:
    1. new本质就是调用构造方法
    2. 初始化对象的值

    注意:
    1. 定义构造之后,如果想使用无参构造,显示定义一个无参的构造
 */

内存结构简单分析
image

//一个项目应该只有一个main方法
public class Applicatiion {
    public static void main(String[] args) {
        Pet dog = new Pet();
        dog.name="旺财";
        dog.age=3;
        dog.shout();

        System.out.println(dog.name);
        System.out.println(dog.age);

        Pet cat = new Pet();

    }
}
public class Pet {
    public String name;
    public int age;

    //无参构造

    public void shout(){
        System.out.println("叫了");
    }
}

类和对象

 /*
        1. 类与对象
            类是一个模板:抽象,对象是一个具体的实例
        2. 方法:
            定义,调用
        3. 对象的引用
            引用类型: !基本类型(8)
            对象是通过引用来操作的:栈---->堆

        4. 属性 字段Field 成员变量
            默认初始化:
                数字:0 0.0
                char:u0000
                boolean:false
                引用:null
            修饰符 属性类型 属性名 = 属性值
        5. 对象的创建和使用
            必须使用new关键字创造对象,构造器  Person kmh = new Person
            对象的属性 kmh.name
            对象的方法 kmh.sleep()
        6. 类:
            静态的属性    属性
            动态的行为    方法

         */
posted @ 2021-04-25 16:41  荷兰小野猪  阅读(58)  评论(0)    收藏  举报