电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

java 定義長度為0的數(shù)組/空數(shù)組案例

瀏覽:4日期:2022-08-15 10:12:59
如下:

int[] array = new int[0]; // 定義一個長度為 0 的數(shù)組 / 空數(shù)組Sring[] arr = new String[0]; // 定義一個長度為 0 的數(shù)組 / 空數(shù)組長度為 0 的數(shù)組 / 空數(shù)組 并不是 null

有時數(shù)組里可能只有一個空字符串 '',這時數(shù)組長度是 1。這種情況也要注意判斷。

if ( arr.length == 1 && arr[ 0 ].equals( '' ) ) { System.out.println( '輸入的數(shù)組不能只包含一個空字符串' ); return;}

補充:java定義一個空數(shù)組_一個 Java 方法,最多能定義多少參數(shù)?

在 JVM 中,一個 Java 方法,最多能定義多少參數(shù)呢?這是一個很無聊的問題,即使能定義一萬個,十萬個,誰又會真的去這么做呢。

但是作為一個 coder,最重要的不就是好奇心嗎,沒有好奇心,和一條咸魚又有什么區(qū)別呢?本文作者就是這樣一位充滿好奇心的 coder。

java 定義長度為0的數(shù)組/空數(shù)組案例

我最近給我的 QuickTheories 分支添加了一個接口:

@FunctionalInterfacepublic interface QuadFunction { E apply(A a, B b, C c, D d);}

讓我好奇的是這個方法能有多少個類型參數(shù)。到目前為止,我敢說,Java 語言規(guī)范并沒有談及這個問題。

對于實現(xiàn)定義的限制可能是什么,我有兩個猜測:

1、編譯器會設(shè)置一個可預(yù)測的限制,如 255 或 65535。

2、編譯器的緊急行為會由于實現(xiàn)細節(jié)(堆棧溢出或同樣不可預(yù)測/不相關(guān)的東西)而設(shè)置意外的限制。

我不想在源代碼上測試我那點可憐的 C++技巧,所以我決定只測試編譯器做了什么。我寫了一個 Python 腳本,它使用二進制搜索找到最少的致錯類型參數(shù)。完整的腳本放在 Github repo (https://github.com/hyperpape/java-max-type-params) 中。

腳本地址:https://github.com/hyperpape/java-max-type-params

生成方法很簡單。幸運的是,我們不必使用任何類型參數(shù),只需以的形式發(fā)出它們:

def write_type_plain(count): with open(’Test.java’, ’w’) as f: f.write('public class Test {n') f.write('public for i in range(count): if (i > 0):f.write(', ') f.write('A' + str(i + 1)) f.write('> void testMethod() {}') f.write('}')

運行二進制搜索可以得到以下輸出:

>>> error: UTF8 representation for string '>>> largest type: 2776

這個錯誤有點模糊,但事后看來是可以預(yù)見的。編譯器生成的類文件包含許多字符串,包括類中每個方法的方法簽名。這些字符串存儲在常量池中,常量池中的條目最大為 65535 字節(jié),這是由 JVM 規(guī)范規(guī)定的限制。

所以,我之前的猜測都不完全正確。類型參數(shù)的最大數(shù)目是一個突現(xiàn)特征(emergent property),而不是一個明確的決定。不過,并不是編譯器本身的實現(xiàn)導(dǎo)致了錯誤。

相反,JVM 的類文件格式限制了可以在類文件中表示的類型參數(shù)的數(shù)量。這是真的,盡管 JVM對泛型一無所知。這也意味著類型參數(shù)的最大數(shù)目完全取決于如何編寫方法。

我嘗試了一種新的編碼類型參數(shù)的方法(先前鏈接文件中的 write_Type_Compact),使用完整的合法 ASCII 字符(A-Z、a-z、$和_)。該實現(xiàn)有點過于復(fù)雜,因為可以使用字符 0~9,但不能是標識符的初始字符,因為 Java 關(guān)鍵字不能作為類型參數(shù)出現(xiàn)。我只是用等長的 UTF-8 字符替換了短單詞「if」和「do」。更緊湊的編碼將參數(shù)數(shù)量從 2776 增加到 3123。

不方便的是,_A 是一種合法的 Java 標識符,但 _ 不是。謝天謝地,我的編碼在不使用初始_情況下就生成了 3392 個 2 字節(jié)類型參數(shù),因此我覺得沒有必要進行簿記以發(fā)出初始字符_。

再來一個小技巧

解壓類文件顯示,65536 個字符的大部分不是我生成的類型參數(shù),而是子字符串 Ljava/lang/object 的重復(fù)實例。因為沒有提供關(guān)于類型參數(shù)的信息,所以類文件顯示它們擴展了對象,并在方法簽名中對其進行編碼。我修改了生成器來解決這個問題。

循環(huán)的關(guān)鍵部分是:

s = type_var(i)f.write(s)if (s != ’A’): f.write(' extends A')

在類型參數(shù)中,除了一個實例 java/Lang/Object 之外的所有實例都被替換為 A。在進行了這個更改之后,編譯了一個具有 9851 個類型參數(shù)的方法。

由于參數(shù)的數(shù)量增加了很多,所以我使用的代碼肯定需要調(diào)整。使用非 ASCII Unicode 標識符可能是完全高效的必要條件,但簡單地指出這是可以做到的我就很滿意了。

這些都不重要

很難想象有人會達到這個極限。代碼生成有時會達到語言或編譯器的限制,但即使生成的代碼似乎也不太可能使用成百上千的類型參數(shù)。

盡管如此,如果我是規(guī)則制定者,我會考慮明確禁止任何類或方法具有 255 個以上的類型參數(shù)。明確的限制似乎更好,即使它只影響百萬分之一的程序。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 多功能三相相位伏安表-变压器短路阻抗测试仪-上海妙定电气 | 智慧养老_居家养老_社区养老_杰佳通 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 圆形振动筛_圆筛_旋振筛_三次元振动筛-河南新乡德诚生产厂家 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 鼓风干燥箱_真空烘箱_高温干燥箱_恒温培养箱-上海笃特科学仪器 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 |