亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中import導(dǎo)入的用法說明

 更新時間:2022年06月21日 10:34:20   作者:張子又  
這篇文章主要介紹了Java中import導(dǎo)入的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

import導(dǎo)入的用法

可以導(dǎo)入類,導(dǎo)入包,導(dǎo)入項目

導(dǎo)入方式

1:全局導(dǎo)入:導(dǎo)入聲明在方法外

2:局部導(dǎo)入:導(dǎo)入聲明在方法中

當(dāng)你自定義的類和系統(tǒng)的類重名的時候,如果要使用系統(tǒng)類,就得使用局部導(dǎo)入

注意:盡量不要寫系統(tǒng)類名

只有當(dāng)把這個類導(dǎo)入到你的當(dāng)前類中,這個類中的屬性和方法,你才能調(diào)用

導(dǎo)入方式

導(dǎo)入單獨(dú)的類

  • java.util.Date

導(dǎo)入當(dāng)前包的所有類

java.util.*; *是一個通配符

如果導(dǎo)入兩個同名的類,只能用包名+類名來顯示調(diào)用相關(guān)類

舉例:在java中國有2個日期類

  • java.util.Date
  • java.sql.Date;

導(dǎo)包的時候要注意

1:要么一個導(dǎo)入全局,一個導(dǎo)入局部

2:兩個都局部導(dǎo)入

每一個類至少會提供一個構(gòu)造方法 :但是有的類會讓構(gòu)造方法私有化,不讓外界new對象

如果這個類不讓new對象,那么這個類中的成員方法都將是靜態(tài)方法,直接通過類名.方法名 即可

靜態(tài)導(dǎo)入的作用:用于導(dǎo)入指定類的靜態(tài)屬性

JDK5.0后增加!

export 導(dǎo)出

 package com.sss.day.test;
    import java.util.Arrays;
    import static java.lang.Math.PI; 
    public class MyScanner {
	
	/*
	 * 利用鍵盤錄入一個整型數(shù)字
	 * 
	 * 
	 */
	
	public static void show(){
		
	}
	
	public static void main(String[] args) {
		
		System.out.println(PI);
		
		java.util.Date date = new java.util.Date();
		java.sql.Date date2 = new java.sql.Date(123L);
    /*
    		MyScanner sc = new MyScanner();  //自己的Scanner  沒有 任何功能
    		//java.util.Scanner sc2 = new java.util.Scanner(System.in);
    		Scanner sc2 =new Scanner(System.in);
 
    Date date = new Date(); //局部導(dǎo)入
    		System.out.println(date);*/	
	}
    }

java中import作用

import與package機(jī)制相關(guān),這里先從package入手,再講述import以及static import的作用。

package

C/C++ 的 #include會把所包含的內(nèi)容在編譯時添加到程序文件中,而java的import則不同。

這里我們先了解一下Java 的 package 到底有何用處。

package名稱就像是我們的姓,而class名稱就像是我們的名字 。package和package的附屬關(guān)系用"."來連接,這就像是復(fù)姓。比如說 java.lang.String就是復(fù)姓 java.lang,名字為 String 的類別;java.io.InputStream 則是復(fù)姓 java.io,名字為 InputStream的類別。

Java 會使用 package 這種機(jī)制的原因也非常明顯,就像我們?nèi)⌒彰粯?,光是一間學(xué)校的同一屆同學(xué)中,就有可能會出現(xiàn)不少同名的同學(xué),如果不取姓的話,那學(xué)校在處理學(xué)生資料,或是同學(xué)彼此之間的稱呼,就會發(fā)生很大的困擾。相同的,全世界的 Java 類數(shù)量,恐怕比日本人還多,如果類別不使用package名稱,那在用到相同名稱的不同類時, 就會產(chǎn)生極大的困擾。所以package這種方式讓極大降低了類之間的命名沖突。

Java 的package名稱我們可以自己取,不像人的姓沒有太大的選擇 ( 所以出現(xiàn)很多同名同姓的情況 ),如果依照 Sun 的規(guī)范來取套件名稱,那理論上不同人所取的套件名稱不會相同 ( 需要的話請參閱 “命名慣例” 的相關(guān)文章 ),也就不會發(fā)生名稱沖突的情況。

可是現(xiàn)在問題來了,因為很多package的名稱非常的長,在編程時,要使用一個類要將多個包名.類名完全寫出,會讓代碼變得冗長,減低了簡潔度。例如

java.io.InputStream is = java.lang.System.in;
java.io.InputStreamReader isr= new java.io.InputStreamReader(is);
java.io.BufferedReader br = new java.io.BufferedReader(isr);

顯得非常麻煩,于是Sun公司就引入了import。

import

import就是在java文件開頭的地方,先說明會用到那些類別。

接著我們就能在代碼中只用類名指定某個類,也就是只稱呼名字,不稱呼他的姓。

首先,在程序開頭寫:

import java.lang.System;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

于是我們就可以在程序中這樣寫到:

InputStream = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

一個java文件就像一個大房間,我們在門口寫著在房間里面的class的姓和名字,所以在房間里面提到某個class就直接用他的名字就可以。例如:

System 就是指 java.lang.System,而 InputStream 就是指 java.io.InputStream。

但是如果一個java文件里面有多個同個“姓”,即包名相同的類(例如上面的InputStream,InputStreamReader,BufferedReader都是java.io中的類),我們一一寫出顯得比較繁雜,所以Sun就讓我們可以使用

import java.lang.*;
import java.io.*;

表示文件里面說到的類不是java.lang包的就是java.io包的。編譯器會幫我們選擇與類名對應(yīng)的包。

那我們可不可以再懶一點(diǎn)直接寫成下面聲明呢?

import java.*;

歷史告訴我們,這樣是不行的。因為那些類別是姓 java.io 而不是姓 java。就像姓『諸葛』的人應(yīng)該不會喜歡你稱他為『諸』 先生吧。這樣寫的話只會將java包下的類聲明,而不不會聲明子包的任何類。

這里注意,java.lang包里面的類實(shí)在是太常太常太常用到了,幾乎沒有類不用它的, 所以不管你有沒有寫 import java.lang,編譯器都會自動幫你補(bǔ)上,也就是說編譯器只要看到?jīng)]有姓的類別,它就會自動去lang包里面查找。所以我們就不用特別去 import java.lang了。

一開始說 import 跟 #include 不同,是因為import 的功能到此為止,它不像#include 一樣,會將其他java文件的內(nèi)容載入進(jìn)來。import 只是讓編譯器編譯這個java文件時把沒有姓的類別加上姓,并不會把別的文件程序?qū)戇M(jìn)來。你開心的話可以不使用import,只要在用到類別的時候,用它的全部姓名來稱呼它就行了(就像例子一開始那樣),這樣跟使用import功能完全一樣。

import的兩種導(dǎo)入聲明

單類型導(dǎo)入(single-type-import)

(例:import java.util.ArrayList; )

按需類型導(dǎo)入(type-import-on-demand)

(例:import java.util.*;)

有如下屬性:

java以這樣兩種方式導(dǎo)入包中的任何一個public的類和接口(只有public類和接口才能被導(dǎo)入)

上面說到導(dǎo)入聲明僅導(dǎo)入聲明目錄下面的類而不導(dǎo)入子包,這也是為什么稱它們?yōu)轭愋蛯?dǎo)入聲明的原因。

導(dǎo)入的類或接口的簡名(simple name)具有編譯單元作用域。這表示該類型簡名可以在導(dǎo)入語句所在的編譯單元的任何地方使用.這并不意味著你可以使用該類型所有成員的簡名,而只能使用類型自身的簡名。

例如: java.lang包中的public類都是自動導(dǎo)入的,包括Math和System類.但是,你不能使用它們的成員的簡名PI()和gc(),而必須使用Math.PI()和System.gc().你不需要鍵入的是java.lang.Math.PI() java.lang.System.gc()。

程序員有時會導(dǎo)入當(dāng)前包或java.lang包,這是不需要的,因為當(dāng)前包的成員本身就在作用域內(nèi),而java.lang包是自動導(dǎo)入的。java編譯器會忽略這些冗余導(dǎo)入聲明(redundant import declarations)。

即使像這樣

import java.util.ArrayList;
import java.util.*;

多次導(dǎo)入,也可編譯通過。編譯器會將冗余導(dǎo)入聲明忽略.

static import靜態(tài)導(dǎo)入

在Java程序中,是不允許定義獨(dú)立的函數(shù)和常量的。即什么屬性或者方法的使用必須依附于什么東西,例如使用類或接口作為掛靠單位才行(在類里可以掛靠各種成員,而接口里則只能掛靠常量)。

如果想要直接在程序里面不寫出其他類或接口的成員的掛靠單元,有一種變通的做法 :

將所有的常量都定義到一個接口里面,然后讓需要這些常量的類實(shí)現(xiàn)這個接口(這樣的接口有一個專門的名稱,叫(“Constant Interface”)。這個方法可以工作。但是,因為這樣一來,就可以從“一個類實(shí)現(xiàn)了哪個接口”推斷出“這個類需要使用哪些常量”,有“會暴露實(shí)現(xiàn)細(xì)節(jié)”的問題。

于是J2SE 1.5里引入了“Static Import”機(jī)制,借助這一機(jī)制,可以用略掉所在的類或接口名的方式,來使用靜態(tài)成員。static import和import其中一個不一致的地方就是static import導(dǎo)入的是靜態(tài)成員,而import導(dǎo)入的是類或接口類型

如下是一個有靜態(tài)變量和靜態(tài)方法的類

package com.assignment.test;
public class staticFieldsClass {
	static int staticNoPublicField = 0; 
	public static int staticField = 1;
    public static void staticFunction(){}
}

平時我們使用這些靜態(tài)成員是用類名.靜態(tài)成員的形式使用,即staticFieldsClass.staticField或者staticFieldsClass.staticFunction()。

現(xiàn)在用static import的方式:

//**精準(zhǔn)導(dǎo)入**
//直接導(dǎo)入具體的靜態(tài)變量、常量、方法方法,注意導(dǎo)入方法直接寫方法名不需要括號。
import static com.assignment.test.StaticFieldsClass.staticField;
import static com.assignment.test.StaticFieldsClass.staticFunction;
//或者使用如下形式:
//**按需導(dǎo)入**不必逐一指出靜態(tài)成員名稱的導(dǎo)入方式
//import static com.assignment.test.StaticFieldsClass.*;
public class StaticTest {
    public static void main(String[] args) {
	    //這里直接寫靜態(tài)成員而不需要通過類名調(diào)用
        System.out.println(staticField);
        staticFunction();
    }
}

這里有幾個問題需要弄清楚:

  • Static Import無權(quán)改變無法使用本來就不能使用的靜態(tài)成員的約束,上面例子的StaticTest和staticFieldsClass不是在同一個包下,所以StaticTest只能訪問到staticFieldsClass中public的變量。使用了Static Import也同樣如此。
  • 導(dǎo)入的靜態(tài)成員和本地的靜態(tài)成員名字相同起了沖突,這種情況下的處理規(guī)則,是“本地優(yōu)先。
  • 不同的類(接口)可以包括名稱相同的靜態(tài)成員。例如在進(jìn)行Static Import的時候,出現(xiàn)了“兩個導(dǎo)入語句導(dǎo)入同名的靜態(tài)成員”的情況。在這種時候,J2SE 1.5會這樣來加以處理:
  • 如果兩個語句都是精確導(dǎo)入的形式,或者都是按需導(dǎo)入的形式,那么會造成編譯錯誤。
  • 如果一個語句采用精確導(dǎo)入的形式,一個采用按需導(dǎo)入的形式,那么采用精確導(dǎo)入的形式的一個有效。

大家都這么聰明上面的幾個特性我就不寫例子了。

static import這么叼那它有什么負(fù)面影響嗎?

答案是肯定的,去掉靜態(tài)成員前面的類型名,固然有助于在頻繁調(diào)用時顯得簡潔,但是同時也失去了關(guān)于“這個東西在哪里定義”的提示信息,理解或維護(hù)代碼就呵呵了。但是如果導(dǎo)入的來源很著名(比如java.lang.Math),這個問題就不那么嚴(yán)重了。

按需導(dǎo)入機(jī)制

使用按需導(dǎo)入聲明是否會降低Java代碼的執(zhí)行效率?

絕對不會!

一、import的按需導(dǎo)入

import java.util.*;
public class NeedImportTest {
? ? public static void main(String[] args) {
? ? ? ? ArrayList tList = new ArrayList();
? ? }
}

編譯之后的class文件 :

//import java.util.*被替換成import java.util.ArrayList
//即按需導(dǎo)入編譯過程會替換成單類型導(dǎo)入。
import java.util.ArrayList;
public class NeedImportTest {
? ? public static void main(String[] args) {
? ? ? ? new ArrayList();
? ? }
}

二、static import的按需導(dǎo)入

import static com.assignment.test.StaticFieldsClass.*;
public class StaticNeedImportTest {
? ? public static void main(String[] args) {
? ? ? ? System.out.println(staticField);
? ? ? ? staticFunction();
? ? }
}

上面StaticNeedImportTest 類編譯之后 :

//可以看出 :?
//1、static import的精準(zhǔn)導(dǎo)入以及按需導(dǎo)入編譯之后都會變成import的單類型導(dǎo)入
import com.assignment.test.StaticFieldsClass;
public class StaticNeedImportTest {
? ? public static void main(String[] args) {
? ? //2、編譯之后“打回原形”,使用原來的方法調(diào)用靜態(tài)成員
? ? ? ? System.out.println(StaticFieldsClass.staticField);
? ? ? ? StaticFieldsClass.staticFunction();
? ? }
}

附加 

這是否意味著你總是可以使用按需導(dǎo)入聲明? 

是,也不是!

在類似Demo的非正式開發(fā)中使用按需導(dǎo)入聲明顯得很有用。

然而,有這四個理由讓你可以放棄這種聲明:

  • 編譯速度:在一個很大的項目中,它們會極大的影響編譯速度.但在小型項目中使用在編譯時間上可以忽略不計。
  • 命名沖突:解決避免命名沖突問題的答案就是使用全名。而按需導(dǎo)入恰恰就是使用導(dǎo)入聲明初衷的否定。
  • 說明問題:畢竟高級語言的代碼是給人看的,按需導(dǎo)入看不出使用到的具體類型。
  • 無名包問題:如果在編譯單元的頂部沒有包聲明,Java編譯器首選會從無名包中搜索一個類型,然后才是按需類型聲明。如果有命名沖突就會產(chǎn)生問題。

Sun的工程師一般不使用按需類型導(dǎo)入聲明.這你可以在他們的代碼中找到:

在java.util.Properties類中的導(dǎo)入聲明:

import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.security.AccessController;
import java.security.PrivilegedAction;

可以看到他們用單類型導(dǎo)入詳細(xì)的列出了需要的java.io包中的具體類型。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring boot實(shí)現(xiàn)在request里解密參數(shù)返回

    spring boot實(shí)現(xiàn)在request里解密參數(shù)返回

    這篇文章主要介紹了Spring Boot實(shí)現(xiàn)在request里解密參數(shù)返回操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中的Map集合根據(jù)key值排序的實(shí)現(xiàn)

    Java中的Map集合根據(jù)key值排序的實(shí)現(xiàn)

    本文主要介紹了Java中的Map集合如何根據(jù)key值排序,包含使用TreeMap和使用lambda表達(dá)式和Stream流兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • java多線程模擬搶紅包功能

    java多線程模擬搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了java多線程模擬搶紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java  Swing基礎(chǔ)教程之圖形化實(shí)例代碼

    java Swing基礎(chǔ)教程之圖形化實(shí)例代碼

    這篇文章主要介紹了java Swing基礎(chǔ)教程之圖形化實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java理論基礎(chǔ)Stream性能論證測試示例

    java理論基礎(chǔ)Stream性能論證測試示例

    這篇文章主要為大家介紹了java理論基礎(chǔ)Stream性能論證的測試示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Spring Boot中@value的常見用法及案例

    Spring Boot中@value的常見用法及案例

    @Value注解是Spring框架中強(qiáng)大且常用的注解之一,本文主要介紹了SpringBoot中@value的常見用法及案例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • java實(shí)現(xiàn)字符串排列組合問題

    java實(shí)現(xiàn)字符串排列組合問題

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)字符串排列組合問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • SpringMVC中的DispatcherServlet初始化流程詳解

    SpringMVC中的DispatcherServlet初始化流程詳解

    這篇文章主要介紹了SpringMVC中的DispatcherServlet初始化流程詳解,DispatcherServlet這個前端控制器是一個Servlet,所以生命周期和普通的Servlet是差不多的,在一個Servlet初始化的時候都會調(diào)用該Servlet的init()方法,需要的朋友可以參考下
    2023-12-12
  • Java 類動態(tài)添加屬性字段的操作

    Java 類動態(tài)添加屬性字段的操作

    這篇文章主要介紹了Java 類動態(tài)添加屬性字段的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 淺談IDEA實(shí)用的Servlet模板

    淺談IDEA實(shí)用的Servlet模板

    今天給大家分享一下IDEA實(shí)用的Servlet模板,文中有非常詳細(xì)的圖文介紹及代碼示例,對小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05

最新評論