Java经典例子

it2022-05-08  15

1.一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处

package com.softeem.demo;interface Animal {    public void eat(Food food);}class Cat implements Animal {    public void eat(Food food) {        System.out.println("小猫吃" + food.getName());    }}class Dog implements Animal {    public void eat(Food food) {        System.out.println("小狗啃" + food.getName());    }}abstract class Food {    protected String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}class Fish extends Food {    public Fish(String name) {        this.name = name;    }}class Bone extends Food {    public Bone(String name) {        this.name = name;    }}class Feeder {        public void feed(Animal animal, Food food) {        animal.eat(food);    }}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;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;class Account {    private float balance = 1000;    public float getBalance() {        return balance;    }    public void setBalance(float balance) {        this.balance = balance;    }        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("对不起,余额不足!");        }    }}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() + "元!");    }}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循环打印九九乘法表    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”格式的字符串  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.写一个方法,能够判断任意一个整数是否素数  publicboolean isPrimes(int n)  {  for (int i = 2; i <= Math.sqrt(n); i++) {  if(n%i==0)  {  returnfalse;  }  }  returntrue;  }14.写一个方法,输入任意一个整数,返回它的阶乘  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  publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex)  {  int midIndex = (beginIndex+endIndex)/2;  if(data<dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;  if(data<dataset[midIndex])  {  return binarySearch(dataset,data,beginIndex,midIndex-1);  }elseif(data>dataset[midIndex])  {  return binarySearch(dataset,data,midIndex+1,endIndex);  }else  {  return midIndex;  }  }        publicint binarySearch(int[] dataset ,int data)  {  int beginIndex = 0;     int endIndex = dataset.length - 1;     int midIndex = -1;    if(data<dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex)return -1;  while(beginIndex <= endIndex) {    midIndex = (beginIndex+endIndex)/2;  if(data<dataset[midIndex]) {     endIndex = midIndex-1;     } elseif(data>dataset[midIndex]) {     beginIndex = midIndex+1;     }else  {  return midIndex;  }  }  return -1;  }

转载于:https://www.cnblogs.com/liuzhuqing/archive/2012/07/13/7480785.html

相关资源:JAVA经典100个小案例

最新回复(0)