最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

如下:

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

長度為 0 的數(shù)組 / 空數(shù)組 并不是 null

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

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

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

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

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

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

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

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

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

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

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

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

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

生成方法很簡單。幸運(yùn)的是,我們不必使用任何類型參數(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("}")

運(yùn)行二進(jìn)制搜索可以得到以下輸出:

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

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

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

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

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

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

再來一個(gè)小技巧

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

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

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

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

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

這些都不重要

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

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 簡單聊一聊Spring中Bean別名的處理原理

    簡單聊一聊Spring中Bean別名的處理原理

    今天來和小伙伴們聊一聊 Spring 中關(guān)于 Bean 別名的處理邏輯,別名,顧名思義就是給一個(gè) Bean 去兩個(gè)甚至多個(gè)名字,整體上來說,在 Spring 中,有兩種不同的別名定義方式,感興趣的小伙伴跟著小編一起來看看吧
    2023-09-09
  • Java的Socket實(shí)現(xiàn)長連接以及數(shù)據(jù)的發(fā)送和接收方式

    Java的Socket實(shí)現(xiàn)長連接以及數(shù)據(jù)的發(fā)送和接收方式

    這篇文章主要介紹了Java的Socket實(shí)現(xiàn)長連接以及數(shù)據(jù)的發(fā)送和接收方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 自定義SpringBoot的白標(biāo)錯(cuò)誤頁面的操作方法

    自定義SpringBoot的白標(biāo)錯(cuò)誤頁面的操作方法

    Spring Boot的白標(biāo)錯(cuò)誤頁面是在應(yīng)用程序出現(xiàn)錯(cuò)誤時(shí)(如404或500 HTTP狀態(tài)碼)自動(dòng)生成的默認(rèn)錯(cuò)誤頁面,下面小編給大家分享如何自定義SpringBoot的白標(biāo)錯(cuò)誤頁面,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • java??常見位邏輯運(yùn)算符梳理

    java??常見位邏輯運(yùn)算符梳理

    這篇文章主要介紹了java常見位邏輯運(yùn)算符梳理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參一下下面文章詳細(xì)內(nèi)容
    2022-08-08
  • SpringBoot使用MockMvc進(jìn)行單元測試的實(shí)例代碼

    SpringBoot使用MockMvc進(jìn)行單元測試的實(shí)例代碼

    在Spring Boot應(yīng)用程序中,使用MockMvc進(jìn)行單元測試是一種有效的方式,可以驗(yàn)證控制器的行為和API的正確性,在這篇博客中,我們將介紹如何使用MockMvc對(duì)用戶控制器進(jìn)行測試,感興趣的朋友可以參考下
    2024-01-01
  • 關(guān)于@Component注解下的類無法@Autowired問題

    關(guān)于@Component注解下的類無法@Autowired問題

    這篇文章主要介紹了關(guān)于@Component注解下的類無法@Autowired問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot四種讀取properties文件的方式(小結(jié))

    SpringBoot四種讀取properties文件的方式(小結(jié))

    這篇文章主要介紹了SpringBoot四種讀取properties文件的方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java中的攔截器、過濾器、監(jiān)聽器用法詳解

    Java中的攔截器、過濾器、監(jiān)聽器用法詳解

    這篇文章主要介紹了Java中的攔截器、過濾器、監(jiān)聽器用法,詳細(xì)分析了Java攔截器、過濾器、監(jiān)聽器的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-05-05
  • SpringBoot整合MongoDB全過程

    SpringBoot整合MongoDB全過程

    這篇文章主要介紹了SpringBoot整合MongoDB全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring實(shí)現(xiàn)對(duì)象注入的三種方法詳解

    Spring實(shí)現(xiàn)對(duì)象注入的三種方法詳解

    這篇文章主要為大家學(xué)習(xí)介紹了Spring中實(shí)現(xiàn)對(duì)象注入的三種常用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-07-07

最新評(píng)論

古田县| 扬州市| 莎车县| 无为县| 五莲县| 济宁市| 丰镇市| 象州县| 武宣县| 邯郸市| 梁平县| 古交市| 广水市| 岳普湖县| 永宁县| 樟树市| 乃东县| 清苑县| 明溪县| 麦盖提县| 徐州市| 延津县| 黔西县| 天津市| 罗源县| 广东省| 景洪市| 榆林市| 东乡县| 沈丘县| 双峰县| 丘北县| 洱源县| 威远县| 威信县| 盘锦市| 武安市| 武清区| 桃园县| 鄂伦春自治旗| 珲春市|