Java第三次作业——面向对象基础

(一)学习总结

1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。

封装性是面向对象的第一大性,所谓的封装性起保护作用是对外部不可见的;
只要是被封装的属性必须通过setter和getter方法设置和取得

属性封装;private 属性类型 属性名称;
方法封装;private 方法方法返回值 方法名称(参数列表){}
  private String name;
  private int age;
  public void tell(){
     System.out.printin("姓名:"+getName()"年龄:"+getAge());
  }
  public String getName(){
		return name;
	}
	public void setName(int n){
		name=n;
	}
	public int getAge(){
		return age;
	}
	public void  setAge(String a){
		age=a;
	}

 public class zuoye{
   public static void main(String args[]){
      Person per=new Person();
      per.name="小明";
      per.age=21
      per.tell();
}

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是封装性不可直接使用
需要给secfret创建setter和getter.

(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是非静态常量,内存内没有存入x的值
加static关键字 使"static int x = 50;"

3.使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。


   public class Book {
	int bookId;
    String bookName;
    double price;
    static int i=1000;             // 声明静态 变量
                                   //定义静态代码块对静态变量初始化
    public Book(String bookName,double price) {
    	i++;
        this.bookName=bookName;
        this.price=price;
        bookId=i;
    }                                                  //构造方法
    
     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 i-1000;
    }
    public String toString()                   //重写toString方法
    {
        return  
                "\t 书名:" + this.getBookName() + "\n" + 
                "\t 价格:" + this.getPrice() + "\n" +
                "\t 编号:" + bookId+ "\n";
    }
   
   
    
}
public class zuoye{
    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。

单个类在使用过程中只有一个实例;
单例类是有自己创建这个实例;
同时为所有对象提供这一实例。

class Sun{
private static Sun instance = new Sun() ;
private Sun(){ 

}
public static Sun getInstance(){
    return instance ;
}
public void printf(){
   System.out.println("Hello World!");
}
public class zuoye{
  public static void main(String arg[]){
    Sun s1=Sun getInstance();
    Sun s2=Sun getInstance();
     s1.print()
     s2.print()
}
};

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';
    }
}

运行结果为:

Java中String型变量传参只传了变量中的内容;
传递到change方法中不能改变空间存放内容。

6.自我总结

每次写作业都觉得好难,但是总是能从中收获点什么,对于新学的东西比如说这次面对对象的封装性理解了不少,但是一加上以前学的内容就很愁。
我争取把新学的一点一点啊积累学会,对于以前不懂得也慢慢赶上去。

(二)实验总结

1.类的设计

程序设计思路 利用封装性setter和getter 依次写出日期类、职工类和部门类
再利用方法写出测试类 在以上三个类中赋值。
问题 不理解lenght的使用总是出错;
会定义结构 但不会根据结构取出数据。
解决方法 测试类中不用lenght 直接一个个定义 一个个赋值

2.计算工具类设计

程序设计思路 利用封装性setter和getter 提供球 圆柱的计算方法 同时定义球和圆柱的体积之和及表面积之和
再编写测试类直接显示出结果

(三)代码托管

链接:https://git.oschina.net/hebau_cs15/Java-CS02lcx.git

(四)学习进度条

代码行数 学习时间 本周学习内容
第2-4周 150 /200 20 学习了...
第5周 200/300 25 学习了数组的使用构造函数 String类等
第6周 300/500 30 学习了面向对象的封装性中的许多内容 如secret类 getter和setter类等
posted @ 2017-04-06 19:19  我爱学习86  阅读(540)  评论(1编辑  收藏  举报