Java的知识点31——封装拷贝、封装释放、实现放大器对声音的放大功能
生活随笔
收集整理的這篇文章主要介紹了
Java的知识点31——封装拷贝、封装释放、实现放大器对声音的放大功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
封裝拷貝、封裝釋放
package cn.dym;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;/*** 1.封裝拷貝* 2.封裝釋放* @author Administrator**/ public class FileUtils {public static void main(String[] args) {//文件到文件try {InputStream is = new FileInputStream("abc.txt");OutputStream os = new FileOutputStream("abc-copy.txt");copy(is,os);} catch (IOException e) {e.printStackTrace();}//文件到字節數組byte[] datas = null;try {InputStream is = new FileInputStream("p.png");ByteArrayOutputStream os = new ByteArrayOutputStream();copy(is,os);datas = os.toByteArray();System.out.println(datas.length);} catch (IOException e) {e.printStackTrace();} //字節數組到文件try {InputStream is = new ByteArrayInputStream(datas);OutputStream os = new FileOutputStream("p-copy.png");copy(is,os);} catch (IOException e) {e.printStackTrace();}}/*** 對接輸入輸出流* @param is* @param os*/public static void copy(InputStream is,OutputStream os) { try { //3、操作 (分段讀取)byte[] flush = new byte[1024]; //緩沖容器int len = -1; //接收長度while((len=is.read(flush))!=-1) {os.write(flush,0,len); //分段寫出} os.flush();}catch(FileNotFoundException e) { e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally{//4、釋放資源 分別關閉 先打開的后關閉close(is,os);}}// /** // * 釋放資源 // * @param is // * @param os // */ // public static void close(InputStream is ,OutputStream os) { // try { // if (null != os) { // os.close(); // } // } catch (IOException e) { // e.printStackTrace(); // } // // try { // if(null!=is) { // is.close(); // } // } catch (IOException e) { // e.printStackTrace(); // } // } /*** 釋放資源* @param ios*/public static void close(Closeable... ios) {for(Closeable io:ios) {try {if(null!=io) {io.close();}} catch (IOException e) {e.printStackTrace();}}}}try ...with...resource
package cn.dym; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;/*** try ...with...resource**/ public class FileUtils2 {public static void main(String[] args) {//文件到文件try {InputStream is = new FileInputStream("abc.txt");OutputStream os = new FileOutputStream("abc-copy.txt");copy(is,os);} catch (IOException e) {e.printStackTrace();}//文件到字節數組byte[] datas = null;try {InputStream is = new FileInputStream("p.png");ByteArrayOutputStream os = new ByteArrayOutputStream();copy(is,os);datas = os.toByteArray();System.out.println(datas.length);} catch (IOException e) {e.printStackTrace();}//字節數組到文件try {InputStream is = new ByteArrayInputStream(datas);OutputStream os = new FileOutputStream("p-copy.png");copy(is,os);} catch (IOException e) {e.printStackTrace();}}/*** 對接輸入輸出流* try ...with...resource* @param is* @param os*/public static void copy(InputStream is,OutputStream os) { try(is;os) { //3、操作 (分段讀取)byte[] flush = new byte[1024]; //緩沖容器int len = -1; //接收長度while((len=is.read(flush))!=-1) {os.write(flush,0,len); //分段寫出} os.flush();}catch(FileNotFoundException e) { e.printStackTrace();}catch (IOException e) {e.printStackTrace();}} }報錯:Variable resource not allowed here for source level below 9? ? 原因應該是版本問題
實現放大器對聲音的放大功能
package cn.dym; /*** 實現放大器對聲音的放大功能* @author Administrator**/ public class DecorateTest01 {public static void main(String[] args) {Person p=new Person();p.say();System.out.println("-------------");//裝飾Amplifier am=new Amplifier(p);am.say();} } interface Say{void say(); } class Person implements Say{//屬性private int voice=10;public void say() {System.out.println("人的聲音為:"+this.getVoice());}public int getVoice() {return voice;}public void setVoice(int voice) {this.voice = voice;} } class Amplifier implements Say{private Person p;Amplifier(Person p){this.p=p;}public void say() {System.out.println("人的聲音為:"+p.getVoice()*100);System.out.println("噪音。。。。。");} }模擬咖啡
package cn.dym; /*** 模擬咖啡* 1、抽象組件:需要裝飾的抽象對象(接口或抽象父類)* 2、具體組件:需要裝飾的對象* 3、抽象裝飾類:包含了對抽象組件的引用以及裝飾著共有的方法* 4、具體裝飾類:被裝飾的對象**/ public class DecorateTest02 {public static void main(String[] args) {Drink coffee =new Coffee();Drink suger =new Suger(coffee); //裝飾System.out.println(suger.info()+"-->"+suger.cost());Drink milk =new Milk(coffee);//裝飾System.out.println(milk.info()+"-->"+milk.cost()); milk =new Milk(suger);//裝飾System.out.println(milk.info()+"-->"+milk.cost());} } //抽象組件 interface Drink{double cost(); //費用String info(); //說明 } //具體組件 class Coffee implements Drink{private String name ="原味咖啡";@Overridepublic double cost() {return 10;}@Overridepublic String info() {return name;}} //抽象裝飾類 abstract class Decorate implements Drink{//對抽象組件的引用private Drink drink;public Decorate(Drink drink) {this.drink =drink;}@Overridepublic double cost() {return this.drink.cost();}@Overridepublic String info() {return this.drink.info();} }//具體裝飾類 class Milk extends Decorate{public Milk(Drink drink) {super(drink);}@Overridepublic double cost() {return super.cost()*4;}@Overridepublic String info() {return super.info()+"加入了牛奶";} }class Suger extends Decorate{public Suger(Drink drink) {super(drink);}@Overridepublic double cost() {return super.cost()*2;}@Overridepublic String info() {return super.info()+"加入了蔗糖";} }總結
以上是生活随笔為你收集整理的Java的知识点31——封装拷贝、封装释放、实现放大器对声音的放大功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的知识点30——设计模式
- 下一篇: Java的知识点32——Mysql的简单