構造方法是用於對對象初始化的方法,當新對象被建立的時候,構造函數會被調用。
每個類都有構造函數。在程序員沒有給類提供構造函數的狀況下,Java編譯器會爲這個類建立一個默認的構造函數。
構造函數的重載是函數名與類名相同,參數類型不一樣,參數不一樣。
1.構造方法的名稱必須與類名一致
2.構造方法的聲明處不能有任何返回值類型的聲明
3.不能在構造方法中使用return
4.當本身聲明構造方法後,系統再也不建立默認的無參構造方法
下面的程序是否能夠經過編譯?爲何?java
public class Test { public static void main(String args[]) { Foo obj = new Foo(); } } class Foo{ int value; public Foo(int intValue){ value = intValue; } }
不能經過編譯,由於沒有無參構造方法,類中只定義了有參構造方法,此時編譯器再也不創建默認的無參構造方法。git
public class Test { public static void main(String[] args) { MyClass[] arr=new MyClass[3]; arr[1].value=100; } } class MyClass{ public int value=1; }
編譯報錯,只聲明的對象數組,沒有實現對象實例化,應該對數組裏的每一個對象元素,經過new構造方法進行實例化程序員
public class Test { public static void main(String[] args) { Foo obj1 = new Foo(); Foo obj2 = new Foo(); System.out.println(obj1 == obj2); } } class Foo{ int value = 100; }
false,由於比較的是兩個對象的引用地址,兩個對象都是經過new開闢的不一樣的新的空間。數據庫
public class Time { private int year,month,day; //字段用private隱藏起來 public Time(){ } public Time(int year,int month,int day){ this.year=year; this.month=month; this.day=day; } public int getYear() { //經過get,set方法讀取隱藏數據 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; } public String toString( ){ return year+"-"+month+"-"+day; } }
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字段是private私有的,不能直接訪問操做。設計模式
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(); } }
mothod方法是static修飾的,只能訪問static修飾的字段,x不是。數組
書名,書價,並擁有靜態數據成員冊數記錄圖書的總數。圖書編號從1000開始,每產生一個對象,
則編號自動遞增(利用靜態變量和構造方法實現)。下面給出測試類代碼和Book類的部分代碼,將代碼補充完整。函數
class Book{ int bookId; String bookName; double price; // 聲明靜態變量 public static n; //定義靜態代碼塊對靜態變量初始化 static { n=0; } //構造方法 public Book(String bookName,double price ){ this.bookName=bookName; this.price =price ; n++; this.bookId=1000+n; } 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 int totalBook(){ return n; } //重寫toString方法 public string toString(){ return "編號"+bookld+「書名」+bookName+"價格"+"price "+"圖書總數目爲"+n; } } 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()); } } }
static的兩個經常使用操做,統計該類的對象總數,實現自動編碼。學習
單例模式:保證一個類在使用過程當中,只有一個實例。
特色:這個類永遠只有一個實例。測試
class Sun{ private Sun instance = new Sun(); private Sun(){ } public static Sun getInstance(){ return instance; } }
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一開始將本身的引用複製給了局部str,可是局部str又引用了hello,當函數結束調用後,局部str釋放,沒有涉及遠str的改動;
字符數組和c原理相同,經過傳入地址,直接在地址上進行修改;this
在裁判類中聲明一個選手類,在測試類中經過構造方法引用到選手對象,在裁判對象裏實現對選手對象的操做。
沒什麼要注意的,定義一個方法,當條件都合法的時候,返回true,不然返回false,若是還想知道哪一個條件不合法,能夠在判斷結構裏直接輸出提示,也能夠返回
特定數值,而後在主方法裏,經過返回值判斷哪一個條件不合法。
個人思路沒有改變原字符串,而是在原字符串裏一段一段枚舉去找合法的子串,枚舉的長度是要找子串的長度,從第一個字母開始找,若是這段是,則從這段後的字符開始再找(i+length),若是不是,從下一個字符判斷(i++)。
用split方法,將主串拆分;
首字母變大寫的實現方法有不少,我是先將字符串變成了字符數組,而後改變首字母,再經過構造方法變回字符串。
統計數量: 用lastIndexOf方法找到最後出現點的位置,而後截取後面的子串,兩層循環遍歷,內層:先到第一個不爲空的字符串,記錄,變爲空,而後找到下面
全部相同的字符串,記錄,變空,最後輸出數目;外層:當數組全爲空時退出。
time類沒有什麼好說的,tostring方法輸出規定格式;
職員類:字段中有時間對象和部門對象;
部門類: 字段中有時間對象,項目經理(職員對象),和職員數組(包括了項目經理);
測試類:以部門對象爲主要對象,外層循環實現部門對象,內層循環實現職員對象,第一個職員對象做爲部門經理,最後職員對象數組傳給部門對象;
爲了驗證明現是否正確,遍歷了全部部門以及部門中的職員;相關查詢操做:總的來講,先遍歷部門,在部門中職員,由於部門中有職員對象的引用,職員對象中
也有部門對象引用,能夠經過部門對象找到要找的職員,也能夠經過職員找到部門,或者他的經理等等,查詢很方便,在程序中我是查詢的職員編號,而後輸出了該職員的全部信息,包括他的部門和經理。