生僻用法:finally and return

本文探讨了Java中使用finaly块修改返回值时可能出现的问题,特别是对于引用类型与基本类型的处理差异。通过示例代码展示了如何正确处理finally块内的逻辑,避免因意外覆盖而导致的错误。

本质上还是 reference 与 primitive value 的问题 ,在 finaly 中修改了返回值 与 调用return 与否,不小心的话可能会出错的。所以,一般finally用来销毁资源就好了,别和返回值扯上。

 

示例:

 

/*
 * @author yiminghe
 * @date 2009.08.26
 */
public class Parent {
	int i = 0;

	static Parent test() {

		Parent p = new Parent();
		try {
			return p;
		} catch (Exception e) {

		} finally {
			// 已经返回引用到一个新值了,但是p和返回引用值指向同一个i,仍然可以修改
			p.i = 2;

		}

		System.out.println("ok");
		return p;
	}
	
	

	static int testInt() {

		int i = 1;
		try {
			return i;
		} catch (Exception e) {

		} finally {
			// 已经返回到一个新值了,局部变量和返回值没关系了,i局部变量改了没用
			i = 2;
			
		}
		System.out.println("ok");
		return i;
	}
	
	static int testInt2() {

		int i = 1;
		try {
			return i;
		} catch (Exception e) {

		} finally {
			// 只能再次返回了
			i = 2;
			return i;
		}
		//System.out.println("ok");
		//return i;
	}

	public static void main(String[] args) {
		System.out.println(test().i);
		System.out.println(testInt());
		System.out.println(testInt2());
	}

}
import socket import json import struct import time import random def send_realtime_data_via_socket(server_host='127.0.0.1', server_port=12345): """ 将实时数据转换为JSON格式并通过Socket发送。 参数: server_host: 服务器IP地址(默认本地) server_port: 服务器端口号 """ # 创建Socket连接 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: client_socket.connect((server_host, server_port)) print(f"已连接到服务器 {server_host}:{server_port}") # 模拟实时数据发送(每秒1次) while True: # 1. 生成实时数据(示例:传感器数据) realtime_data = { "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "temperature": round(random.uniform(20.0, 30.0), 2), # 随机温度值 "humidity": round(random.uniform(40.0, 80.0), 2), # 随机湿度值 "device_id": "sensor_001" } # 2. 转换为JSON字符串 json_data = json.dumps(realtime_data, ensure_ascii=False) # ensure_ascii=False支持中文 print(f"生成JSON数据: {json_data}") # 3. 添加报头:先打包数据长度(4字节) header = struct.pack('I', len(json_data)) # 'I'表示4字节无符号整数 # 4. 将JSON字符串编码为bytes body = json_data.encode('utf-8') # 5. 发送数据:报头 + 主体 client_socket.sendall(header + body) print("数据发送成功!") # 等待1秒,模拟实时性 time.sleep(1) except Exception as e: print(f"传输错误: {e}") finally: client_socket.close() print("连接已关闭") # 测试运行(需先启动服务器) if __name__ == "__main__": send_realtime_data_via_socket()我发送时将数据humidity改成中文,发不出去了怎么改
08-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值