服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - 5个JAVA入门必看的经典实例

5个JAVA入门必看的经典实例

2021-01-21 13:20Java之家 JAVA教程

这篇文章主要为大家详细介绍了5个JAVA入门必看的经典实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

入门必看的5个JAVA经典实例,供大家参考,具体内容如下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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.做一个单子模式的类,只加载一次属性文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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中的多线程示例银行取款问题

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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中的多线程示例生产者和消费者问题

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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)对象在网络上的传输

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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();
 
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐