JAVA的学习日记12

Java面向过程&面向对象

  • 面向过程思想

步骤清晰简单,第一步做什么,第二步做什么
面对过程适合处理一些较为简单的问题

  • 面向对象的思想

物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题

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

什么是面向对象

  • 面向对象编程(Object-Oriented Programming, OOP)

  • 面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据

  • 抽象

  • 三大特性:

封装
继承
多态

  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象。
  • 从代码运行角度考虑是先有类后有对象。类是对象的模板。
package com.oop.Demo01;

//Demo01 类
public class Demo01 {
    //main 方法
    public static void main(String[] args) {


    }

    //回顾
    /*
    方法的定义:
        修饰符 返回值类型 方法名(参数){
            语句块
            返回值
        }
     */
    public String sayHello(){
        return "Hello, World";
    }

    public void sayBye(){
        return;//结束语句,没有返回值
    }

    public int max(int a, int b){
        return a > b ? a : b;
    }
    /*
    注意break、continue和return的区别:
        break:跳出switch语句,结束循环
        return:结束一个方法,返回一个结果【可能是一个值,也可能为空】
     */

    //方法名:符合规范,见名知意【重要的时候不能随便写】

    /*
    参数列表:
        参数的类型
        参数名
        参数【定长和不定长(...)】
     */

}

回顾一下方法的调用

静态和非静态方法

package com.oop.Demo01;

//
public class Demo02 {
    public static void main(String[] args) {
        //静态方法可以直接调用
        Student.say();

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

    //这样写会报错,原因:
    //static是和Demo02这个类一起加载的,在加载的时候b()还没有被架加载,所以会报错
    public static void a(){
//        b();
    }

    //对象实例化之后才存在,所以一个已经存在的调用一个不存在的会报错
    public void b(){}
}
package com.oop.Demo01;

public class Student {
    //静态发方法 static
    public static void say(){
        System.out.println("静态类");
    }

    //非静态类
    public void sayHello(){
        System.out.println("非静态类");
    }
}

值传递和引用传递

package com.oop.Demo01;

//值传递
public class Demo03 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);  //1

        Demo03.change(a);
        
        System.out.println(a);  //1
    }
    public static void change(int a){
        a = 10;
    }
}

package com.oop.Demo01;

import com.cdoudou.method.Demo05;

//一个类里面只能有一个public class,但是可以有多个class
//引用传递:本质还是值传递
public class Demo04 {
    public static void main(String[] args) {
        Person person = new Person();

        System.out.println(person.name);    //null

        Demo04.change(person);

        System.out.println(person.name);    //cdoudou
    }

    public static void change(Person person){
        //person是一个对象:指向的是---->Person person = new Person();这是一个具体的人,可以改变属性!
        person.name = "coudou";
    }
}

//定义了一个person类,有一个属性:name
class Person{
    String name;
}

this方法:指的就是当前的类

类和对象的关系

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

动物、植物、手机、电脑....
Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为

  • 对象是抽象概念的具体实例
  • 小明就是人的一个具体实例,小明家里的旺财就是狗的一个具体实例
  • 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念

创建与初始化对象

  • 使用new关键字创建对象
  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:

1.必须和类的名字相同
2.必须没有返回类型,也不能写void

  • 构造器必须要掌握

主程序

package com.oop.demo02;

//一个项目应该只有一个main方法
public class Application {
    public static void main(String[] args) {
        //类:抽象的,需要实例化
        //类实例化后会返回一个自己的对象
        //student对象就是一个Student类返回的一个具体实例
        Student xiaoming = new Student();
        Student xiaohong = new Student();

        System.out.println(xiaoming.name);  //null
        System.out.println(xiaoming.age);   //0

        xiaoming.name = "cdoudou";
        xiaoming.age = 18;

        System.out.println(xiaoming.name);  //cdoudou
        System.out.println(xiaoming.age);   //18

        xiaohong.name = "doudou";
        xiaohong.age = 18;

        System.out.println(xiaohong.name);  //doudou
        System.out.println(xiaohong.age);   //18

    }
}

Student类


package com.oop.demo02;

public class Student {
    //属性:
    String name;
    int age;


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


}

原文地址:https://www.cnblogs.com/cdoudou/p/13679876.html