java 第三次做业

《Java技术》第三次做业

(一)学习总结

1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。
封装性是面向对象的第一大特性,所谓的封装性就是指对外部不可见,也就是说把代码封装到大括号中,只能访问本身内部的数据,外边的东西访问不了.
实现封装性的方法
属性封装:private 属性类型 属性名;
方法封装:private 方法返回值 方法名称(参数){}
例如java

class Data {
    private String year;
    private String month;
    private String day;
}

2.阅读下面程序,分析是否能编译经过?若是不能,说明缘由。
(1)git

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.计算工具this

  • 程序设计思路:编写一个计算类,把半径、高、母线、体积、表面积进行封装,用setter和getter获得。编写一个测试类,产生独立对象并实例化(给出几个不一样的圆柱体、圆锥体和球体的尺寸),能够用对象数组,将获得的体积和表面积分别加起来,求累加和。在再该测试类中随机产生三个float型的数,让用户分别求出圆柱体、圆锥体和球体的体积和表面,并调用计算类,判断用户的回答正确与否。
  • 实验问题分析:
    问题1:不会随机产生大于1的float型的数
    解决方案:先随机产生一个0到100之间的int型的数,再乘以0.1。.net

(三)代码托管

  • 码云commit历史截图

(四)学习进度条

代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 100/100 20/20 学习了数组和方法
第5周 200/300 30/50 学习了String类和StringBuffer类
第6周 800/1100 40/90 学习了this、static关键字,Singleton模式
相关文章
相关标签/搜索