Java经典例子

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 0stack.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 0stack.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 new Producer(stack);
        Consumer 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 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 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 1,j 1; <= 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 2; <= 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 2; <= 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;
  }

posted @ 2012-07-13 11:31  刘竹青  阅读(315)  评论(0编辑  收藏  举报