Java基础程序设计结构

在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 “自由发布的 Math 库 ” ( fdlibm ) 实现算法 , 以确保在所有平台上得到相同的结果。

不要在boolean与任何数值类型之间进行强制类型转换,防止错误

不要用== 运算符测试字符串的相等性:只有字符串常量是共享的, 而 + 或 substring等操作产生的结果并不是共享的。

不要使用 char 类型,太过底层,UTF-16需要两个代码单元,用charAt会有问题。

在循环中 , 检测两个浮点数是否相等需要格外小心 。

从 Java SE 7 开始 , case 标签还可以是字符串字面量

带标签的break

int j = 10;
breakpoint:
for (int i=0;i<10;i++){
while (j-->0){
if(j==5){
break breakpoint;
}
}
}
System.out.println(j);

可以将标签应用到任何语句中 , 甚至可以应用到 if 语句或者块语句中

只能跳出语句块,而不能跳入语句块

Biglnteger 类实现了任意精度的整数运算 , BigDecimal 实现了任意精度的浮点数运算

数组长度为 0 与 null 不同

Arrays.copyOf :一个数组的所有值拷贝到一个新的数组中

运行时常量池从方法区中分配

Java Stream

java8--List转为Map、分组、过滤、求和等操作

Map<Integer, List<Integer>> map = random.ints(size, 0, bound).boxed().sorted().collect(Collectors.groupingBy(value->value/10));

Java的网络通信

XML操作

定义

XML 指可扩展标记语言

XML 被设计用来传输和存储数据。

语法规则

  1. 所有 XML 元素都须有关闭标签
  2. XML 标签对大小写敏感
  3. XML 必须正确地嵌套
  4. XML 文档必须有根元素
  5. XML 的属性值须加引号
  6. 在 XML 中,空格会被保留

Java 处理 XML 的三种主流技术及介绍

Json操作

JavaScript对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式

JSON 是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

public static void readJson(){
try {
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = (JsonObject) jsonParser.parse(new FileReader("test.json"));
System.out.println(jsonObject.get("cat").getAsString());
System.out.println(jsonObject.get("pop").getAsBoolean()); JsonArray array = jsonObject.get("book").getAsJsonArray();
for (int i=0;i<array.size();i++) {
System.out.println("====");
JsonObject subJson = array.get(i).getAsJsonObject();
System.out.println(subJson.get("id").getAsInt());
System.out.println(subJson.get("name").getAsString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

HTTP操作

使用http的Get读取网络数据

public static void doGet(){
URL url = null;
try {
url = new URL("http://www.dengyouquan.cn");
URLConnection connection = url.openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
try(BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));) {
String line = null;
while ((line=reader.readLine())!=null){
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}

使用http的Post与网络通信

public static void doPost() {
URL url = null;
HttpURLConnection connection = null;
try {
url = new URL("http://www.dengyouquan.cn");
connection = (HttpURLConnection) url.openConnection();
connection.addRequestProperty("encoding", "UTF-8");//添加请求属性
connection.setDoInput(true);//允许输入
connection.setDoOutput(true);//允许输出
connection.setRequestMethod("POST");//POST请求
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (connection == null)
return;
//writer与reader顺序一致
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
) {
writer.write("?p=6");
writer.flush();
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}

使用HttpClient进行Get通信

public static void doHttpClientGet(){
HttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet("http://www.dengyouquan.cn");
try (CloseableHttpResponse httpResponse = (CloseableHttpResponse) httpClient.execute(httpGet);){
HttpEntity entity = httpResponse.getEntity();
if(entity!=null){
String entityStr= EntityUtils.toString(entity,"utf-8");
System.out.println(entityStr);
}
} catch (IOException e) {
e.printStackTrace();
}
}

使用HttpClient进行Post通信

public static void doHttpClientPost(){
try {
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("http://www.dengyouquan.cn");
List<BasicNameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("p","6"));
httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
System.out.println(EntityUtils.toString(httpEntity,"UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

Socket操作

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

HTTP1.0默认是短连接,无状态的.

Http1.1默认是长连接

半包:接受方没有接受到一个完整的包,只接受了部分;

粘包:发送方发送的多个包数据到接收方接收时粘成一个包。

TCP:流,会有半包和粘包

UDP:数据包,无半包和粘包

ServerSocket和Socket

使用Socket时用BufferedReader会阻塞

readLine读取socket流的时候产生了阻塞

socket通信服务器端

Socket编程中,尽量用PrintWriter取代BufferedWriter

PrintWriter的println方法自动添加换行,BufferedWriter需要显示调用newLine方法

PrintWriter的print、println方法可以接受任意类型的参数

PrintWriter和BufferedWriter的使用区别

Scanner的平均耗时是BufferedReader的10倍左右

java Scanner与BufferedReader读取键盘输入性能比较

推荐Scanner

java控制台输入 InputStreamReader与Scanner ,Console 区别

public class ServerSocket1 {
private static final int PORT = 8888; public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
System.out.println("服务器已启动...");
int j = 0;
while (j++<Integer.MAX_VALUE){
Socket socket = serverSocket.accept();
new Thread(new ServerSocketHandler(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} class ServerSocketHandler implements Runnable {
private Socket socket; ServerSocketHandler(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try(BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))){
String line = null;
System.out.println("服务器已连接...");
boolean exit = false;
while (!exit){
System.out.println("等待消息");
String msg = reader.readLine();
switch (msg){
case "":
continue;
case "date":
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("localDateTime:"+localDateTime);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
writer.write(dateTimeFormatter.format(localDateTime)+System.lineSeparator());
break;
case "exit":
System.out.println("server close...");
writer.write("exit"+System.lineSeparator());
exit = true;
break;
default:
writer.write("commend not found!"+System.lineSeparator());
}
writer.flush();
}
} catch (IOException e) {
System.out.println("客户端异常退出。。。");
}
}
}

socket通信客户端

public class ClientSocket implements Runnable {
private static final String ADDRESS = "127.0.0.1";
private static final int PORT = 8888;
public static void main(String[] args) {
new Thread(new ClientSocket()).start();
} @Override
public void run() {
try(Socket socket= new Socket(ADDRESS,PORT);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
Scanner scanner = new Scanner(System.in);){
boolean exit = false;
System.out.println("客户端已连接...");
while (!exit) {
writer.write(scanner.nextLine() + System.lineSeparator());
writer.flush();
String line = reader.readLine();
System.out.println("客户端收到消息:"+line);
if(line.equals("exit")){
exit = true;
}
}
} catch (IOException e) {
System.out.println("无服务器");
}
}
}

7.20实习培训日志-Java基础程序设计结构的更多相关文章

  1. 7.17实习培训日志-java基础

    总结 今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式.晚上主要讲了maven的一些基础知识和idea ...

  2. 7.19实习培训日志- java进阶

    java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...

  3. 7.15实习培训日志 java题解

    周末总结 本周主要学习了markdown,git,docker等工具的使用.在本周的学习中,初步了解了markdown,git,docker的使用.本周的静态博客部署中,对于怎么显示一个博客内容,有两 ...

  4. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  5. [Java基础]循环结构3

    [Java基础]循环结构3 break 与 continue 中断循环... /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:BreakTest.java 编写时间:2016/6 ...

  6. [java基础]循环结构2

    [java基础]循环结构2 写了几个循环结构练习~记录一下~~ 1:99乘法表 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:GameForFor.java 编写时间:2016 ...

  7. [java基础]循环结构1

    [java基础]循环结构1 循环结构:for循环,while循环,do_while循环在,增强型for循环 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:WhileTest.j ...

  8. [java基础]分支结构(2)

    [java基础]分支结构2 switch case /** 文件路径:G:\JavaByHands\if-else\ 文件名称:switchcase.java 编写时间:2016/6/6 作 者:郑晨 ...

  9. 7.30实习培训日志-SQL优化

    总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...

随机推荐

  1. EasyNVR无插件流媒体服务器前端技术防止重复提交的方法

    现在随着接触EasyNVR时间越来越长,越发的觉得EasyNVR真的是一个"神器".从功能上来说自身不仅可以拉出来使用(具体功能搜索EasyNVR一定有惊喜!),也可以作为设备端与 ...

  2. POJ - 3278 Catch That Cow 【BFS】

    题目链接 http://poj.org/problem?id=3278 题意 给出两个数字 N K 每次 都可以用三个操作 + 1 - 1 * 2 求 最少的操作次数 使得 N 变成 K 思路 BFS ...

  3. BA模型 第10章

    1.BA模型BA模型就是世界坐标到像素坐标的转换过程.这里多了一个去畸变.因为归一化平面坐标在转成像素坐标的过程中会出现畸变.这里只处理了径向畸变,径向畸变包括桶形失真和枕形失真,都是由于图像放大率随 ...

  4. git删除远程分支【转】

    本文转载自:https://my.oschina.net/tsingxu/blog/84601 如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放  ...

  5. HDU2296 Ring —— AC自动机 + DP

    题目链接:https://vjudge.net/problem/HDU-2296 Ring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  6. RQNOJ 140 分配时间:dp

    题目链接:https://www.rqnoj.cn/problem/140 题意: 小王参加的考试是几门科目的试卷放在一起考,一共给t分钟来做. 他现在已经知道第i门科目花k分钟可以拿到w[i][k] ...

  7. RQNOJ 95 多多看DVD(加强版):01背包

    题目链接:https://www.rqnoj.cn/problem/95 题意: 叔叔要陪多多看动画片. 有n张DVD可以买,第i张碟的打分为w[i],播放时间为t[i]. 爷爷规定他们只能在一定的时 ...

  8. 分享知识-快乐自己:论 Mybatis中的关联关系(一对多,多对一,多对多)

    论:一对多:(举例一个省有多个市)就是实体类中有(市)类型集合属性:多对一:(多个市有一个共同的省)就是类中有(省)类型的属性.下面来介绍:一对一.多对一的使用方式. 一对多方: package ml ...

  9. C#SocketAsyncEventArgs实现高效能多并发TCPSocket通信 (服务器实现)

    http://freshflower.iteye.com/blog/2285272 想着当初到处找不到相关资料来实现.net的Socket通信的痛苦与心酸, 于是将自己写的代码公布给大家, 让大家少走 ...

  10. hdu-5795 A Simple Nim(组合游戏)

    题目链接: A Simple Nim Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...