07 面向对象

面向对象
区别:
面向过程:事物比较简单,可以用线性的思维去解决
面向对象:事物比较复杂,使用简单的线性思维无法解决
共同点:
面向过程和面向对象都是解决实际问题的一种思维方式
二者相辅相成,通过面向对象方式方便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到微观操作,仍然使用面向过程方式来处理。

类可以生成对象 类是对象的抽象
对象:是具体的事物
类:是对对象的抽象(抽象 抽出像的部分)
先有具体对象,然后抽象各个对象象的部分,归纳出类通过类在认识其他对象

1、静态的描述声明为类的成员变量 成员变量描述对象有什么
2、动态的描述声明为成员方法 成员方法描述对象可以做什么
3、成员方法可以直接使用成员变量
package lei;

public class Person {
    //静态的特征描述为类的成员变量 成员变量描述对象有什么
    //在这里声明类的成员变量
    //类的里面 方法的外面
    String name;
    int age;
    String gender;
    
    //动态的特征描述为类的成员方法 成员方法描述对象可以做什么
    public void eat() {
        //成员方法可以直接使用成员变量
        System.out.println(name + "在吃饭");
        
    }
    public void sleep() {
        System.out.print(name + "在睡觉");
        
    }public void coding() {
        System.out.print(name + "在敲代码");
    }

}


类:class
对象:object instance(实例)某个类的对象 <==> 某个类的实例

定义类(类的组成)
属性 field
方法 method
构造方法 construtor
其他:代码块 静态代码块 内部类

类的属性:
在定义成员变量时可以对其初始化
如果不对其初始化,Java使用默认的值对其初始化。


创建对象
类名 对象名 = new 类名();
Person p1=new Person(); 

调用类的属性和方法
对象名.成员变量
对象名.成员方法

属性   field,或者叫成员变量
属性用于定义该类或该类对象包含的数据或者说静态属性。
属性作用范围是整个类体
属性定义格式:
内存分析


形参和实参
定义方法的参数是形式参数
调用方法的参数是实在参数
调用方法时要求参数个数相同,类型兼容

参数传递
基本数据类型的参数传递
引用数据类型的参数传递

类和类之间的通信
通过创建对象,类和类就建立了联系,通过方法的调用来进行信息的传递

this: 是一个关键字,代表当前对象的引用,就是那个对象执行到了这一行代码,那个对象就是当前对象
调用属性 : 当局部变量和成员变量重名的时候,使用this,解决重名问题,不重名可以省略
调用方法
调用构造方法
        this();
        this(“旺财”,100)
package movie02;
/**
 * 自定义的数据类型
 * 用来存储数据
 * @author tang
 *
 */
public class Movie {
    String movieName;
    String movieDrt;
    String movieMain;
    int movieTime;
    

}


package movie02;

public class Test {
    public static void main(String[] args) {
        MovieManager manager = new MovieManager();
        manager.shouMainMenu();
    }
}



package movie02;

import java.util.Scanner;

public class MovieManager {
    // 创建一个数组,用来存放电影的对象
    Movie[] ms = new Movie[10];
//    {1,1,1,1,1,0,0}
    // 创建一个输入的对象 用来输入内容
    Scanner input = new Scanner(System.in);

    // 主菜单的界面
    public void shouMainMenu() {
        System.out.println("欢迎光临横店影视城");
        System.out.println("------------------------");
        System.out.println("1,新增电影");
        System.out.println("2,查看电影");
        System.out.println("3,删除电影");
        System.out.println("4,退出");
        System.out.println("------------------------");
        int flg = input.nextInt();
        switch (flg) {
        case 1:
            add();
            backMainMenu();
            break;
        case 2:
            select();
            backMainMenu();
            break;
        case 3:
            delete();
            backMainMenu();
            break;
        default:
            
            break;
        }

    }
    
    
//    返回主菜單
    public void backMainMenu() {
        System.out.println("请输入0返回主菜单");
        int flg = input.nextInt();
        if (flg == 0) {
            shouMainMenu();
        }else{
            backMainMenu();
        }
            
    }

    public void add() {
        //用户输入电影的信息
        System.out.println("新增電影");
        System.out.println("请输入电影的名字");
        String name = input.next();
        System.out.println("请输入电影的导演");
        String drt = input.next();
        System.out.println("请输入电影主演的名字");
        String main = input.next();
        System.out.println("请输入电影的时长");
        int time = input.nextInt();
        
        //创建一个电影的对象  来保存用户输入的电影的属性
        Movie m = new Movie();
        m.movieName = name;
        m.movieMain = main;
        m.movieDrt = drt;
        m.movieTime = time;
        
        //查找数组中第一个为空的位置,该位置就是当前电影对象应该添加的位置
        int index = 0;
        for (int i = 0; i < ms.length; i++) {
            if (ms[i] == null) {
                index = i;
                break;
            }
        }
        
        ms[index] = m;
        
        
        
    }

    //查看电影
    public void select() {
        System.out.println("查看電影");
        System.out.println("电影名	导演	主演	时长");
        for (int i = 0; i < ms.length; i++) {
            Movie m = ms[i];
            if (m == null) {
                //一旦m == null  说明没有电影的对象了  遍历就结束
                break;
            }
//            打印电影的信息
            System.out.println(m.movieName+"	"+m.movieDrt+"	"+m.movieMain+"	"+m.movieTime);
        }

    }

    public void delete() {
        System.out.println("请输入电影的名字");
        String name = input.next();
//        [1][4][5][6][][]
        //记录所要删除的元素的下标
        int index = -1;
        for (int i = 0; i < ms.length; i++) {
            Movie m = ms[i];
            //如果输入的名字和该电影的名字相同,则找到了索要删除的电影的对象
            //记录下标  结束循环
            if (name.equals(m.movieName)) {
                index = i;
                break;
            }
        }
        if (index >= 0) {
            for (int i = index; i < ms.length-1; i++) {
                ms[i] = ms[i+1];
            }
            ms[ms.length-1] = null;
        }
    }

}
原文地址:https://www.cnblogs.com/meizhoulqp/p/11256745.html