Kotlin main函數


main() 函數

來仔細看看 main() 函數。實際上,它就是一個很常見的函數:你可以對它做任何你能對普通函數做的事。唯一的不同是:它是程序的入口點(entry point)。這意味著程序的執行從調用這個函數開始。

我們來拆解一下 main() 的結構:

fun main() {}

代碼解釋:

  • fun 是關鍵字,表示我們正在定義一個函數;

  • main 是函數名。這個名字不能改:比如如果你改成 Main(),程序可能會編譯成功,但不會運行;

  • 最后是函數體,和其他函數一樣,寫在 {} 大括號中。

實際上,main() 函數也可以有輸入參數 —— args,它并不是必須的,我們稍后會詳細講它。

總之,除了不能改名,main() 就是一個普通函數。

但它最主要的特點是:它必須存在。沒有它,程序不會啟動。不過,它也可以像其他函數一樣被調用,比如它自己調用自己:

var decrease = 3fun main() {if (decrease == 0)returndecrease = decrease - 1println(decrease)main()
}

代碼解釋:

這個程序中,每次調用 main() 函數都會讓全局變量 decrease 減 1,并輸出當前的值,直到它變成 0。

“全局變量”表示這個變量在整個程序中都可以訪問,包括在 main() 函數內部。

輸出結果如下:

2
1
0

main 函數的參數

其實 main() 函數可以有輸入參數。它們通常被命名為 args,并保存在一個字符串數組中。語法如下:

fun main(args: Array<String>) {}

代碼解釋:

使用 args 的方式和普通數組一樣,例如:

  • args.size:獲取參數個數;

  • args[1]:獲取程序的第二個參數。

那它有什么用?

簡單來說,main() 函數的參數就是程序運行時傳入的數據。你可能見過類似的情景,比如“用某程序打開文件”:這個文件路徑就是通過參數傳給程序的。

所以,借助 args,我們可以給程序傳入外部數據。


命令行與程序參數

我們可以通過 IDE 工具命令行 給程序傳入參數。你可能已經知道在 IDE 中該怎么做。命令行的方式稍微復雜點,但非常重要。

掌握命令行技巧對你以后編程的道路大有幫助。比如,它可以避免為程序構建 GUI 界面。


通過命令行傳參

要從命令行運行程序,你需要一個已經 編譯好的程序

運行命令如下:

$ java -jar filename.jar args

代碼解釋:

  • filename.jar:是你的程序文件;

  • args:是你傳給程序的參數(中間用空格分隔);

示例

以下是一個簡單的例子:

fun main(args: Array<String>) {println(args[0])println(args[1])
}

假設你將它保存為 print_args.kt,然后編譯成 print_args.jar,運行命令如下:

$ java -jar print_args.jar Hello, Kotlin!

輸出結果:

Hello,
Kotlin!

代碼執行如下:

println(args[0]) // Hello,
println(args[1]) // Kotlin!

如果你輸入參數為 "Love""Kotlin!",輸出會變成:

Love
Kotlin!

所以,只通過改變命令行參數,不修改代碼,就可以改變程序輸出。


有參數?沒參數?

main() 函數可以帶參數也可以不帶參數。來看兩個示例:

帶參數的:

fun main(args: Array<String>) {val firstName = "Luke"val lastName = "Skywalker"println(firstName + " " + lastName) // Luke Skywalker
}

不帶參數的:

fun main() {val firstName = "Luke"val lastName = "Skywalker"println(firstName + " " + lastName) // Luke Skywalker
}

兩者都能正常運行。

而且你可以在同一個文件中同時寫這兩種 main()

fun main(args: Array<String>) {println(args[0]) // Loveprintln(args[1]) // Kotlin!
}fun main() {println("Hello, World!") // 不會被調用
}

程序只會從 main(args: Array<String>) 開始執行。

但是注意:你不能在一個文件中寫多個參數一樣的 main()。帶參數或不帶參數的 main() 都只能各寫一個。

你也可以寫帶有其他參數類型的 main(),比如:

fun main(arg: Int) {}
fun main(a: Double, b: String) {}

但這些就只是普通函數了,不會作為程序入口點。

只有 main()main(args: Array<String>) 才能作為程序入口。


總結

  • 程序從 main() 開始執行;

  • 你可以用參數 args 向程序傳入數據;

  • 你可以通過命令行或 IDE 設置這些參數;

  • Kotlin 1.3 以后,main() 可以沒有參數;

  • 同一個文件只能有一個帶參數的 main() 和一個不帶參數的 main()

  • 其他寫法的 main() 會被當作普通函數,不會自動運行。

現在,你已經學會了使用 main() 和程序參數了。你可以不改代碼,僅通過命令行傳參就改變程序行為。這是每個程序員都必須掌握的基礎技能!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89734.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89734.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89734.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解 Spring:事務管理與事件機制全解析

文章目錄前言一、Spring 事務管理&#xff08;Transaction Management&#xff09;1. 使用 Transactional 管理事務2. 核心屬性說明3. 事務傳播行為詳解&#xff08;Propagation&#xff09;4. 異常回滾策略分析5. 底層原理剖析&#xff08;源碼級&#xff09;二、Spring 事件機…

AWD練習的平臺搭建

ubuntu虛擬機搭建 前提資源準備 進行AWD我們需要在一個獨立的虛擬機 現在就來搭建一個ubuntu的 這里我們使用的VMware是17的 然后下載鏡像的地址&#xff1a;Ubuntu最全的國內鏡像下載地址 - 嗶哩嗶哩 我下載的是中科大的 這里需要準備的前提資源就有了。 創建Ubuntu虛…

C++ 詳談繼承體系下的構造函數和析構函數

前言 前面呢, 我們說了C中實現多態的原理, 其中也說了, 虛函數表和虛函數指針的創建時機, C 詳談多態實現原理-CSDN博客 , 這一節呢, 我們會說說在C中繼承體系下的另一個知識點, 那就是: 繼承體系下的構造函數和析構函數~~, 主要圍繞兩個問題: 執行順序? 虛析構函數的作用? …

PostgreSQL 字段類型速查與 Java 枚舉映射

1. 查詢 SQLSELECTc.table_schema,c.table_name,c.column_name,c.data_type,c.udt_name,CASE-- 數值WHEN c.udt_name IN (int2,int4,int8,float4,float8,numeric,money)THEN NUMERIC-- 布爾WHEN c.udt_name boolTHEN BOOLEAN-- 日期/時間WHEN c.udt_name IN (date,time,timetz…

數據分析綜合應用 30分鐘精通計劃

?? 數據分析綜合應用 30分鐘精通計劃(完整版含輸出) ? 時間分配 5分鐘:數據加載與清洗基礎 10分鐘:探索性數據分析(EDA) 10分鐘:數據分析實戰案例 5分鐘:分析報告生成 ?? 第一部分:數據加載與清洗基礎 (5分鐘) 1. 模擬真實數據集 import pandas as pd import nu…

Python爬蟲實戰:研究psd-tools庫相關技術

一、引言 1.1 研究背景 Adobe Photoshop 是目前最流行的圖像處理軟件之一,其原生文件格式 PSD(Photoshop Document)包含了豐富的圖像信息和編輯歷史。PSD 文件不僅在設計領域廣泛使用,還在數字營銷、版權保護和安全分析等領域具有重要價值。然而,手動分析大量 PSD 文件是…

基于卷積傅里葉分析網絡 (CFAN)的心電圖分類的統一時頻方法

一、研究背景與核心問題??ECG分類的挑戰?&#xff1a;心電圖&#xff08;ECG&#xff09;信號分類在心律失常檢測、身份識別等領域至關重要&#xff0c;但傳統方法難以同時有效整合時域和頻域信息。現有方法包括&#xff1a;?時域分類&#xff08;CNN1D&#xff09;??&am…

Linux——LinuxOS

cd,pwd,mkdir,rm,ls,touch,cat,echo,

深度學習篇---矩陣

在機械臂解算、深度學習網絡等硬件和軟件領域中&#xff0c;矩陣運算作為核心數學工具&#xff0c;承擔著數據表示、變換、映射和優化的關鍵作用。以下從具體領域出發&#xff0c;詳細總結涉及的矩陣運算及對應的核心知識&#xff1a;一、機械臂解算領域機械臂解算&#xff08;…

元宇宙:技術烏托邦與數字化未來——基于技術哲學的分析

一、技術哲學視域下的元宇宙本質哲學源流與技術基因的雙重映射理想世界的千年回響&#xff1a;從柏拉圖洞穴隱喻中的影子世界&#xff0c;到普特南“缽中之腦”對虛擬與現實界限的消弭&#xff0c;元宇宙的構想深植于人類對平行世界的永恒追問。中國傳統神話中“天人二元結構”…

如何構建一個基于大模型的實時對話3D數字人?

近年來&#xff0c;隨著元宇宙和AIGC技術的爆發&#xff0c;3D數字人從影視特效走向日常應用。無論是虛擬主播、AI客服&#xff0c;還是數字教師&#xff0c;其核心訴求都是**“能聽、會說、有表情”**的實時交互能力。本文就帶大家了解如何構建一個基于大模型的實時對話的3D數…

NULL值處理:索引優化與業務設計實踐指南

一、NULL值的本質與影響NULL值在數據庫中代表"未知狀態"或"不適用"的特殊標記&#xff0c;與空字符串或0有本質區別12。其特性導致以下業務與性能問題&#xff1a;?語義復雜性?&#xff1a;NULL可能表示"未填寫"(如用戶手機號)或"不適用&…

【add vs commit】Git 中的 add 和 commit 之間的區別

關于git add和git commit還有一些有點不太清楚的地方&#xff0c;這里寫一篇文章好好理一理git add&#xff1a;添加到暫存區 git add實際上是把工作區中的內容存入“暫存區” 通俗來講就是告訴Git&#xff1a;“這些文件我準備好commit了” git add file.txt # 添加單個文件 …

【推薦100個unity插件】使用C#或者unity實現爬蟲爬取靜態網頁數據——Html Agility Pack (HAP)庫和XPath 語法的使用

文章目錄前言一、安裝HtmlAgilityPack1、從NuGet下載HtmlAgilityPack包2、獲取HtmlAgilityPack.dll二、HtmlAgilityPack常用操作1、加載 HTML2、查詢方式2.1 使用 XPath 查詢&#xff08;推薦&#xff09;2.2 使用 LINQ 查詢3、常用查詢操作3.1 選擇節點3.2 獲取屬性值3.3 遍歷…

用 urllib 開啟爬蟲之門:從零掌握網頁數據抓取

在數字時代&#xff0c;數據就是力量。作為一名社會工作者&#xff0c;或許你想了解城市服務資源&#xff1b;作為一個編程初學者&#xff0c;你可能希望從網頁中自動提取新聞、課程或公開數據。今天&#xff0c;我們就來講一講 Python 標準庫中的一把“鑰匙”——urllib 庫&am…

Spring Boot 訂單超時自動取消的 3 種主流實現方案

Spring Boot 訂單超時自動取消的 3 種主流實現方案關鍵詞&#xff1a;Spring Boot、訂單超時、延遲任務、RabbitMQ、Redis、定時任務在電商、外賣、票務等業務中&#xff0c;“下單后若 30 分鐘未支付則自動取消”是一道經典需求。實現方式既要保證 實時性&#xff0c;又要在 高…

0401聚類-機器學習-人工智能

文章目錄一 無監督學習什么是無監督學習&#xff1f;核心特點&#xff1a;無監督學習的主要類型1. 聚類分析 (Clustering)2. 降維 (Dimensionality Reduction)3. 關聯規則學習 (Association Rule Learning)4. 異常檢測 (Anomaly Detection)5. 密度估計 (Density Estimation)二 …

基礎神經網絡模型搭建

nn 包提供通用深度學習網絡的模塊集合&#xff0c;接收輸入張量&#xff0c;計算輸出張量&#xff0c;并保存權重。通常使用兩種途徑搭建 PyTorch 中的模型&#xff1a;nn.Sequential和 nn.Module。 nn.Sequential通過線性層有序組合搭建模型&#xff1b;nn.Module通過__init__…

基于單片機出租車計價器設計

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 本設計實現了一種基于單片機的智能化出租車計價系統。系統以單片機為核心處理器&#xff0c;集成…

134. Java 泛型 - 上限通配符

文章目錄134. Java 泛型 - 上限通配符 (? extends T)**1. 什么是上限通配符 (? extends T)&#xff1f;****2. 為什么使用 ? extends T&#xff1f;****3. 示例&#xff1a;使用 ? extends T 進行數據讀取****? 示例 1&#xff1a;計算數值列表的總和****4. 注意事項&…