国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

當我#include或import的時候,我到底干了什么?

HmyBmny / 3545人閱讀

摘要:事實上,的作用是在寫程序的時候,不用把類或者變量的長長的全名打出來。為了避免與其他下的類混淆,它有一個全名是。這就是的作用了。同樣,每個文件的第一句是告訴編譯器,我這個類是在這個下面的。

C語言中的#include

學習C語言的時候,大家都寫過這么一個hello world

#include 
int main()
{
    printf("hello, world");
    return 0;
}

但如果沒有第一句#include ,編譯是通不過的
因為printf這個函數沒有被聲明,因為C語言要求,函數必須先聲明再調用

事實上,#include 所做的僅僅是把stdio.h這個文件給包括進來了,就像你找到stdio.h文件,并把所有內容復制到main函數的前面,效果是完全一樣的。

stdio.h包括的是對C語言標準庫中一系列函數的聲明(當然也有printf的),通常它在你的編譯器安裝位置的include目錄下。編譯器是會默認的去這個目錄尋找你include的文件的。

所以,#include 之后,程序就能編譯通過了。而printf的實現在C語言標準庫libc.a中,標準庫的實現是會被編譯器自動鏈接進你的程序的。

知道了原理,我們有另一種方式去成功的調用printf函數,那就是自己聲明它。

int printf(const char *format, ...);
int main()
{
    printf("hello, world");
    return 0;
}

相信我,這個程序也是能編譯成功而且輸出正確結果的,因為第一句話和#include 的目的是一樣的,只不過是僅僅聲明了其中一個函數而已。

Java中的import

如果你以為import#include一樣是把整個文件包含進來,那就錯了。事實上,import的作用是在寫程序的時候,不用把類或者變量的長長的全名打出來。

說到這里,不得不說一下Java組織源代碼的方式。
Java的每個public的類都是一個文件,它位于某個package之中,而package則是許多文件夾構成的一個路徑。

如下圖,假設我的Java工程的源代碼都在src文件夾下,cc.chenjr.mypackage就是一個package(注意它實際上就是文件夾),MyClass是這個package下的一個類。

src
└── cc
    └── chenjr
        └── mypackage
            └── MyClass.java

為了避免與其他package下的MyClass類混淆,它有一個全名是cc.chenjr.mypackage.MyClass。比如System的全名是java.lang.System。我們不用去import java.lang.System是因為編譯器幫我們做了這件事。

那在別的文件中要用cc.chenjr.mypackage.MyClass的時候,打全名實在太麻煩,所以我們就告訴編譯器,我這個文件里的MyClass就是cc.chenjr.mypackage.MyClass而不是其他的MyClass。這就是import的作用了。

同樣,每個.java文件的第一句package cc.chenjr.mypackage;是告訴編譯器,我這個類是在這個package下面的。如果這個類的文件被移動到別的文件夾下,是編譯不了的。

當然,如果我們非要用到兩個MyClass,其中有一個就不得不打全名了,比如這樣,假設我自己有和Java庫中名字沖突的類并import了它們,我想用Java的標準庫的類就只能打全名了。

package cc.chenjr.mypackage;
import cc.chenjr.mypackage.List;
import cc.chenjr.mypackage.ArrayList;

public class Test {
    public static void main(String[] args) {
        java.util.List list = new java.util.ArrayList();
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64197.html

相關文章

  • pygame.error: font not initialized解決及init()到底干了什么

    摘要:結果在安裝完之后,安裝也要安裝之后,運行常規的測試函數返回的數字是,排除問題的方法就是把已知可以的子模塊都先運行掉。說了這么多,它到底了哪些子模塊我把官網上面的里介紹的所有帶有的子模塊都運行了一遍。 環境Python3.6.8pygame1.9.4 貼上報錯源碼: import pygame my_font = pygame.font.SysFont(arial, 16) my_fon...

    yunhao 評論0 收藏0
  • Python工具分析風險數據

    摘要:小安分析的數據主要是用戶使用代理訪問日志記錄信息,要分析的原始數據以的形式存儲。下面小安帶小伙伴們一起來管窺管窺這些數據。在此小安一定一定要告訴你,小安每次做數據分析時必定使用的方法方法。 隨著網絡安全信息數據大規模的增長,應用數據分析技術進行網絡安全分析成為業界研究熱點,小安在這次小講堂中帶大家用Python工具對風險數據作簡單分析,主要是分析蜜罐日志數據,來看看一般大家都使用代理i...

    Berwin 評論0 收藏0
  • JavaScript 中 new 到底干了什么,跟原型鏈又有一些什么聯系?

    摘要:原文如果按面向對象的思路去講的,還是很難去理解,我們可以從另一個方向去理解一下它。 原文:https://legacy.ofcrab.com/press/javascript-new.html 如果按面向對象的思路去講 JavaScript 的 new,還是很難去理解,我們可以從另一個方向去理解一下它。 你這些人類 我是一名程序員,也是一個人,我可能: 有一個響亮亮的名稱 在某一天出...

    Cympros 評論0 收藏0
  • "php artisan serve"到底干了什么

    摘要:最近看了一下這個框架,寫點東西當個筆記。函數會迭代屬性為的,逐一將其注冊,的方法繼承自父類,關鍵的就是在這個里注冊的。 最近看了一下 laravel 這個框架,寫點東西當個筆記。跟著官網上的說明 install 好一個項目后,在項目根目錄執行命令php artisan serve就可以開啟一個簡易的服務器進行開發,這個命令到底做了什么,看了一下代碼,在這里簡要描述一下自己的看法。 先說...

    TANKING 評論0 收藏0

發表評論

0條評論

HmyBmny

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<