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.日期類測試
2.計算工具this
實驗問題分析:
問題1:不會隨機產生大於1的float型的數
解決方案:先隨機產生一個0到100之間的int型的數,再乘以0.1。.net
代碼行數(新增/累積) | 學習時間(新增/累積) | 本週學習內容 | |
---|---|---|---|
目標 | 5000行 | 300小時 | |
第2-4周 | 100/100 | 20/20 | 學習了數組和方法 |
第5周 | 200/300 | 30/50 | 學習了String類和StringBuffer類 |
第6周 | 800/1100 | 40/90 | 學習了this、static關鍵字,Singleton模式 |