发表于: 2017-08-05 03:47:59
8 1099
一 今天做的事情
完成了第五章的本章练习。(题目用蓝色加粗字体)
1.编写一个学生类,提供name、age、gender、phone、address、email成员变量,且为每个成员变量提供setter、getter方法。为学生类提供默认的构造器和带所有成员变量的构造器。为学生类提供方法,用于描绘吃、喝、玩、睡等行为。
代码如下:
public class EX1
{
public static void main(String[] args)
{
Student s = new Student("张小虎", 19 , '2' ,"110" , "虚空" , "no");
s.play();
System.out.println(s.name);
System.out.println(s.age);
System.out.println(s.gender);
System.out.println(s.phone);
System.out.println(s.address);
System.out.println(s.email);
}
}
class Student//类名首字母大写
{
String name ;//= "邱晓宇" ; //变量名首单词首字母小写,其余单词首字母大写
int age = 18 ;
char gender = '3' ;
String phone = "7758521" ;
String address = "幸福区希望路开心小区6666号" ;
String email = "1234@qq.com" ;
public Stdent(String name)//默认的构造器
{
this.name = name ;
}
public Student(String name , int age , char gender , String phone , String address , String email)
{//带所有成员变量的构造器
this.name = name ;
this.age = age ;
this.gender = gender ;
this.phone = phone ;
this.address = address ;
this.email = email ;
}
public void setName(String name)
{
this.name = name ;
}
public String getName()
{
return this.name;
}
public void setAge(int age)
{
this.age = age ;
}
public int getAge()
{
return this.age;
}
public void setGender(char gender)
{
this.gender = gender ;
}
public char getGender()
{
return this.gender;
}
public void setPhone(String phone)
{
this.phone = phone ;
}
public String getPhone()
{
return this.phone;
}
public void setAddress(String address)
{
this.address = address ;
}
public String getAddress()
{
return this.address;
}
public void setEmail(String email)
{
this.email = email ;
}
public String getEmail()
{
return this.email;
}
public void eat()
{
System.out.println("吃吃吃!");
}
public void drink()
{
System.out.println("喝喝喝!");
}
public void play()
{
System.out.println("玩玩玩!");
}
public void sleep()
{
System.out.println("和谁睡啊?");
}
}
写程序的时候感觉到了看书上的程序和自己写的程序的差别:书上的程序一般没有错误,自己的程序一般有错误。编译有错误没什么,多编,多遇到错误多解决错误就行了。下面是一个比较,相当低级的错误:
查了半天查到构造器的名字拼错了。低级幼稚。
2.利用第1题定义的Student类,定义一个Student[]数组保存多个Student对象作为通讯录数据,程序可通过name、email、address查询,如果找不到数据,则进行友好提示。
分析:数组的元素的数据类型必须一致,而我上面定义的age、gender和其余的变量一共用了三种数据类型。怎么办?只保存String类型的对象。感觉这个用数据库会好一点。另外感觉题目中的数组是二维数组,一行为一条数据,可以设置name、email、address为关键字,通过关键字来查询。
如不用后面的数据库用前面的知识来解题的话没有多大意义:定义一个二维数组,手动给数组赋值,查询就是判断在name这一列有没有符合的,然后返回结果。不用写就感觉很无聊。跳过。
3.定义普通人、老师、班主任、学生、学校这些类,提供适当的成员变量、方法用于描述其内部数据和行为特征,并提供主类使之运行。要求有良好的封装性,将不同的类放在不同的包下面,增加文档注释,生成API文档。
做的时候感觉很简单,但是真正做的时候碰到了各种各样的问题。
定义这些类很快就完成了,题目要求将不同的类放在不同的包下面,这点难到我了。没办法,题目就是产品经理,人家就要实现这个功能,那就做吧。重新翻看了前面的package和import,一次一次得编译错误,一次一次地修改,直到在CMD运行时打印出“按任意键继续...”,很有屡败屡战的味道。在程序里我用到了继承,班主任继承老师,老师继承普通人,如果父类的包没有做好,在编译子类的时候就不能通过。
直到最后,运行主类时出现了这个错误:
找不到或无法加载主类。自从配置好环境变量后就很少,基本没有,从来没有看到这个错误了。在网上各种搜啊:
完美解决,源程序如果有包,那运行(javac)要加上包名。
做完这些有了做项目的感觉,每个实现不同功能的类打包封装,程序模块化处理。
希望师兄不要嘲笑我,尽管代码很少,尽管注释相当简陋,但是毕竟这是我第一次使用package。
主类代码:(代码略长不好截屏)
package maiclass;
import commomclass.Common;
import teacherclass.Teacher;
import classteacherclass.classTeacher;
import studentclass.Student;
import schoolclass.School;
/**
*需求:定义普通人、老师、班主任、学生、学校这些类,提供适当的成员变量、方法用于描述其内部数据和行为特征,
*并提供主类使之运行。要求有良好的封装性,将不同的类放在不同的包下面,增加文档注释,生成API文档。
*/
public class mainClass
{
public static void main(String[] args)
{
/**
*主类,创建了五个类的实例,并调用方法运行。
*/
Common people1 = new Common();
people1.work(7);
Teacher teacher1 = new Teacher();
teacher1.teaching();
teacher1.amusement();
classTeacher teacher2 = new classTeacher();
teacher2.admClass();
Student student1 = new Student();
student1.exam();
School school1 = new School();
school1.speak();
}
}
生成API文档:
4.改写第1题的程序,利用组合来实现类复用。
分析:告诉我吃喝玩睡这四个方法有什么可以复用的。。每个方法里就只有一句打印语句。果断跳过这题。当然作者的出发点是好的,让我们多练习练习组合复用。
5.定义交通工具、汽车、火车、飞机这些类,注意它们的继承关系,为这些类提供超过3个不同的构造器,并通过初始化块提取构造器中的通用代码。
分析:不用说我也知道得用到继承。作者你咋不出点间接继承的呢?间接继承个两次三次的。
程序写好编译一下跳出了12个错误,一个一个改,11,10,7,2,1,1,请按任意键继续...
代码:
public class EX5
{
public static void main(String[] args)
{
Transport tra = new Transport();
System.out.println("Transport类初始化数据:" + "满员人数=" + tra.fullNum + ",燃料=" + tra.fule + ",轮胎数=" + tra.wheel + ",颜色=" + tra.colour);
Car car1 = new Car(40,"法拉利");
System.out.println("Car类初始化数据:" + "满员人数=" + car1.fullNum + ",类型=" + car1.carType);
Train train1 = new Train(200 , "煤球" , false);
System.out.println("Train类初始化数据:" + "满员人数=" + train1.fullNum + ",燃料=" + train1.fule + ",是否准时=" + train1.onTime);
Plane plane1 = new Plane(100 , "地沟油" , 6 , 12);
System.out.println("Plane类初始化数据:" + "满员人数=" + plane1.fullNum + ",燃料=" + plane1.fule + ",轮胎数=" + plane1.wheel + ",空姐人数=" + plane1.waiterNum);
}
}
class Transport
{
int fullNum = 100 ;
String fule = "地沟油" ;
int wheel = 4 ;
String colour = "中国红" ;
public Transport()
{
}
public Transport(int fullNum)
{
this.fullNum = fullNum ;
}
public Transport(int fullNum , String fule)
{
this.fullNum = fullNum ;
this.fule = fule ;
}
public Transport(int fullNum , String fule , int wheel)
{
this.fullNum = fullNum ;
this.fule = fule ;
this.wheel = wheel ;
}
public Transport(int fullNum , String fule , int wheel , String colour)
{
this.fullNum = fullNum ;
this.fule = fule ;
this.wheel = wheel ;
this.colour = colour ;
}
}
class Car extends Transport
{
String carType = "SUV";
public Car(int fullNum , String carType)
{
super(fullNum);
this.carType = carType ;
}
}
class Train extends Transport
{
boolean onTime = false ;
public Train(int fullNum , String fule , boolean onTime)
{
super(fullNum , fule);
this.onTime = onTime ;
}
}
class Plane extends Transport
{
int waiterNum = 10 ;
public Plane(int fullNum , String fule , int wheel ,int waiterNum)
{
super(fullNum , fule , wheel);
this.waiterNum = waiterNum ;
}
}
二 明天做的事情:
开始第六章。
(感觉也不是明天了,现在已经是"明天了")。
评论