JavaSE编码试题强化练习1
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的更多相关文章
- JavaSE编码试题强化练习7
1.编写应用程序,创建类的对象,分别设置圆的半径.圆柱体的高,计算并分别显示圆半径.圆面积.圆周长,圆柱体的体积. /** * 圆类 */ public class Circle { /** * 类属 ...
- JavaSE编码试题强化练习6
1.写出选择排序的代码实现,对一个int数组进行排序 public class TestSelectSort { public static void main(String[] args) { in ...
- JavaSE编码试题强化练习5
1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(St ...
- JavaSE编码试题强化练习4
1.编写一个Worker类,为Worker类添加相应的代码,使得Worker对象能正确放入TreeSet中.并编写相应的测试代码. /** * Worker类 */ public class Work ...
- JavaSE编码试题强化练习3
1.给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐. public class TestCirculation { public static void ma ...
- JavaSE编码试题强化练习2
1.编写递归算法程序:一列数的规则如下: 0.1.1.2.3.5.8.13.21.34...... 求数列的第40位数是多少. public class TestRecursion { public ...
- JavaSE面试题
JavaSE面试题 欢迎到我的Git仓库去提交您觉得优秀的内容! 1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.当一个static方法被调用时,可能还没有创建任何实例 ...
- [002] - JavaSE面试题(二):基本数据类型与访问修饰符
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [002] - JavaSE面试题(二):基本数据类型与访问修饰符 第1问:Java的数据类型有哪 ...
- JavaSE 面试题: 类初始化和实例初始化等
JavaSE 面试题 类初始化和实例初始化等 class Father { private int i = test(); private static int j = method(); stati ...
随机推荐
- Python三引号(triple quotes)
python中三引号可以将复杂的字符串进行复制: python三引号允许一个字符串跨多行,字符串中可以包含换行符.制表符以及其他特殊字符. 三引号的语法是一对连续的单引号或者双引号(通常都是成对的用) ...
- luogu 1414 又是毕业季II 约数相关
感觉好水呀~ Code: #include <cstdio> #include <algorithm> #define N 1000005 #define setIO(s) f ...
- AtCoder AGC031D A Sequence of Permutations (群论、置换快速幂)
题目链接 https://atcoder.jp/contests/agc031/tasks/agc031_d 题解 这居然真的是个找规律神题... 首先要明白置换的一些基本定义,置换\(p\)和\(q ...
- CodeForces 754D Fedor and coupons ——(k段线段最大交集)
还记得lyf说过k=2的方法,但是推广到k是其他的话有点麻烦.现在这里采取另外一种方法. 先将所有线段按照L进行排序,然后优先队列保存R的值,然后每次用最小的R值,和当前的L来维护答案即可.同时,如果 ...
- DB 分库分表(5):一种支持自由规划无须数据迁移和修改路由代码的 Sharding 扩容方案
作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...
- css 元素的竖向百分比设定是相对于容器的高度吗?
结论是,如果是height的话,是相对于容器高度,如果是padding-height,margin-height则是相对于容器的宽度. 举例说明: <!DOCTYPE html> < ...
- linux安装mysql可视化界面
之前是一直用shell交互界面,但是最近频繁地检查数据库中的数据感觉特别麻烦,便装了一个可视化工具. 安装: $ sudo apt-get install mysql-workbench [sudo] ...
- JVM 监控工具——jconsole
[官方文档]:Using JConsole 1. 简介 JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行.您可以轻松地使用JConsole(或者,它更高端的“近亲 ...
- ajax 415
ajax 发送post请求是出现415错误,是ajax的格式有问题,如下. $.ajax({ type: 'POST', url: '/login', data: { "username&q ...
- IP输出 之 ip_local_out
概述 将要从本地发出的数据包,会在构造了ip头之后,调用ip_local_out函数,该函数设置数据包的总长度和校验和,然后经过netfilter的LOCAL_OUT钩子点进行检查过滤,如果通过,则调 ...