1.基本类型之间 先看不同类型的基本类型之间的比较: private static void test2(){ int a = 100; long b = 100L; boolean result = b == a; System.out.println(result ? "相等" : "不相等"); } 结果是: 相等 这里实际上进行了隐式类型转换,编译器将 int 类型“提升”为 long 类型后进行比较,相当于: boolean result = b == (long)a; 2.包装类…
1.基本类型之间 先看不同类型的基本类型之间的比较: private static void test2(){ int a = 100; long b = 100L; boolean result = b == a; System.out.println(result ? "相等" : "不相等"); } 结果是: 相等 这里实际上进行了隐式类型转换,编译器将 int 类型“提升”为 long 类型后进行比较,相当于: boolean result = b == (long)a; 2.包装类…
图源:Fotor懒设计 在日常使用的时候,我们往往需要创建一些“仅用于传输数据的类型”,比如Web编程时候的DTO。 将特殊用途的类型限制为“只读”的一个好处是,这些类型可以安全地在多线程之间共享,并且在涉及计算哈希值的时候,不用担心这些对象因为内部属性改变导致哈希值改变。 为什么要使用 Record 如果要创建一个“只读”类型,通常我们需要这样做: public class Person1 { private final String name; private final Integer age; …
图源:Fotor懒设计 在上一篇文章Java编程笔记29:JSP - 红茶的个人站点 (icexmoon.cn)中,我们看到了如何结合Servlet和JSP实现简单的MVC思想。但这种做法存在一些问题: 用Servlet类来实现Controller(控制器)会让Controller显得复杂,因为Controller必须继承自HttpServlet类,意味着它包含了一些Servlet的功能,这不符合单一任务原则的设计思想。 在Servlet中加载JSP和附加信息的部分显得复杂,可以进一步封装。 为了解决上边的问题,我…
图源:Fotor懒设计 就像在上篇Java编程笔记28:Servlet II - 红茶的个人站点 (icexmoon.cn)中展示的那样,要向客户端输出一个页面,最简单的方式是直接用Java代码向输出流写入Html代码。这样的方式虽然简单直观,但存在很多隐患,而且很难用于编写复杂的Html代码。 此时我们就需要其他技术来输出Html页面,JSP就是早期的其中一种方式。 基础 JSP是Java Server Pages的缩写,是Java服务器用于“组装”和生成Html页面的技术。其写法和作用与其它语言中常见的模版语言…
图源:Fotor懒设计 在Java编程笔记27:Servlet - 红茶的个人站点 (icexmoon.cn)中介绍了如何编写和运行一个基于Servlet编写的Web应用,本篇文章将学习更多Servlet应用中如何使用常见的Web技术。 重定向和转发 页面重定向应该不会陌生,我们只需要在返回的HTTP响应报文中,将响应状态码设置为30X,并且通过报文头标签Location指定重定向后的目标URL即可。 类似之前的实现,先设置一个欢迎页面: package cn.icexmoon.java.note.ch28; //…
图源:Fotor懒设计 在之前的文章Java编程笔记26:HTTP - 红茶的个人站点 (icexmoon.cn)中,我们学习了如何“纯手工”用Java编写一个基于TCP/IP通信的Web服务端应用,可以实现最基本的接收HTTP请求和返回HTTP响应。 但显然,这种方式只适合学习最基本的Web服务实现原理,并不适合真正用于商业开发。因为我们要花费大量时间去处理最基本的报文解析和请求响应等功能,这些功能显然是“轮子”,已经有大量成熟方案可以使用。 Servlet技术就是这其中一个比较古早的轮子,虽然现代基本不会用到它…
图源: Fotor懒设计 HTTP协议实际上是基于TCP的应用层协议,规定了请求报文和响应报文等。参考HTTP协议的规定,我们可以实现一个简单的HTTP Server。 前文Java编程笔记25:TCP - 红茶的个人站点 (icexmoon.cn)中我介绍了如何实现简单的TCP服务端和客户端,本文将在之前示例的基础上实现一个简单的HTTP服务。 HTTP的基本概念推荐阅读图解HTTP (豆瓣) (douban.com),或者Web基础 - 廖雪峰的官方网站 (liaoxuefeng.com)。 请求报文 创建一个…
图源:Java Switch语句(用法详解)-java教程-PHP中文网 TCP和UDP通信可以说是网络应用的起点,原理方面的内容不在本文讨论范围内,这里直接展示如何用Java创建一个基于TCP的CS结构的网络应用。 Server package cn.icexmoon.java.note.ch25; // ... public class Main { public static void main(String[] args) throws IOException { ServerSocke…
图源:PHP中文网 仿真 利用多线程可以编写仿真程序,实际上在Java编程笔记23:并发(3) - 魔芋红茶's blog (icexmoon.cn)中介绍的“赛马游戏”就是一个仿真程序。 这里我们介绍一个更复杂一点的仿真程序。 餐厅 假设我们有一个餐厅,有顾客、侍者、厨师这几个角色,顾客可以通过侍者来点菜,厨师根据订单来做菜,做好菜后由侍者将菜品送给顾客品尝。 package ch24.restaurant; import java.util.ArrayList; import java.util.List;…
图源:PHP中文网 新类库中的构件 JavaSE 5 为并发添加了一些新的组件,这里简单介绍。 CountDownLatch 在编写并发程序时,有时候我们会启动多个线程执行某项工作,而主线程需要等待这些线程完成后在继续执行或者退出。如果是Go或者其它语言,此时就必须使用sync.WaitGroup这样的组件去计数和等待。 关于Go的多线程和sync.WaitGroup,可以阅读Go语言编程笔记7:goroutine和通道 - 魔芋红茶's blog (icexmoon.cn)。 实际上Java也有类似的组件——Co…
魔芋红茶
加一点PHP,加一点Go,加一点Python......
COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED. 本网站由提供CDN加速/云存储服务
Theme Kratos Made By Seaton Jiang