1. 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
/**
* 定义父类--圆类
*/
public class Circle {
/**
* 私有属性:成员变量--圆半径
*/
private double radius;
/**
* 构造方法
*/
public Circle() {
radius = 0.0;
}
public Circle(double radius) {
this.radius = radius;
}
/**
*成员方法--求圆周长
*/
double getPerimeter(){
return 2*Math.PI*radius;
}
/**
* 成员方法--求圆面积
*/
double getArea(){
return Math.PI*radius*radius;
}
/**
* 成员方法--显示圆半径、周长、面积
*/
void show(){
System.out.println("圆半径:"+radius);
System.out.println("圆周长:"+getPerimeter());
System.out.println("圆面积:"+getArea());
}
}
/**
* 定义子类--圆柱类
*/
public class Cylinder extends Circle {
/**
* 私有属性:成员变量--圆柱体的高
*/
private double hight;
/**
* 构造方法、调用父类方法
*/
public Cylinder() {
}
public Cylinder(double r, double h) {
super(r);
this.hight = h;
}
/**
* 成员方法--求圆柱体的体积
*/
public double getVolume(){
return getArea()*hight;
}
/**
* 成员方法--显示圆柱体体积
*/
void showVolume(){
System.out.println("圆柱体的体积 = "+getVolume());
}
}
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
/**
* 创建圆类对象、调用方法
*/
Circle c = new Circle();
/**
* 调用圆类方法
*/
c.show();
/**
* 创建圆柱体对象(实例)、调用方法
*/
Cylinder cy = new Cylinder();
/**
*调用父类方法
*/
cy.show();
/**
* 调用子类方法
*/
cy.showVolume();
}
}

2.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
编写实现,要求:使用内部类实现线程,对j增减的时候不考虑顺序问题。
/**
* 测试类
*/
public class ThreadTest {
/**
* 声明成员变量
*/
private int j;
/**
* 程序主入口:main方法
*/
public static void main(String[] args) {
/**
* 创建对象
*/
ThreadTest tt = new ThreadTest();
/**
* 创建线程内部类对象
*/
Inc inc = tt.new Inc();
Dec dec = tt.new Dec();
for (int i = 0;i < 2;i++){
/**
* 创建线程对象并启动线程
*/
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
}
/**
* 实现同步对j的值+1操作
*/
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc :"+j);
}
/**
* 实现同步对j的值-1操作
*/
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec :"+j);
}
/**
* 内部类
*/
private class Inc implements Runnable {
@Override
public void run() {
for (int i = 0;i < 100;i++){
/**
* 调用加的方法
*/
inc();
}
}
}
private class Dec implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
/**
* 调用减的方法
*/
dec();
}
}
}
}

3.Java的通信编程,用Java Socket编程,要求从客户端录入几个字符,发送到服务器端,由服务器端将接收到的字符进行输出。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 线程通信--服务器端
*/
public class Server {
/**
* 声明ServerSocket对象
*/
private ServerSocket ss;
/**
* 声明Socket对象
*/
private Socket socket;
/**
* 声明输入流对象BufferedReader
*/
private BufferedReader br;
/**
* 声明输出流对象
*/
private PrintWriter pw;
public Server(){
try {
/**
* 创建一个ServerSocket对象,指定等待端口
*/
ss = new ServerSocket(8848);
while (true){
/**
* 使用ServerSocket接收用户请求(服务器端处于监听状态)
*/
/**
* 获得客户端的socket对象
*/
socket = ss.accept();
/**
* 创建输入流并读取信息
*/
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
System.out.println("客户端请求:"+line);
/**
* 创建输出流并输出信息
*/
pw = new PrintWriter(socket.getOutputStream(),true);
pw.print("请求已接收!");
/**
* 关闭流
*/
pw.close();
br.close();
socket.close();
}
} catch (IOException e) {
pw.println("出现异常!");
}
}
/**
* 程序主入口
*/
public static void main(String[] args) {
/**
* 创建服务器端对象
*/
new Server();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 线程通信--客户端
*/
public class Client {
/**
* 声明Socket对象
*/
Socket socket;
/**
* 声明输入流对象
*/
BufferedReader br;
/**
* 声明输出流对象
*/
PrintWriter pw;
/**
* 构造方法
*/
public Client(){
try {
/**
* 创建Socket对象用来发送请求
*/
socket = new Socket("127.0.0.1",8848);
/**
* 创建字符缓冲区对象并输出
*/
BufferedReader line =
new BufferedReader(new InputStreamReader(System.in));
/**
* 创建输出流对象并输出
*/
pw = new PrintWriter(socket.getOutputStream(),true);
pw.println(line.readLine());
/**
* 创建输入流对象
*/
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());
/**
* 关闭流
*/
pw.close();
br.close();
socket.close();
} catch (IOException e) {
System.out.println("请求出错!");
}
}
/**
* 程序主入口
*/
public static void main(String[] args) {
/**
* 创建客户端对象
*/
new Client();
}
}
线程通信在自己的电脑上测试过程:
1、先运行服务器端程序,运行结果如下图

*红色方框中的红色方块按钮亮起代表程序已运行,正在等待(监听)客户端请求
2、再运行客户端程序,并输入请求,运行如下图
2.1 客户端处于等待输入指令状态

2.2 客户端完成指令输入并得到服务器端回应,红色方块按钮灭掉

2.3 服务器端,收到客户端请求给出回馈信息,并未关闭监听状态,需手动停止(现实中服务器一般是时刻处于监听状态的,维护期间会关闭)
