面向对象
区别:
面向过程:事物比较简单,可以用线性的思维去解决
面向对象:事物比较复杂,使用简单的线性思维无法解决
共同点:
面向过程和面向对象都是解决实际问题的一种思维方式
二者相辅相成,通过面向对象方式方便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到微观操作,仍然使用面向过程方式来处理。
类可以生成对象 类是对象的抽象
对象:是具体的事物
类:是对对象的抽象(抽象 抽出像的部分)
先有具体对象,然后抽象各个对象象的部分,归纳出类通过类在认识其他对象
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("电影名\t导演\t主演\t时长");
for (int i = 0; i < ms.length; i++) {
Movie m = ms[i];
if (m == null) {
//一旦m == null 说明没有电影的对象了 遍历就结束
break;
}
// 打印电影的信息
System.out.println(m.movieName+"\t"+m.movieDrt+"\t"+m.movieMain+"\t"+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;
}
}
}