《Java技术》第三次作业
(一)学习总结
1.书中对面向对象封装性的定义为:指把对象的属性和行为看成一个密不可分的整体,把不需要让外界知道的信息隐蔽起来。简单来说,就是定义的一些对象,只有在本类中才可以使用,在外界是不可以访问和调用的。
Java中通过使用private和public声明来区别私有和公由,例如:
class setting{private int a=1;public int b=1;
}
public class Test {public static void main(String[] args){setting get;int c,d;c=get.a;d=get.b;}
}
这段代码是不能通过编译的,会提示“a不可视”,即"a"不能被调用:
2.阅读下面程序
(1)如代码:
class A{private int secret = 5;
}
public class Test{public static void main(String args[]){A a = new A();System.out.println(a.secret++);}
}
此段代码不能通过编译,提示“A.secret不可视”,因为封装性的缘故,在Test类的main()方法中是不能调用".secret"的。
(2)如代码:
public class Test{int x = 50;static int y = 200;public static void method(){System.out.println(x+y);}public static void main(String args[]){Test.method();}
}
此段代码不能通过编译,因为"x"为非静态变量,不能对非静态变量进行静态引用。
3.修改后的代码如下:
class Book{static int bookId;String bookName;double price;// 声明静态 变量static int count;//定义静态代码块对静态变量初始化static {count=0;bookId=1000;}//构造方法public Book(){}public Book(String bookName,double price) {this.bookName=bookName;this.price=price;count++;} public int getBookId(){return ++bookId;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}//定义方法求图书总册数public static int totalBook(){return count;}//重写toString方法public String toString(){return "书名为:"+getBookName()+"图书编号为:"+getBookId()+",价格为:"+getPrice();}
}
public class Test{public static void main(String args[]){ Book[] books = {new Book("c语言程序设计",29.3),new Book("数据库原理",30),new Book("Java学习笔记",68)};System.out.println("图书总数为:"+ Book.totalBook()); for(Book book:books){System.out.println(book.toString());}}
}
4. 单例设计模式只能有自己创建的唯一一个实例,并且必须给所有其他对象提供这一实例。
class Sun{private static Sun instance = new Sun() ;private Sun(){}public static Sun getInstance(){return instance ;}
}
5.如下代码:
public class Test {String str = new String("你好 ");char[] ch = { 'w','o','l','l','d' };public static void main(String args[]) {Test test = new Test();test.change(test.str, test.ch);System.out.print(test.str);System.out.print(test.ch);}public void change(String str, char ch[]) {str = "hello";ch[0] = 'W';}
}
运行结果为:“你好 Wolld”
为什么不为“hello Wolld”呢?原因很简单,通过调用传参,传递的为str字符串和ch[]字符数组的地址,所以修改字符数组,即为修改内容;而修改的字符串内容,可以理解为是在修改形参,并不影响实参的值,因为传递的是内容而不是地址。
6.使用构造方法后,我觉得很多的程序变的更加清晰,即使出错也可以很快地确认错误的位置,十分方便。还有就是感觉前边的知识不能忘啊,例如比较,比较double数值是十分重要的一个点,用到了很多次。
(二)实验总结
1.按照下列要求完成类的设计
(1)设计一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。
(2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。
(3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。
(4)设计一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。
- 程序设计思路:
(1)日期类:用set和get方法记录年月日即可;
(2)职工类:用set和get方法记录职工号、姓名、性别,并用Date(日期类)定义生日和工作时间,用Department(部门类)定义所属部门;
(3)部门类:用set和get方法记录部门编号、部门名称,并用Employee(职工类)定义经理;
(4)测试类:输入数据并输出。
2.设计一个计算工具类,要求:
(1)为用户提供几个常见的几何体面积和体积的算法(如球的体积和表面积,圆柱体的体积和表面积,圆锥体的体积和表面积)(可以学习使用static关键字)
(2)设计一个测试类,给出几个不同的圆柱体,圆锥体,球体的尺寸,用计算工具类分别求它们体积的累加和与表面积的累加和。
(3)设计一个测试类,随机产生球,圆柱、圆锥体的尺寸,模拟考试,要求用户回答它们的体积和面积,并判断用户的回答是否正确
- 程序设计思路:
(1)输入类:将半径、高、母线长等参数输入;
(2)计算类:定义π的值为3.14,调用输入类中的参数,对所有公式进行计算;
(3)测试类:分两个部分。第一个部分,输入参数存入输入类,调用计算类中的公式进行计算;第二个部分,使用Random类生成随机数,即对用户出题,让用户输入答案,判断答案是否正确。 - 实验问题分析:
问题:在对用户出题时,结果无法判断。
原因:精度不同。
解决方案:将两个值四舍五入后判断内容是否一致,就可以进行判断了。
3.用面向对象编程思想完成评分系统
- 程序设计思路:
(1)定义各选手的信息变量和分数数组变量,并写出接口,方便用Arrays.sort()进行排序;
(2)输入各选手的信息,在排序后进行输出。
4.用面向对象编程思想编写猜拳游戏
- 程序设计思路:
(1)电脑类:定义电脑的名字,和分数,使用随机数生成电脑的出拳;
(2)选手类:与电脑类定义相同,只不过在出拳的方法不再使用随机数生成;
(3)游戏类:分别生成电脑类变量和选手类变量,输出规则,并决定是否开始,使用循环实现多次游戏,并定义变量记录游戏次数,每次游戏结束调用判断方法判断游戏结果,并询问是否继续;
(4)调用游戏类中的初始化和开始游戏的方法。
(三)代码托管
- 码云commit历史截图