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

												

JavaSE编码试题强化练习1的更多相关文章

  1. JavaSE编码试题强化练习7

    1.编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 圆类 */ public class Circle { /** * 类属 ...

  2. JavaSE编码试题强化练习6

    1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { in ...

  3. JavaSE编码试题强化练习5

    1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(St ...

  4. JavaSE编码试题强化练习4

    1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中.并编写相应的测试代码. /** * Worker类 */ public class Work ...

  5. JavaSE编码试题强化练习3

    1.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. public class TestCirculation { public static void ma ...

  6. JavaSE编码试题强化练习2

    1.编写递归算法程序:一列数的规则如下: 0.1.1.2.3.5.8.13.21.34...... 求数列的第40位数是多少. public class TestRecursion { public ...

  7. JavaSE面试题

    JavaSE面试题 欢迎到我的Git仓库去提交您觉得优秀的内容! 1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.当一个static方法被调用时,可能还没有创建任何实例 ...

  8. [002] - JavaSE面试题(二):基本数据类型与访问修饰符

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...

  9. JavaSE 面试题: 类初始化和实例初始化等

    JavaSE 面试题 类初始化和实例初始化等 class Father { private int i = test(); private static int j = method(); stati ...

随机推荐

  1. sql 为空不做查询条件

    select * from usertable where 1=1 and (name=@name or @name='') and (page=@page or @page='')

  2. this 的用法 为原始类型扩展方法

    namespace Demo { public static class Extends { // string类型扩展ToJson方法 public static object ToJson(thi ...

  3. [winafl]这几天的折腾

    1.自己写的exe 2.自己写的dll,然后写了接口程序去load...但是这个速度真是迷醉 先把基本的几种类型跑起来,再解决速度和样本的问题...

  4. web+大文件上传

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...

  5. 博弈dp入门 POJ - 1678 HDU - 4597

    本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...

  6. mysql gis基本使用

    # 插入空间数据 INSERT INTO `t_pot` VALUES ('1', '北京', POINT(116.401394,39.916042)); INSERT INTO `t_pot` VA ...

  7. Selenium 的页面加载以及几种等待的问题

    1. PageLoadStrategy : 当调用driver.get("https://xxxx.xxx.xxx")来访问某页面时,get方法通常会阻塞浏览器直到页面完全加载后才 ...

  8. [CSP-S模拟测试]:那一天她里我而去(堆优化Dijkstra)

    题目传送门(内部题3) 输入格式 每个测试点有多组测试数据.第一行有一个正整数T表示数据组数.接下来对于每组数据,第一行有两个正整数n,m分别代表图的点数和边数.接下来有m行,每行三个整数u,v,d表 ...

  9. linux线程池thrmgr源码解析

    linux线程池thrmgr源码解析 1         thrmgr线程池的作用 thrmgr线程池的作用是提高程序的并发处理能力,在多CPU的服务器上运行程序,可以并发执行多个任务. 2      ...

  10. [题解] [CF451E] Devu and Flowers

    题面 题解 就是一个求\(\sum_{i= 1}^{n}x _ i = m\)的不重复多重集的个数, 我们可以由容斥原理得到: \[ ans = C_{n + m - 1}^{n - 1} - \su ...