5個(gè)JAVA入門必看的經(jīng)典實(shí)例
入門必看的5個(gè)JAVA經(jīng)典實(shí)例,供大家參考,具體內(nèi)容如下
1.一個(gè)飼養(yǎng)員給動(dòng)物喂食物的例子體現(xiàn)JAVA中的面向?qū)ο笏枷?接口(抽象類)的用處
package com.softeem.demo;
/**
*@author leno
*動(dòng)物的接口
*/
interface Animal {
public void eat(Food food);
}
/**
*@author leno
*一種動(dòng)物類:貓
*/
class Cat implements Animal {
public void eat(Food food) {
System.out.println("小貓吃" + food.getName());
}
}
/**
*@author leno
*一種動(dòng)物類:狗
*/
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
*飼養(yǎng)員類
*
*/
class Feeder {
/**
*飼養(yǎng)員給某種動(dòng)物喂某種食物
*@param animal
*@param food
*/
public void feed(Animal animal, Food food) {
animal.eat(food);
}
}
/**
*@author leno
*測(cè)試飼養(yǎng)員給動(dòng)物喂食物
*/
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.做一個(gè)單子模式的類,只加載一次屬性文件
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 單子模式,保證在整個(gè)應(yīng)用期間只加載一次配置屬性文件
*/
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
*賬戶類
*默認(rèn)有余額,可以取款
*/
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("對(duì)不起,余額不足!");
}
}
}
/**
*@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中的多線程示例生產(chǎn)者和消費(fèi)者問題
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 = "產(chǎn)品" + i;
stack.push(product);
System.out.println("生產(chǎn)了: " + 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("消費(fèi)了: " + 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.編程實(shí)現(xiàn)序列化的Student(sno,sname)對(duì)象在網(wǎng)絡(luò)上的傳輸
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 "學(xué)號(hào):" + 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 = "客戶端程序收到服務(wù)器端程序傳輸過(guò)來(lái)的學(xué)生對(duì)象>> " + 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();
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaWeb實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
- Java讀取Excel文件內(nèi)容的簡(jiǎn)單實(shí)例
- java堆棧類使用實(shí)例(java中stack的使用方法)
- java IO流文件的讀寫具體實(shí)例
- Java添加事件監(jiān)聽的四種方法代碼實(shí)例
- JAVA得到數(shù)組中最大值和最小值的簡(jiǎn)單實(shí)例
- JavaWeb實(shí)現(xiàn)用戶登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
- Java實(shí)現(xiàn)MD5加密及解密的代碼實(shí)例分享
- Java Swing中的文本框(JTextField)與文本區(qū)(JTextArea)使用實(shí)例
- Java生成CSV文件實(shí)例詳解
相關(guān)文章
詳解rabbitmq使用springboot實(shí)現(xiàn)fanout模式
這篇文章主要介紹了rabbitmq使用springboot實(shí)現(xiàn)fanout模式,Fanout特點(diǎn)是發(fā)布與訂閱模式,是一種廣播機(jī)制,它是沒有路由key的模式,需要的朋友可以參考下2023-07-07
Java中實(shí)現(xiàn)線程的三種方式及對(duì)比_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文給大家分享了java實(shí)現(xiàn)線程的三種方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-05-05
基于ChatGPT+SpringBoot實(shí)現(xiàn)智能聊天AI機(jī)器人接口并上線至服務(wù)器的方法
ChatGPT是一款基于自然語(yǔ)言處理技術(shù)的聊天機(jī)器人,ChatGPT可以模擬真實(shí)的人類對(duì)話,并能夠更貼近用戶的需求,提供更有價(jià)值的服務(wù),這篇文章主要介紹了基于ChatGPT+SpringBoot實(shí)現(xiàn)智能聊天AI機(jī)器人接口并上線至服務(wù)器,需要的朋友可以參考下2023-02-02
MyBatis?如何使項(xiàng)目兼容多種數(shù)據(jù)庫(kù)的解決方案
要想做兼容多種數(shù)據(jù)庫(kù),那毫無(wú)疑問,我們首先得明確我們要兼容哪些數(shù)據(jù)庫(kù),他們的數(shù)據(jù)庫(kù)產(chǎn)品名稱是什么,本次我們講解了一套使項(xiàng)目兼容多種數(shù)據(jù)庫(kù)的方案,對(duì)MyBatis項(xiàng)目兼容多種數(shù)據(jù)庫(kù)操作方法感興趣的朋友一起看看吧2024-05-05
SpringBoot實(shí)現(xiàn)跨域的幾種常用方式總結(jié)
跨域是指一個(gè)域下的文檔或腳本試圖去請(qǐng)求另一個(gè)域下的資源,或者涉及到兩個(gè)不同域名的資源之間的交互,由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請(qǐng)求,本文小編給大家分享了SpringBoot實(shí)現(xiàn)跨域的幾種常用方式,需要的朋友可以參考下2023-09-09
Java代碼實(shí)現(xiàn)四種限流算法詳細(xì)介紹
本文主要介紹了Java代碼實(shí)現(xiàn)四種限流算法詳細(xì)介紹,包含固定窗口限流,滑動(dòng)窗口限流,漏桶限流,令牌桶限流,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
spring AOP實(shí)現(xiàn)@Around輸出請(qǐng)求參數(shù)和返回參數(shù)
這篇文章主要介紹了spring AOP實(shí)現(xiàn)@Around輸出請(qǐng)求參數(shù)和返回參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java判斷字符串是否是整數(shù)或者浮點(diǎn)數(shù)的方法
今天小編就為大家分享一篇Java判斷字符串是否是整數(shù)或者浮點(diǎn)數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

