Day2 Java学习日记

Day2 2019.10.31#

叙述

学生管理系统,来管理学生
现实生活中存在的对像(学生,老师,宿舍)

  1. 观察—》抽取—》现实生活中存在的对像(看得到的,摸得到,能描述的)–
    分类–,抽像出这个类别的行为、特征----
    学生类别

    姓名 特征
    年纪 特征
    学习行为() 行为

    java
    class Student
    {
    String name; 属性
    int age;属性
    public void show() 方法
    {
    system.out.println(“我叫”+name);
    }
    }

    写类不是最终的目的,

    new Student(“张三”,10);
    new Student(“张1”,12);
    new Student(“张2”,10);
    new Student(“张3”,10);

二维数组

1.二维表数组
2.数组的数组

类就是一个模板,有了这个模板才能创建对象。
抽象的数据类型,用来描述某一类具有相同特性的对象。

封装

-隐藏实现细节
-为用户提供统一界面(get()和set()方法)
-增强可维护性

  • 1.一般类中的方法提供private属性,public方法
    2. 提供无参构造方法

this:指向当前类的对象

构造方法

  • 每个类都有构造方法。
  • 如果程序员在定义类时没有定义构造方法的话,Java将自动为该类添加一个公开的空参空实现的构造方法。
    如果定义了一个有参数的构造方法的时候,要自己再定义一个无参的构造方法。

方法调用

  • 方法直接允许相互调用,不需要知道对方方法的具体实现,提高了效率。
  • 1.类Student 的方法a()调用Student类的方法b(),直接调用
  • 2.类Student的方法a()调用类Teacher的方法b(),先创建类对象,然后使用“.”调用

方法的重载

  • 重载,它是一种静态多态(在生成.class文件时,已确定了调用哪个方法)
  • 在一个类内部,方法名相同
  • 参数类型一定不同
  • 返回值可以相同也可以不同
    ----方法的重载是一种静态的重载----

构造器

  • 构造器就是和类名相同但无返回类型的方法。用于当前或某一对象的实例化,并将当前或某一对象返回。要得到一个类的实例时,往往是要运行其构造函数的。

交换

  • 完成两个数的交换
  • 基本数据类型,完成的是值的传递
  • 参数是引用类型,它传的是地址

代码如下:

/**
 * 学生的姓名,年龄
 * @author FDL
 *
 */
public class Student {
	private String name;
	private int age;
	

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}

  /**
   * 构造方法重载,无参
   */
	public Student() {
		super();
	}

	/**
	   * 构造方法重载,有参
	   */
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		getAge();
		this.age = age;
	}


	

}

/**
 * 测试交换
 * @author FDL
 *
 */
public class TestStudent {


	public static void main(String[] args) {
		Student stu=new Student("王为峰", 12);
		
		TestStudent testStudent=new TestStudent();
	testStudent.change(stu);//也就是stu和stu2指向同一片内存区域,当stu2改变值 时,stu在取值就得到改变后的值
	System.out.println(stu);
		 
		 System.out.println();

	}

	public void change(Student stu2) //对像方法, 参数是引用类型,它传的是地址,也就是stu和stu2指向同一片内存区域
	{
		stu2.setName("wangwei_feng");
		stu2.setAge(21);
		
	}
}

第二天作业分析

动物特性的面向对象描述项目

一.问题描述

  • 1.狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候,会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声;
  • 2.猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时,会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声;
  • 3.青蛙是一种两栖动物(既是水生动物也是陆生动物),既不是哺乳类的也不是肉食性的,属于卵生。当青蛙情绪好的时候,会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”;

二.问题分析

1.首先需要抽取问题描述中对象
2.分析每个对象所具有的特征
3.分析每个对象所发出的动作
4.从这些对象的特征中,抽取类的属性和方法
5.分析类之间的关系,画出类结构图

三.难点分析

抽象类和对象的基本方法:

  • 1.抽取对象的基本的方法:找出句子中所使用的名词
    例如:在句子“小猫喵喵叫”中,我们能够确定一个对象:猫;
  • 2.确定对象发出的行为动作的基本的方法:找出句子中的动词
    例如:“旺旺叫”、“喵喵叫”都属于对象发出的动作;
  • 3.确定对象的属性或者特征的基本的方法:找出句子中的形容词
    例如:“水生的”“陆生的”“两栖的”等等;
  • 4.“是”的关系一般抽象为继承
    例如:狗是一种动物,意味着:“狗”类 继承自“动物”类;
  • 5.“有”的关系一般抽象为类的属性
    例如:动物都有情绪,意味着:“情绪”是“动物”类的一个属性;

代码如下:

Animal.java

package FDL02;

public abstract class Animal {
	protected boolean mammal=true; // 哺乳动物
	protected boolean carnivorous=true; //食肉动物
	public static final int scared=0; //情绪不好
	public static final int comforted=1; //情绪好
	protected int mood=comforted;

	public boolean ismammal() {
		return (mammal);
	}

	public boolean iscarnivorous() {
		return (carnivorous);
	}
	abstract String SayHello();
	abstract String SayHello(int moodval);
	public void setMood(int newValue)
	{
		mood=newValue;
		 
	}
public int getMood()
	{
		return(mood);
};

}

LandAnimal.java

package FDL02;

public interface LandAnimal {
	public int getNumberOfLegs();
}

WaterAnimal.java

package FDL02;

public interface WaterAnimal {
	 public boolean isGillFlag();//返回是否有腮
 public boolean isLaysEggs();//返回是否产卵

}

Cat.java

package FDL02;

public class Cat extends Animal implements LandAnimal{
	private int numberOfLegs = 4;

	public String SayHello() {
		return "喵喵叫";
	};

	public String SayHello(int moodval) {
		this.setMood(moodval);
		switch (mood) {
		case scared:
			return ("嘶嘶");
		case comforted:
			return ("咕噜咕噜");
		}
		return ("喵喵叫");
	}

	public int getNumberOfLegs() {
		return numberOfLegs;
	}

}

Dog.java

package FDL02;

public class Dog extends Animal implements LandAnimal{
	private int numberOfLegs = 4;

	public String SayHello() {
		return "摇摇尾巴";
	};

	public String SayHello(int moodval) {
		this.setMood(moodval);
		switch (mood) {
		case scared:
			return ("呜呜叫");
		case comforted:
			return ("汪汪叫");
		}
		return ("摇摇尾巴");
	}

	public int getNumberOfLegs() {
		return numberOfLegs;
	}

}

Frog.java

package FDL02;

public class Dog extends Animal implements LandAnimal{
	private int numberOfLegs = 4;

	public String SayHello() {
		return "摇摇尾巴";
	};

	public String SayHello(int moodval) {
		this.setMood(moodval);
		switch (mood) {
		case scared:
			return ("呜呜叫");
		case comforted:
			return ("汪汪叫");
		}
		return ("摇摇尾巴");
	}

	public int getNumberOfLegs() {
		return numberOfLegs;
	}

}

Main.java

package FDL02;

import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Dog dog = new Dog();
		Cat cat = new Cat();
		Frog frog = new Frog();
		System.out.println("~欢迎光临动物园~ ");
		for (;;) {
			System.out.println("请输入动物名称:dog,cat或者frog ,退出exit!");
			String name = new String();
			@SuppressWarnings("resource")
			Scanner sc = new Scanner(System.in);
			name = sc.next();
			switch (name) {
			case "dog":
				System.out
						.println("该动物是陆生动物,它有" + dog.getNumberOfLegs() + "条腿");
				System.out.println("狗通常情况下,跟人的打招呼方式为:" + dog.SayHello());
				break;
			case "cat":
				System.out
						.println("该动物是陆生动物,它有" + cat.getNumberOfLegs() + "条腿");
				System.out.println("猫通常情况下,跟人的打招呼方式为:" + cat.SayHello());
				break;
			case "frog":
				if (frog.isLaysEggs() && frog.isGillFlag())
					System.out.println("该动物是陆生动物,它有" + frog.getNumberOfLegs()
							+ "条腿。" + "有腮" + "," + "产卵");
				System.out.println("青蛙通常情况下,跟人的打招呼方式为:" + frog.SayHello());
				break;
			case "exit":
				System.out.println("再见!");
				System.exit(0);
			default:
				System.out.println("输入有误 !请重新输入!");
			}
			System.out.println("请输入动物的心情:1-心情好,2-心情不好");
			int i;
			@SuppressWarnings("resource")
			Scanner sc1 = new Scanner(System.in);
			i = sc1.nextInt();
			switch (i) {
			case 1:
				System.out.println("它心情是:心情好");
				break;
			case 2:
				System.out.println("它心情是:心情不好");
				break;
			default:
				System.out.println("输入有误 !请重新输入!");
			}
			switch (name) {
			case "dog":
				if (i == 1) {
					System.out
							.println("狗心情好:" + dog.SayHello(Animal.comforted));
				} else if (i == 2) {
					System.out.println("狗心情不好:" + dog.SayHello(Animal.scared));
				} else {
					System.out.println("输入错误!");
				}
				break;
			case "cat":
				if (i == 1) {
					System.out
							.println("猫心情好:" + cat.SayHello(Animal.comforted));
				} else if (i == 2) {
					System.out.println("猫心情不好:" + cat.SayHello(Animal.scared));
				} else {
					System.out.println("输入错误!");
				}
				break;
			case "frog":
				if (i == 1) {
					System.out.println("青蛙心情好:"
							+ frog.SayHello(Animal.comforted));
				} else if (i == 2) {
					System.out
							.println("青蛙心情不好:" + frog.SayHello(Animal.scared));
				} else {
					System.out.println("输入错误!");
				}
				break;
			default:
				System.out.println("输入有误 !请重新输入!");
				break;
			}
		}

	}

}

你可能感兴趣的:(Day2 Java学习日记)