欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年03月25日 11:17:08   作者:熱帶魚2020  
這篇文章主要介紹了java 定義長度為0的數(shù)組/空數(shù)組案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如下:

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。

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

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

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

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

1、編譯器會設置一個可預測的限制,如 255 或 65535。

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

我不想在源代碼上測試我那點可憐的 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

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

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

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

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

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

再來一個小技巧

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

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

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

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

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

這些都不重要

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

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • 教你利用SpringBoot寫一個屬于自己的Starter

    教你利用SpringBoot寫一個屬于自己的Starter

    如果我們將可獨立于業(yè)務代碼之外的功配置模塊封裝成一個個starter,復用的時候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動裝配,簡直不要太爽,這篇文章主要給大家介紹了關于如何利用SpringBoot寫一個屬于自己的Starter,需要的朋友可以參考下
    2022-03-03
  • java中刪除文件/文件夾的3種方法示例小結

    java中刪除文件/文件夾的3種方法示例小結

    這篇文章主要介紹了java中刪除文件/文件夾的3種方法示例小結,第一種是通過io刪除文件,第二種是通過Files.walk刪除文件,第三種是通過 Files.walkFileTree刪除文件,本文結合示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • Java中類與對象的相關知識點總結

    Java中類與對象的相關知識點總結

    對象是類實例化出來的,對象中含有類的屬性,類是對象的抽象,下面這篇文章主要給大家介紹了關于Java中類與對象的一些相關知識點,需要的朋友可以參考下
    2021-11-11
  • Springboot微服務打包Docker鏡像流程解析

    Springboot微服務打包Docker鏡像流程解析

    這篇文章主要介紹了Springboot微服務打包Docker鏡像流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot模板引擎之Thymeleaf的使用

    SpringBoot模板引擎之Thymeleaf的使用

    這篇文章主要介紹了SpringBoot模板引擎之Thymeleaf的使用,模板引擎是以業(yè)務邏輯層和表現(xiàn)層分離為目的的,將規(guī)定格式的模板代碼轉換為業(yè)務數(shù)據的算法實現(xiàn),它可以是一個過程代碼、一個類,甚至是一個類庫,需要的朋友可以參考下
    2023-10-10
  • Java輕松生成5位隨機數(shù)

    Java輕松生成5位隨機數(shù)

    這篇文章主要介紹了Java輕松生成5位隨機數(shù)的相關資料,需要的朋友可以參考下
    2023-10-10
  • springboot中如何使用minio存儲容器

    springboot中如何使用minio存儲容器

    大家好,本篇文章主要講的是springboot中如何使用minio存儲容器,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 解決java使用axios.js的post請求后臺時無法接收到入參的問題

    解決java使用axios.js的post請求后臺時無法接收到入參的問題

    今天小編就為大家分享一篇解決java使用axios.js的post請求后臺時無法接收到入參的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 在java中使用dom4j解析xml(示例代碼)

    在java中使用dom4j解析xml(示例代碼)

    鑒于目前的趨勢,我們這里來講講Dom4j的基本用法,不涉及遞歸等復雜操作。Dom4j的用法很多,官網上的示例有那么點兒晦澀,這里就不寫了
    2013-10-10
  • Java將對象寫入文件讀出_序列化與反序列化的實例

    Java將對象寫入文件讀出_序列化與反序列化的實例

    下面小編就為大家?guī)硪黄狫ava將對象寫入文件讀出_序列化與反序列化的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論