java 第三次作业
《Java技术》第三次作业
(一)学习总结
1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装性是面向对象的第一大特性,所谓的封装性就是指对外部不可见,也就是说把代码封装到大括号中,只能访问自己内部的数据,外边的东西访问不了.
实现封装性的方法
属性封装:private 属性类型 属性名;
方法封装:private 方法返回值 方法名称(参数){}
例如
class Data {
private String year;
private String month;
private String day;
}
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++);
}
}
不能编译通过,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();
}
}
不能通过编译,static声明的方法不能调用非static类型声明的属性
3 . 使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。
class Book{
private static int bookId;
private String bookName;
private double price;
// 声明静态变量
static int totalBook;
//定义静态代码块对静态变量初始化
static {
totalBook=0;
bookId=1000;
}
//构造方法
public Book(String bookName,double price){
this.bookName=bookName;
this.price=price;
totalBook++;
}
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 totalBook;
}
//重写toString方法
public String toString(){
return "编号:"+Book.bookId+++" 书名:"+this.bookName+" 价钱"+this.price ;
}
}
public class Test2{
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.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。
单例设计模式师确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
1,一个类只能有一个实例
2,自己创建这个实例
3,整个系统都要使用这个实例
太阳类
public class Sun {
private Sun() {
}
private static final Sun single = new Sun();
// 静态工厂方法
public static Sun getInstance() {
return single;
}
}
5.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。
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
理由:字符串的内容一旦声明是不可改变的,改变的只是其内存地址的指向,只是在栈内存中多了一个指针,改变的是堆内存的指向。而字符数组的内容可以改变。
(二)实验总结
1.日期类
- 程序设计思路:定义一个日期类,把year、month、day封装,用setter和getter得到。编写toString方法,输出格式为xxxx-xx-xx。定义一个职工类,把职工号、姓名、性别进行封装,用setter和getter得到,生日和参加工作时间调用日期类的toString方法,编写toString方法,输出以上信息。一个员工属于一个部门,在员工类中保存部门信息。定义一个部门类,把部门编号、部门名称进行封装,用setter和getter得到。一个人部门有一个经理,所以应在部门中保存经理信息。一个部门有多名员工,在部门中用对象数组保存多名员工的信息。编写测试类,产生独立对象并实例化,可以用对象数组,设置部门和部门经理的关系,设置员工和部门的关系,设置员工和日期的关系,调用各个类的toString方法进行输出。
2.计算工具
-
程序设计思路:编写一个计算类,把半径、高、母线、体积、表面积进行封装,用setter和getter得到。编写一个测试类,产生独立对象并实例化(给出几个不同的圆柱体、圆锥体和球体的尺寸),可以用对象数组,将得到的体积和表面积分别加起来,求累加和。在再该测试类中随机产生三个float型的数,让用户分别求出圆柱体、圆锥体和球体的体积和表面,并调用计算类,判断用户的回答正确与否。
-
实验问题分析:
问题1:不会随机产生大于1的float型的数
解决方案:先随机产生一个0到100之间的int型的数,再乘以0.1。![]()
(三)代码托管
- 码云commit历史截图
![]()
(四)学习进度条
| 代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
|---|---|---|---|
| 目标 | 5000行 | 300小时 | |
| 第2-4周 | 100/100 | 20/20 | 学习了数组和方法 |
| 第5周 | 200/300 | 30/50 | 学习了String类和StringBuffer类 |
| 第6周 | 800/1100 | 40/90 | 学习了this、static关键字,Singleton模式 |


浙公网安备 33010602011771号