Java经典示例

liu3340113 贡献于2011-10-08

作者 雨林木风  创建于2010-08-18 00:41:00   修改者雨林木风  修改于2010-08-18 01:13:00字数7716

文档摘要:一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处。
关键词:

Java经典例子 1.一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 package com.softeem.demo; /**  *@author leno  *动物的接口  */ interface Animal {     public void eat(Food food); } /**  *@author leno  *一种动物类:猫  */ class Cat implements Animal {     public void eat(Food food) {         System.out.println("小猫吃" + food.getName());     } } /**  *@author leno  *一种动物类:狗  */ class Dog implements Animal {     public void eat(Food food) {         System.out.println("小狗啃" + food.getName());     } } /**  *@author leno  *食物抽象类  */ abstract class Food {     protected String name;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     } } /**  *@author leno  *一种食物类:鱼  */ class Fish extends Food {     public Fish(String name) {         this.name = name;     } } /**  *@author leno  *一种食物类:骨头  */ class Bone extends Food {     public Bone(String name) {         this.name = name;     } } /**  *@author leno  *饲养员类  *  */ class Feeder {     /**      *饲养员给某种动物喂某种食物      *@param animal      *@param food      */     public void feed(Animal animal, Food food) {         animal.eat(food);     } } /**  *@author leno  *测试饲养员给动物喂食物  */ public class TestFeeder {     public static void main(String[] args) {         Feeder feeder = new Feeder();         Animal animal = new Dog();         Food food = new Bone("肉骨头");         feeder.feed(animal, food); //给狗喂肉骨头         animal = new Cat();         food = new Fish("鱼");         feeder.feed(animal, food); //给猫喂鱼     } } 2.做一个单子模式的类,只加载一次属性文件 package com.softeem.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /**  * @authorleno 单子模式,保证在整个应用期间只加载一次配置属性文件  */ public class Singleton {     private static Singleton instance;     private static final String CONFIG_FILE_PATH = "E:\\config.properties";     private Properties config;     private Singleton() {         config = new Properties();         InputStream is;         try {             is = new FileInputStream(CONFIG_FILE_PATH);             config.load(is);             is.close();         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }     public static Singleton getInstance() {         if (instance == null) {             instance = new Singleton();         }         return instance;     }     public Properties getConfig() {         return config;     }     public void setConfig(Properties config) {         this.config = config;     } } 3.用JAVA中的多线程示例银行取款问题 package com.softeem.demo; /**  *@author leno  *账户类  *默认有余额,可以取款  */ class Account {     private float balance = 1000;     public float getBalance() {         return balance;     }     public void setBalance(float balance) {         this.balance = balance;     }     /**      *取款的方法需要同步      *@param money      */     public synchronized void withdrawals(float money) {         if (balance >= money) {             System.out.println("被取走" + money + "元!");             try {                 Thread.sleep(1000);             } catch (InterruptedException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             balance -= money;         } else {             System.out.println("对不起,余额不足!");         }     } } /**  *@author leno  *银行卡  */ class TestAccount1 extends Thread {     private Account account;     public TestAccount1(Account account) {         this.account = account;     }     @Override     public void run() {         account.withdrawals(800);         System.out.println("余额为:" + account.getBalance() + "元!");     } } /**  *@authorleno  *存折  */ class TestAccount2 extends Thread {     private Account account;     public TestAccount2(Account account) {         this.account = account;     }     @Override     public void run() {         account.withdrawals(700);         System.out.println("余额为:" + account.getBalance() + "元!");     } } public class Test {     public static void main(String[] args) {         Account account = new Account();         TestAccount1 testAccount1 = new TestAccount1(account);         testAccount1.start();         TestAccount2 testAccount2 = new TestAccount2(account);         testAccount2.start();     } } 4.用JAVA中的多线程示例生产者和消费者问题 package com.softeem.demo; class Producer implements Runnable {     private SyncStack stack;     public Producer(SyncStack stack) {         this.stack = stack;     }     public void run() {         for (int i = 0; i < stack.getProducts().length; i++) {             String product = "产品" + i;             stack.push(product);             System.out.println("生产了: " + product);             try {                 Thread.sleep(200);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } } class Consumer implements Runnable {     private SyncStack stack;     public Consumer(SyncStack stack) {         this.stack = stack;     }     public void run() {         for (int i = 0; i < stack.getProducts().length; i++) {             String product = stack.pop();             System.out.println("消费了: " + product);             try {                 Thread.sleep(1000);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } } class SyncStack {     private String[] products = new String[10];     private int index;     public synchronized void push(String product) {         if (index == product.length()) {             try {                 wait();             } catch (InterruptedException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }         notify();         products[index] = product;         index++;     }     public synchronized String pop() {         if (index == 0) {             try {                 wait();             } catch (InterruptedException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }         notify();         index--;         String product = products[index];         return product;     }     public String[] getProducts() {         return products;     } } public class TestProducerConsumer {     public static void main(String[] args) {         SyncStack stack = new SyncStack();         Producer p = new Producer(stack);         Consumer c = new Consumer(stack);         new Thread(p).start();         new Thread(c).start();     } } 5.编程实现序列化的Student(sno,sname)对象在网络上的传输 package com.softeem.demo; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.net.ServerSocket; import java.net.Socket; class Student implements Serializable {     private int sno;     private String sname;     public Student(int sno, String sname) {         this.sno = sno;         this.sname = sname;     }     public int getSno() {         return sno;     }     public void setSno(int sno) {         this.sno = sno;     }     public String getSname() {         return sname;     }     public void setSname(String sname) {         this.sname = sname;     }     @Override     public String toString() {         return "学号:" + sno + ";姓名:" + sname;     } } class MyClient extends Thread {     @Override     public void run() {         try {             Socket s = new Socket("localhost", 9999);             ObjectInputStream ois = new ObjectInputStream(s.getInputStream());             Student stu = (Student) ois.readObject();             String msg = "客户端程序收到服务器端程序传输过来的学生对象>> " + stu;             System.out.println(msg);             ois.close();             s.close();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (ClassNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     } } class MyServer extends Thread {     @Override     public void run() {         try {             ServerSocket ss = new ServerSocket(9999);             Socket s = ss.accept();             ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream());             Student stu = new Student(1, "赵本山");             ops.writeObject(stu);             ops.close();             s.close();             ss.close();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     } } public class TestTransfer {     public static void main(String[] args) {         new MyServer().start();         new MyClient().start();     } } 11.写一个方法,用一个for循环打印九九乘法表   /**   *一个for循环打印九九乘法表   */   publicvoid nineNineMultiTable()   {   for (int i = 1,j = 1; j <= 9; i++) {   System.out.print(i+"*"+j+"="+i*j+" ");   if(i==j)   {   i=0;   j++;   System.out.println();   }   }   } 12.给定一个java.util.Date对象,如何转化为”2007-3-22 20:23:22”格式的字符串 /**   *将某个日期以固定格式转化成字符串   *@paramdate   *@returnstr   */   public String dateToStr(java.util.Date date)   {   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   String str = sdf.format(date);   return str;   } 13.写一个方法,能够判断任意一个整数是否素数 /**   *判断任意一个整数是否素数   *@paramn   *@returnboolean   */   publicboolean isPrimes(int n)   {   for (int i = 2; i <= Math.sqrt(n); i++) {   if(n%i==0)   {   returnfalse;   }   }   returntrue;   } 14.写一个方法,输入任意一个整数,返回它的阶乘 /**   *获得任意一个整数的阶乘   *@paramn   *@returnn!   */   publicint factorial(int n)   {   //递归   if(n==1)   {   return 1;   }   return n*factorial(n-1);   //非递归 // int multi = 1; // for (int i = 2; i <= n; i++) { // multi*=i; // } // return multi;   } 15.写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1 /**   *二分查找特定整数在整型数组中的位置(递归)   *@paramdataset   *@paramdata   *@parambeginIndex   *@paramendIndex   *@returnindex   */   publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)   {   int midIndex = (beginIndex+endIndex)/2;   if(datadataset[endIndex]||beginIndex>endIndex)return -1;   if(datadataset[midIndex])   {   return binarySearch(dataset,data,midIndex+1,endIndex);   }else   {   return midIndex;   }   }       /**   *二分查找特定整数在整型数组中的位置(非递归)   *@paramdataset   *@paramdata   *@returnindex   */   publicint binarySearch(int[] dataset ,int data)   {   int beginIndex = 0;     int endIndex = dataset.length - 1;     int midIndex = -1;    if(datadataset[endIndex]||beginIndex>endIndex)return -1;   while(beginIndex <= endIndex) {    midIndex = (beginIndex+endIndex)/2;   if(datadataset[midIndex]) {     beginIndex = midIndex+1;     }else   {   return midIndex;   }   }   return -1;   }

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 19 人已下载

下载文档