




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、package cn.itcast.bat;/* bat處理文件: bat處理文件就是可以一次性執行多個命令的文件。 為什么要學bat處理文件, 快速運行一個軟件我一般都會把軟件打包一個jar包。 jar雙擊可以運行僅對于圖形化界面的軟件起作用,對于控制臺的程序是不起作用的。對于控制臺的程序我們可以使用bat處理文件快速啟動一個項目。 如何編寫bat處理文件呢? 步驟: 編寫一個自定義的文本文件,然后把后綴名改成bat即可,然后把你所要執行的命令寫在bat處理文件中即可。 bat處理文件常用的命令:echo 向控制臺輸出指定的內容。echo off 隱藏echo off后面執行過的命令。 隱藏
2、當前行執行的命令。title 改變當前控制臺窗口的標題color 指定控制臺的背景顏色與前景顏色%注釋的內容%pause: 讓當前控制臺停留。%1%9: 給bat處理文件傳入參數。 */public class Demo1 public static void main(String args) System.out.println(哈哈.);package cn.itcast.copy;/* 對象的克隆 對象的淺克隆: 對象淺克隆要注意的細節: 1. 如果一個對象需要調用clone的方法克隆,那么該對象所屬的類必須要實現Cloneable接口。 2. Cloneable接口只不過是一個標識接
3、口而已,沒有任何方法。 3. 對象的淺克隆就是克隆一個對象的時候,如果被克隆的對象中維護了另外一個類的對象,這時候只是克隆另外一個對象的地址,而沒有把 另外一個對象也克隆一份。 4. 對象的淺克隆也不會調用到構造方法的。 對象的深克隆: */public class Demo1 public static void main(String args) throws Exception Address address = new Address(廣州);Person p1 = new Person(110,狗娃,address);Person p2 = (Person) p1.clone();
4、/clone() 克隆了一個對象。 = 狗剩;p2.address.city =長沙;System.out.println(p1:+p1);System.out.println(p2:+ p2);package cn.itcast.copy;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectO
5、utputStream;/*對象的深克隆: 對象的深克隆就是利用對象的輸入輸出流把對象先寫到文件上,然后再讀取對象的信息這個過程就稱作為對象的深克隆。ObjectInputStreamObjectOutputStream */public class Demo2 public static void main(String args) throws IOException, ClassNotFoundException Address address = new Address(廣州);Person p1 = new Person(110,狗娃,address);writeObj(p1);Pe
6、rson p2 =readObj();p2.address.city = 長沙;System.out.println(p1:+ p1);System.out.println(p2:+ p2);/再從文件中讀取對象的信息public static Person readObj() throws ClassNotFoundException, IOExceptionFileInputStream fileInputStream = new FileInputStream(F:obj.txt);/創建對象的輸入流對象ObjectInputStream objectInputStream = new
7、ObjectInputStream(fileInputStream);return (Person) objectInputStream.readObject();/先要把對象寫到文件上。public static void writeObj(Person p) throws IOException/建立一個文件 的輸出流對象FileOutputStream fileOutputStream = new FileOutputStream(F:obj.txt);/建立對象的輸出流ObjectOutputStream objectOutputStream = new ObjectOutputStr
8、eam(fileOutputStream);/把對象寫出objectOutputStream.writeObject(p);/關閉資源objectOutputStream.close();package cn.itcast.copy;import java.io.Serializable;class Address implements SerializableString city;public Address(String city)this.city = city;public class Person implements Cloneable,Serializable int id;S
9、tring name;Address address;public Person(int id, String name) this.id = id; = name;public Person(int id, String name, Address address) this.id = id; = name;this.address = address;System.out.println(=構造方法調用了=);Overridepublic String toString() return 編號:+ this.id+ 姓名:+ + 地址:
10、+ address.city;Overridepublic Object clone() throws CloneNotSupportedException return super.clone();package cn.itcast.factory;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import cn.itc
11、ast.reflect.Person;/*工廠設計模式就是用于產生對象 的。*/class Carclass BMW extends Carclass BSJ extends Carpublic class Demo1 public static void main(String args) throws Exception Person p = (Person) getInstance();System.out.println(p);/需求: 編寫一個工廠方法根據配置文件返回對應的對象。public static Object getInstance() throws Exception/讀
12、取配置文件BufferedReader bufferedReader = new BufferedReader(new FileReader(info.txt);/讀取第一行 : 讀取類文件的信息String className = bufferedReader.readLine();/通過完整類名獲取對應 的Class對象Class clazz = Class.forName(className);/獲取到對應的構造方法Constructor constructor = clazz.getDeclaredConstructor(null);constructor.setAccessible(
13、true);Object o = constructor.newInstance(null);/給對象設置對應的屬性值String line = null;while(line = bufferedReader.readLine()!=null)String datas = line.split(=);Field field =clazz.getDeclaredField(datas0);/設置可以訪問field.setAccessible(true);if(field.getType()=int.class)field.set(o, Integer.parseInt(datas1);else
14、field.set(o, datas1);return o;package cn.itcast.list;import java.util.Arrays;/* 內存泄露 需求:編寫一個類使用數組模擬堆棧的存儲方式。 堆棧存儲特點: 先進后出,后進先出。注意: 不再使用的對象,應該不要讓變量指向該對象,要讓該對象盡快的被垃圾回收期回收。 */class StackListObject elements;int index = 0 ; /當前的索引值public StackList()this.elements = new Object3;/添加內容public void add(Object o
15、)/添加元素之前應該要先檢查是否容量夠用。ensureCapcity();elementsindex+ = o;/出棧: 刪除集合的元素,并且返回。public Object pop()int tempIndex = -index;Object o = elementstempIndex;elementstempIndex = null; /讓該位置不再 引用著指定的對象,讓垃圾回收期趕快回收該垃圾。return o;/檢查當前的數組使用夠用。public void ensureCapcity()if(index=elements.length)/計算一個新的長度int newLength =
16、elements.length*2;elements = Arrays.copyOf(elements, newLength);/獲取當前的元素 個數public int size()return index;public class Demo1 public static void main(String args) StackList list = new StackList();list.add(狗娃);list.add(狗剩);list.add(鐵蛋);list.add(美美);int size = list.size();for(int i = 0 ; isize ; i+)Syst
17、em.out.println(list.pop();package cn.itcast.observer;/人 是要根據天氣做出相應的處理的。public class Emp implements WeatherString name;public Emp(String name) = name;/人是要根據天氣做出相應的處理的。 晴天,霧霾,刮風,冰雹,下雪public void notifyWeather(String weather)if(晴天.equals(weather)System.out.println(name+高高興興的去上班!);else if(霧霾.e
18、quals(weather)System.out.println(name+戴著消毒面具去上班!);else if(刮風.equals(weather)System.out.println(name+拖著大石頭過來上班!);else if(冰雹.equals(weather)System.out.println(name+戴著頭盔過來上班!);else if(下雪.equals(weather)System.out.println(name+戴著被子過來上班!);package cn.itcast.observer;public class Student implements Weather
19、String name;public Student(String name) super(); = name;public void notifyWeather(String weather)if(晴天.equals(weather)System.out.println(name+高高興興的去開學!);else if(霧霾.equals(weather)System.out.println(name+吸多兩口去上學!);else if(刮風.equals(weather)System.out.println(name+在家睡覺!);else if(冰雹.equals(wea
20、ther)System.out.println(name+在家睡覺!);else if(下雪.equals(weather)System.out.println(name+等下完再去上學!);package cn.itcast.observer;/訂閱天氣預報的接口public interface Weather public void notifyWeather(String weather);package cn.itcast.observer;import java.util.Random;public class WeatherMain public static void main(
21、String args) throws Exception /工人Emp e = new Emp(小明);Emp e2 = new Emp(如花);/學生Student s1 = new Student(狗娃);Student s2 = new Student(狗剩);WeatherStation station = new WeatherStation();station.addListener(e);station.addListener(e2);station.addListener(s1);station.addListener(s2);station.startWork();pack
22、age cn.itcast.observer;import java.util.ArrayList;import java.util.Random;/* 觀察者設計模式:觀察者設計模式解決的問題時當一個對象發生指定的動作時,要通過另外一個對象做出相應的處理。 需求: 編寫一個氣象站、一個工人兩個類,當氣象站更新天氣 的時候,要通知人做出相應的處理。 問題1: 氣象站更新了多次天氣,然后人才做一次的處理。 問題2: 目前氣象站只能通知一個人而已。問題3: 在現實生活中出了工人群體要關注天氣,其他 的群體也需要關注天氣觀察者設計模式的步驟:1. 當前目前對象發生指定的動作是,要通知另外一個對象做出
23、相應的處理,這時候應該把對方的相應處理方法定義在接口上。2. 在當前對象維護接口的引用,當當前對象發生指定的動作這時候即可調用接口中的方法了。 */氣象站public class WeatherStation String weathers = 晴天,霧霾,刮風,冰雹,下雪;/當前天氣String weather ;/該集合中存儲的都是需要收聽天氣預報的人ArrayList list = new ArrayList(); /程序設計講究低耦合-盡量不要讓一個類過分依賴于另外一個類。public void addListener(Weather e)list.add(e);/開始工作public
24、 void startWork() final Random random = new Random();new Thread()Overridepublic void run() while(true) updateWeather(); / 每11.5秒更新一次天氣 10001500for(Weather e : list)e.notifyWeather(weather);int s = random.nextInt(501)+1000; / 500try Thread.sleep(s); catch (InterruptedException e) e.printStackTrace();
25、.start();/更新天氣的 方法public void updateWeather()Random random = new Random();int index = random.nextInt(weathers.length);weather = weathersindex;System.out.println(當前的天氣是: + weather);package cn.itcast.reflect;/* 反射: 當一個字節碼文件加載到內存的時候,jvm會對該字節碼進行解剖,然后會創建一個對象的Class對象,把字節碼文件的信息全部都 存儲到該Class對象中,我們只要獲取到Class
26、對象,我們就可以使用字節碼對象設置對象的屬性或者調用對象的方法等操作.注意: 在反射技術中一個類的任何成員都有對應 的類進行描述。 比如: 成員變量(Field) 方法- Method類 */public class Demo1 Person p;public static void main(String args) throws ClassNotFoundException /Person p = new Person(110,狗娃);/推薦使用: 獲取Class對象的方式一Class clazz1 = Class.forName(cn.itcast.reflect.Person);Sys
27、tem.out.println(clazz1:+ clazz1);/獲取Class對象的方式二: 通過類名獲取Class clazz2 = Person.class;System.out.println(clazz1=clazz2?+ (clazz1=clazz2);/獲取Class對象的方式三 :通過對象獲取Class clazz3 = new Person(110,狗娃).getClass();System.out.println(clazz2=clazz3?+ (clazz2=clazz3);package cn.itcast.reflect;import java.lang.refle
28、ct.Constructor;/* 如何通過Class對象獲取構造方法。 */public class Demo2 public static void main(String args) throws Exception /獲取到對應的Class對象Class clazz = Class.forName(cn.itcast.reflect.Person);/通過Class對象獲取對應的構造方法/*Constructor constructors = clazz.getConstructors(); / getConstructors()獲取一個類的所有公共的構造方法for(Construct
29、or constructor : constructors)System.out.println(constructor);Constructor constructors = clazz.getDeclaredConstructors(); /獲取到一個類的所有構造方法,包括私有的在內 。for(Constructor constructor : constructors)System.out.println(constructor);*/*Constructor constructor = clazz.getConstructor(int.class,String.class); / ge
30、tConstructor 獲取單個指定的構造方法。Person p = (Person) constructor.newInstance(999,小城); / newInstance()創建一個對象System.out.println(p);*/獲取私有的構造函數Constructor constructor = clazz.getDeclaredConstructor(null);/暴力反射constructor.setAccessible(true);Person p =(Person) constructor.newInstance(null);System.out.println(p)
31、;package cn.itcast.reflect;import java.lang.reflect.Method;/* 通過Class對象獲取到對應的方法。 在反射技術中使用了Method類描述了方法的。 */public class Demo3 public static void main(String args) throws Exception /獲取到對應的Class對象Class clazz = Class.forName(cn.itcast.reflect.Person);/獲取到所有公共的方法/*Method methods = clazz.getMethods(); /
32、getMethods() 獲取所有 的公共方法而已。Method methods = clazz.getDeclaredMethods(); /獲取到所有的方法,但是不包含父類的方法。for(Method method : methods)System.out.println(method);*/Person p = new Person(110,狗娃);/*Method m = clazz.getMethod(eat, int.class);m.invoke(p, 3); /invoke 執行一個方法。 第一個參數:方法的調用對象。 第二參數: 方法所需要的參數。/執行私有的方法Method
33、 m =clazz.getDeclaredMethod(sleep,int.class);/設置訪問權限允許訪問m.setAccessible(true);m.invoke(null, 6);*/Method m = clazz.getMethod(sum, int.class);m.invoke(p,new int12,5,9);package cn.itcast.reflect;import java.lang.reflect.Field;/* 通過反射獲取對應的成員變量 在反射技術中使用了Field類描述了成員變量的。 */public class Demo4 public static void main(String args) throws Exception /獲取到對應的Class對象Class clazz = Class.forName(cn.itcast.reflect.Person);/獲取 到所有的成員變量/*Field
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業生產流程的數據優化管理
- 工業設計在智能制造業中的價值體現
- 工業自動化技術的創新與發展趨勢探討
- 工作中的健康保障勞動保護用品的作用及重要性分析
- 工業領域中的新能源技術革新與環保實踐
- 工業鍋爐高效低耗的節能減排技術
- 工程中的節能技術與設備應用
- 工作流程標準化與執行力推進
- 工程倫理在智慧城市建設中的作用研究
- 工程設計與數據分析的融合應用
- 海南省瓊海市2023-2024學年七年級下學期期末考試歷史試卷(含答案)
- 兒童樂園用工合同范本
- 小兒燙傷個案護理
- 山東省肥城市2025年化學高二下期末監測試題含解析
- 冶金天車作業安全培訓
- (重慶康德三診)2025年重慶市高三第三次聯合診斷檢測政治試卷(含答案解析)
- (人教版)2025年中考化學真題試題(含解析)
- 煤炭行業的企業戰略布局與資源整合考核試卷
- 醫保政策考試題庫及答案解析2025年(信息化應用篇)
- 2024年廣東省廣州市初中學業水平考試生物學試題(含答案)
- 檢驗科生物安全知識
評論
0/150
提交評論