dream.in.java

能以不变应万变是聪明人做事的准则。万事从小事做起,积累小成功,问鼎大成功,是成功者的秘诀。

必看的5个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();
    }
}

posted on 2009-02-22 13:39 YXY 阅读(201) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: