Java第三次做業——面向對象基礎(封裝)

(一)學習總結git

1.什麼是面向對象的封裝性,Java中是如何實現封裝性的?試舉例說明。數據庫

面向對象的封裝就是把對象的數據和方法封裝在一塊兒構成一個類,用setter和getter來完成。編程

例如:設計模式

public int getYear() {
    return year;
}
public void setYear(int year) {
    this.year = year;
}
public int getMonth() {
    return month;
}
public void setMonth(int month) {
    this.month = month;
}
public int getDay() {
    return day;
}
public void setDay(int day) {
    this.day = day;
}

2.閱讀下面程序,分析是否能編譯經過?若是不能,說明緣由。數組

(1)dom

class A{
private int secret = 5;
}
public class Test{
public static void main(String args[]){
    A a = new A();
    System.out.println(a.secret++);
}
}

不能,沒有對serect用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爲非靜態,應將其改成靜態修飾符測試

3 . 使用類的靜態變量和構造方法,能夠跟蹤某個類建立的對象個數。聲明一個圖書類,數據成員爲編號,書名,書價,並擁有靜態數據成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,則編號自動遞增(利用靜態變量和構造方法實現)。下面給出了測試類代碼和Book類的部分代碼,將代碼補充完整。this

class Book{
     int bookId;
     String bookName;
      double price;
// 聲明靜態變量

//定義靜態代碼塊對靜態變量初始化

//構造方法

 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;
}  
//定義方法求圖書總冊數

//重寫toString方法

}
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());
    }
}   
}

完整的程序爲:

class Book{
      int bookId;
     String bookName;
     double price;
     static int booknum;// 聲明靜態變量
static{
  booknum=1000;
     } //定義靜態代碼塊對靜態變量初始化

public Book(){
    
}
public Book(String bookName,double price){
    this.bookName=bookName;
    this.price=price;
    bookId=booknum;
    booknum++;
}//構造方法

 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(){
    int num=0;
    num=booknum-1000;
    return num;
}//定義方法求圖書總冊數
public String toString() {
    return "圖書編號爲:" + bookId + ", 圖書名爲:" + bookName + ", 圖書價格爲:" + price;
}
//重寫toString方法 
}
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.什麼是單例設計模式?它具備什麼特色?用單例設計模式設計一個太陽類Sun。

單例設計模式須要保證在整個程序運行期間針對該類只存在一個實例對象。

class Sun{
    private static Sun instance=new Sun();
    private Sun(){
    
    }
    public static Sun getInstance(){
        return instance;
    }
}
public class Test{
    public static void main(String []args){
        Sun s1=Sun.getInstance();
        Sun s2=Sun.getInstance();
        System.out.println(s1==s2);
    }
}

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

str地址沒有改變,只是傳遞了值,指向的還是「你好」,ch[0]='W',傳遞了地址。

6.其餘須要總結的內容。

一個方法不能修改一個基本數據類型的參數

一個方法能夠改變一個對象的參數狀態

一個方法不能讓對象參數引用一個新的對象

靜態方法用static修飾的成員方法可經過類名直接調用,但不能調用類的非static屬性和方法

(二)實驗總結

1.程序設計思路:設計一個日期類,用於記錄年、月、日,日期輸出格式爲xxxx-xx-xx,而後設計一個職工類,對職工的屬性進行定義:職工號,姓名,性別,生日,工做部門,參加工做時間。生日及參加工做時間調用日期類方法。設計一個部門類,定義屬性:部門編號,部門名稱,經理。設計一個測試類,用對象數組建兩個部門,10個職工,每一個部門有五個職工。

問題1:

public Employee(int no,String name,String sex,Date birth,String dept,Date start){
    this.no=no;
    this.name=name;
    this.sex=sex;
    this.birth=birth;
    this.dept=dept;
    this.start=start;
}

緣由:職工表裏調用日期類不知道應該怎麼調用

解決方案:經過問老師及同窗,知道了能夠直接定義來調用定義生日和參加工做時間爲Date。

private Date birth;
private Date start;

問題2:

Employee emp1[] = new Employee[]{
            new Employee(001,"張三","男",new Date (1995,01,12),"技術部",new Date(2014,10,30)),
            new Employee(002,"李四","男",new Date (1991,02,11),"技術部",new Date(2012,05,30)),
            new Employee(003,"李莉","女",new Date (1993,10,15),"技術部",new Date(2015,06,25)),
            new Employee(004,"王強","男",new Date (1987,03,10),"技術部",new Date(2010,03,30)),
            new Employee(005,"趙華","女",new Date (1989,05,12),"技術部",new Date(2011,07,01)),
    };
    Employee emp2[] = new Employee[]{
            new Employee(006,"馬強","男",new Date (1988,07,18),"人事部",new Date(2011,10,12)),
            new Employee(007,"王紅","女",new Date (1992,11,20),"人事部",new Date(2017,03,30)),
            new Employee(010,"陳飛","男",new Date (1994,06,19),"人事部",new Date(2014,04,30)),
            new Employee(011,"李琦","女",new Date (1995,01,15),"人事部",new Date(2014,04,01)),
            new Employee(012,"張輝","男",new Date (1985,11,12),"人事部",new Date(2008,10,01)),
    };

緣由:不知道應該怎麼用對象數組

解決方案:剛開始寫的直接是數組形式的,後來同窗告訴才知道那不是對象數組,又看了老師的課件,得以改正。

2.設計一個計算工具類,要求:

程序設計思路:先設計一個計算類,定義方法來求球的體積和表面積,圓柱體的體積和表面積,圓錐體的體積和表面積,在設計一個測試類給出幾個不一樣的圓柱體,圓錐體,球體的尺寸,用計算工具類分別求它們體積的累加和與表面積的累加和。再設計一個測試類,隨機產生球,圓柱、圓錐體的尺寸,用戶輸入它們的體積和表面積面積,若用戶回答正確,輸出xxx的xx回答正確,若錯誤,輸出xxx的xx回答錯誤,並輸出正確答案。

問題1:

public double area(){
    c=r * r * Math.PI * 4;
    return c;
}
public double area1(){
    cc=r * Math.PI * 2 * (l+r);
    return cc;
}
public double area2(){
    zc=r * Math.PI * (l+r);
    return zc;
}
public double volume(){
    s=r * r * r * Math.PI * 4 / 3.0;
    return s;
}
public double volume1(){
    cs=r * r * Math.PI * h;
    return cs;
}
public double volume2(){
    zs=r * r * Math.PI * h / 3.0;
    return zs;
}

緣由:不知道在計算類裏應該怎麼進行計算

解決方案:後來經過問同窗知道在類裏能夠定義方法來計算表面積體積,就在計算類裏定義了方法。

問題2:

Random rand=new Random();
    double banjing= Gongju.round(rand.nextDouble(),2);
    double gao= Gongju.round(rand.nextDouble(),2);
    double mu= Gongju.round(rand.nextDouble(),2);
    Gongju gongju=new Gongju(banjing,mu,gao);

緣由:在產生隨機數是不知道應該怎麼寫

解決方案:剛開始覺得有三個隨機數,這三個隨機數應該在一條語句裏,後來問了同窗,知道了應該寫三條語句。

3.用面向對象編程思想完成評分系統

程序設計思路:建立一個類,定義屬性:編號,姓名,得分,最終得分,寫出方法分別計算最高分,最低分,最終得分。在測試類中完成打分功能,每位選手打分完畢後輸出:去掉一個最高分xx,去掉一個最低分xx最終得分xxx,全部打分完以後,按成績降序輸出。

問題1:

Scanner in=new Scanner(System.in);
    System.out.println("請輸入分數");
    for(int i=0;i<pingfen.length;i++){
        System.out.println("輸入第"+(i+1)+"我的的分數");
        for(int j=0;j<score.length;j++){
            score[j]=in.nextInt();
            
    }
        p[i]=Pingfen.grade(score);
        System.out.println("去掉一個最高分:"+ Pingfen.max(score) +", 去掉一個最低分:"+ Pingfen.min(score) +
                ","+ (i+1) +"號選手最終得分:"+Pingfen.grade(score));

緣由:不知道應該用哪一個數組把最大最小值調用過來

解決方案:在試過屢次之後,及同窗的幫助,直接調用最終成績就是已經把那些調用了

(三)[代碼託管](https://git.oschina.net/hebau_cs15/Java-CS02yyh

碼雲commit歷史截圖

相關文章
相關標籤/搜索