【18-Ⅰ】Head First Java 学习笔记

HeadFirst Java

本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。

第一章 Java入门
第二章 面向对象
第三章 变量
第四章 方法操作实例变量
第五章 程序实战
第六章 Java函数库
第七章 继承与多态
第八章 深入多态
第九章 构造器与垃圾收集器
第十章 数字与静态
第十一章 异常处理
第十二章 GUI(内部类)
第十三章 Swing
第十四章 保存对象
第十五章 网络与线程
第十六章 数据结构
第十七章 程序发布
第十八章 分布式计算


前言

上一章,介绍了组织、包装、部署java程序。具体学习了可执行的jar。通过jar工具将java程序打包JAR文件交给用户使用。还学习了Java Web Start,JWS,简言之,通过Web发布的可执行JAR。

所有类在同一计算机的同一JVM上的堆空间执行是最便捷的情形。但如安全情境下,只允许服务器程序存取数据库,而客户端程序则在用户计算机上执行。这需要RMI技术,实现Java的远程程序调用。同时,会简要学习Servlet、EJB、Jini技术,了解其如何运用RMI,最后我们创建一个服务端浏览器。
在这里插入图片描述

Remote Method Invocation

同一机器上JVM只会知道自有堆的引用,方法调用时,两个对象都是在同一个堆上。

JVM无法知道其他机器上JVM信息,不同机器上,程序的运行,JVM的调用不同,但功能是一样的
在这里插入图片描述
在这里插入图片描述

调用不同机器上对象的方法

在第十五章,我们知道可以通过Socket链接,从一台机器取得另一台机器的数据,那如果要调用另一个机器上JVM堆上对象的方法呢?

可以自定义通信协议,通过Socket将结果传回

但如果能直接获取引用就方便多了,不妨设计某种机制,使用Socekt的I/O表达意图(调用另一台机器对象的方法),实现远程调用对象,但又如同本机的方法调用——RMI。
在这里插入图片描述

RMI的设计

在这里插入图片描述

helper 的任务

中间桥梁的作用

Cilent helper 连接 Server,传送调用信息(方法名、参数)
Server helper 通过Socket 连接 Cilent helper,解析信息。Service对象调用方法后,其helper将返回值传回
Cilent看似调用远程对象,实际调用本地处理 Socket和串流细节的 代理 helper。
在这里插入图片描述

调用方法的过程

在这里插入图片描述

Java RMI

Java中,RMI已提供helper,使用RMI,无需编写网络的I/O程序,客户端调用远程方法,如同本机方法的调用。

与一般调用区别,本质仍是通过网络发出调用,那就存在抛出异常的风险(涉及Socket与串流)
helper会将调用转成远程,信息的传递与采用的协议有关:JRMP或IIOP
在这里插入图片描述

创建远程服务

简要概括为5个步骤,具体介绍在此图之后。
在这里插入图片描述

创建远程接口
在这里插入图片描述
实现远程接口
Remote是客户端调用的对象,是真正执行方法的类

前三步是设计具体的远程服务(Service),这里第四步执行前,其实必须先执行RMI registry,即后面的步骤4
步骤之所以在后面,只是代码设计的逻辑顺序,但实际执行,向rmi注册stub对象,就是先执行rmi registry。
在这里插入图片描述后续步骤
rmic的具体过程可另外搜索了解
在这里插入图片描述
完整实现代码如下
在这里插入图片描述

实现Remote后,客户端如何取得对应的stub对象

RMI registry

客户端需要stub对象 与 Skelton 对象 交换信息,解传回的序列化数据。
在这里插入图片描述在这里插入图片描述

思考:客户端如何取得stub的类呢?

stub类文件直接给用户
dynamic class downloading:为stub对象加上URL标记,使用HTTP的GET获取类文件,这需要Web服务器提供类文件。

小结

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROS2+TurtleBot3+Cartographer+Nav2实现slam建图和导航

0 引言 入门机器人最常见的应用就是slam建图和导航,本文将详细介绍这一流程, 便于初学这快速上手。 首先对需要用到的软件包就行简单介绍。 turtlebot3: 是一个小型的,基于ros的移动机器人。 学习机器人的很多示例程序都是基于turtlebot3。 …

Java入门之数据类型和变量

1.字面常量 字面常量就是在程序运行中,固定不变的量,例如如下的代码 public class Demo{public static void main(String[] args){System.Out.println("hello world!");System.Out.println(100);System.Out.println(3.14);System.Out.println…

Windows Docker 部署 Etcd 键值存储系统

一、简介 etcd 是一个由 CoreOS 团队发起的开源项目,它用 Go 语言实现,是一个分布式、高可用的键值存储系统。etcd 采用 Raft 算法,确保了数据的强一致性和高可用性,即使集群中有部分节点发生故障,也能保持服务的正常…

Github20K星开源团队协作工具:Zulip

Zulip:让团队协作的每一次交流,都精准高效。- 精选真开源,释放新价值。 概览 随着远程工作的兴起和团队协作的需求不断增加,群组聊天软件成为了日常工作中不可或缺的一部分。Zulip 是github上一个开源的团队协作工具,…

微信支付商户的“商家转账到零钱”产品快速开通指南

微信支付商户的“商家转账到零钱”功能为商家提供了便捷的转账途径,尤其适用于费用报销、员工福利发放、合作伙伴货款或分销返佣等多种场景。那么,如何快速开通这一功能呢,需要快速开通的商户可以联系小编。 首先,确保你的企业已经…

Java | Leetcode Java题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> grayCode(int n) {List<Integer> ret new ArrayList<Integer>();for (int i 0; i < 1 << n; i) {ret.add((i >> 1) ^ i);}return ret;} }

【vivado】 IBERT GT收发器误码率测试

一、前言 IBERT(Integrated Bit Error Ratio Tester),集成误码率测试仪。作为用户来说可以使用这个工具对自己设计的板子中的高速串行收发器进行简单测试&#xff0c;从而判断设计的接口是否有问题。因为这个工具是直接集成到FPGA上&#xff0c;这样一来直接使用这个工具来测试…

能播放SWF文件的FlashPlayer播放器

问题&#xff1a; 你是不是遇到了 flash 动画 放不了了&#xff1f; 以前的flash游戏玩不了了 在网上很难找到好用的&#xff0c;免费Flashplayer播放器&#xff0c; 找到的也没法保存.exe 以前买的课件放不了了 一打开就更新提示&#xff1a; 再不就是意外能打开了但【创建…

前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐Performance api计算持续时间&#x1f496; mark用法&#x1f496; measure用法 ⭐计算echarts渲染的持续时间⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端 performance api使用 —— mark、measure计…

Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

概念如下&#xff1a; 狄尔沃斯定理_百度百科 (baidu.com) 本质就是找要求序列中最长的单调的子序列&#xff08;不一定连续&#xff09;的长度。 模板如下&#xff1a; 时间复杂度为O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

3、架构-事务处理

目录 概述 场景事例 本地事务 实现原子性和持久性 实现隔离性 概述 事务处理几乎在每一个信息系统中都会涉及&#xff0c;它存在的意义是为 了保证系统中所有的数据都是符合期望的&#xff0c;且相互关联的数据之间不 会产生矛盾&#xff0c;即数据状态的一致性&#xff0…

meshlab: pymeshlab合并多个物体模型并保存(flatten visible layers)

一、关于环境 请参考&#xff1a;pymeshlab遍历文件夹中模型、缩放并导出指定格式-CSDN博客 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 本文所给出的例子是https://download.csdn.net/download/weixin_42605076/89233917中的…

np.linalg.norm()

np.linalg.norm()是NumPy中用于计算向量或矩阵的范数的函数。它可以计算不同类型的范数&#xff0c;包括向量的L1范数、L2范数以及矩阵的Frobenius范数等。 基本用法如下, numpy.linalg.norm(x, ordNone, axisNone, keepdimsFalse) x&#xff1a;输入数组&#xff0c;可以是…

Python | Leetcode Python题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:if not nums:return list()results list()nums.sort()visited [False] * len(nums)self.dfs(nums, results, list(), visited, 0)return resultsdef df…

elasticsearch使用Ngram实现任意位数手机号搜索

文章目录 Ngram自定义分词案例实战问题拆解 Ngram分词器定义Ngram分词定义Ngram分词示例Ngram分词应用场景 Ngram分词实战 Ngram自定义分词案例 当对keyword类型的字段进行高亮查询时&#xff0c;若值为123asd456&#xff0c;查询sd4&#xff0c;则高亮结果是&#xff1c;em&a…

欧洲风景(地理)

1.尼斯湖 尼斯湖亦译内斯湖&#xff0c;位于英国苏格兰高原北部的大峡谷中&#xff0c;湖长39公里&#xff0c;宽2.4公里。面积并不大&#xff0c;却很深。传说这儿住着一只水怪&#xff0c;因此吸引了大量游客。 2.伦敦塔桥 伦敦塔桥是从英国伦敦泰晤士河口算起的第一座桥(泰…

类图及类的关系

类图&#xff08;Class Diagram&#xff09;是UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;中的一种图&#xff0c;用于描述系统中类的静态结构&#xff0c;包括类的属性、方法以及类之间的关系。 一、类 类&#xff08;Class&#xff09;…

Elasticsearch - HTTP

文章目录 安装基本语法索引创建索引查看索引删除索引 文档创建文档更新文档匹配查询多条件查询聚合查询映射 安装 https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-0 下载完成启动bin/elasticsearch服务&#xff0c;可以在Postman调试各种请求。 基本语法…

数据库系统概论(超详解!!!)第八节 数据库设计

1.数据库设计概述 数据库设计是指对于一个给定的应用环境&#xff0c;构造&#xff08;设计&#xff09;优化的数据库逻辑模式和物理结构&#xff0c;并据此建立数据库及其应用系统&#xff0c;使之能够有效地存储和管理数据&#xff0c;满足各种用户的应用需求&#xff0c;包…

【Qt问题】windeployqt如何提取Qt依赖库

往期回顾 【Qt问题】Qt Creator 如何链接第三方库-CSDN博客 【Qt问题】Qt 如何带参数启动外部进程-CSDN博客 【Qt问题】VS2019 Qt win32项目如何添加x64编译方式-CSDN博客 【Qt问题】windeployqt如何提取Qt依赖库 考虑这个问题主要是&#xff1a;当我们的程序运行好之后&#…