Home  >  Article  >  Java  >  Five classic cases for getting started with Java

Five classic cases for getting started with Java

黄舟
黄舟Original
2017-10-19 10:06:264217browse

这篇文章主要为大家详细介绍了5个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();

 }

}

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();

 }

}

The above is the detailed content of Five classic cases for getting started with Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn