12-22java面向對象之package & import

1.包(package

包的定義可以理解爲一個文件夾,在這個文件夾內集成了編譯好的class類。

格式:

package  類保存的文件夾位置;

其中保存的文件夾位置是該java文件所在目錄中。

案例:

package pack.demo.a;
class A
{
	public String getInfo()
	{
		return "hello world !";
	}
}
public class TestPackage 
{
	public static void main(String[] args) 
	{
		A a = new A();
		System.out.println(a.getInfo());
	}
}


注意:

1、此時在編譯的時候要限定該文件的位置

javac -d . TestPackage.java

-d . 表示的是java文件所在的位置

2、解釋的時候要把主類所在的位置標註

java pack.demo.a.TestPackage

更深入的理解package——他主要的作用是讓開發人員確定好自己的主類存放在那個位置,便於不同開發人員同時工作,只用路徑表明出類的不同。

3、定義了包之後,實際上該類的名稱也會發生相應的變化  

 包.類名。類似於System.out.println

2.包的導入(import

不同開發人員在相互交互的時候,需要使用別人的類,那麼總不能把每個類都抄過來吧?Java中使用了import關鍵字作爲引用別的class包工具。

格式:

Import .類名;    (手工導入)

或者  import .*;  (JVM自動加載)

以上兩種方式的效率是相同的。

案例:

準備
package pack.demo.b;			// 定義包存放的位置
public class A					// 定義包便於後續引用,一定要注意該類必須是public
{
	public String getInfo()
	{
		return "hello world !";
	}
}
//引用已經存在的類A
package pack.demo.c;			//將該類放在c文件下
import pack.demo.b.A ;			//引用類A,下面使用類A時候要把前面的路徑帶上
public class TestPackage2 
{
	public static void main(String[] args) 
	{
		A  a = new A();
		System.out.println(a.getInfo());
	}
}

編譯和解釋的時候注意

javac -d . TestPackage2.java

java pack.demo.c.TestPackage2

注意:

引用別的類時,這個被引用的類一定要定義爲public,並且import關鍵字後面緊跟着路徑。

案例:

//引用已經存在的類A
package pack.demo.d;			//將該類放在c文件下
import pack.demo.b.* ;			//如果這個包中有喝多的類
public class TestPackage3 
{
	public static void main(String[] args) 
	{
		A  a = new A();
		System.out.println(a.getInfo());
	}
}

現在在導入完包之後,直接使用了包中類的名稱,但是如果導入不同的包,而且不同的包只是類名稱不同又該怎麼辦呢?

前期準備

//e包下的B類
package pack.demo.e;	
public class B
{
	public String getInfo()
	{
		return "hello world ->class e.B";
	}
}

//f包下的B類
package pack.demo.f;	
public class B
{
	public String getInfo()
	{
		return "hello world ->class e.B";
	}
}

//本例測試的是引用不同包中同名類
package pack.demo.g;			// 將該類放在g文件下
import pack.demo.e.* ;			// 引用的是e包下的B類
import pack.demo.f.* ;			// 引用的是f包下的B類
public class TestPackage5 
{
	public static void main(String[] args) 
	{
		pack.demo.e.B b1 = new pack.demo.e.B();			// 引用的是e包下的B類
		pack.demo.f.B b2 = new pack.demo.f.B();			// 引用的是f包下的B類
		System.out.println(b1.getInfo());
		System.out.println(b2.getInfo());
	}
}

結果


2.靜態導入

JDK1.5之後,提供了靜態導入。如果類中的屬性和方法全是是static聲明,那麼在被引用時就要使用靜態導入。

格式:

Import static ..* ;

案例:

準備工作
// 靜態類的定義
package pack.demo.h ;		// 放入h包中
public class PubStatic 
{
	public static int add(int i, int j)
	{
		return i+j ;
	}
	public static int sub(int i, int j)
	{
		return i-j ;
	}
		public static int mul(int i, int j)
	{
		return i*j ;
	}
		public static int div(int i, int j)
	{
		return i/j ;
	}
}
//靜態類的測試
package pack.demo.i;					// 將該類放在i文件下
import static pack.demo.h.PubStatic.* ;			// 引用的是h包下的靜態類
public class TestPackage6 
{
	public static void main(String[] args) 
	{
		pack.demo.h.PubStatic aa = new pack.demo.h.PubStatic();
		System.out.println("2+1=" + aa.add(2,1));   //也可以直接省略進行引用
		System.out.println("2-1=" + aa.sub(2,1));
		System.out.println("2*1=" + aa.mul(2,1));
		System.out.println("2/1=" + aa.div(2,1));
	}
}

2.jar

在開發完成之後,要把所有的類交給用戶使用,如果此時單單把幾百上千的類給用戶,用戶會瘋掉的,把這些.class壓縮給用戶。

//jar包的測試
package j ;
public class Hello
{
	public String getInfo()
	{
		return "hello" ;
	}
}

將其打成jar

jar cvf Hello.jar j

F:\Reliability\java\work\Package>Hello.jar; .

已添加清單

正在添加: j/(輸入 = 0) (輸出 = 0)(存儲了 0%)

正在添加: j/Hello.class(輸入 = 271) (輸出 = 208)(壓縮了 23%)

這時候可以把外層的j刪除,一個jar包如果想使用的話,則必須配置classpath路徑。

Set classpath =.; F:\Reliability\java\work\Package\Hello.jar

//靜態類的測試
package pack.demo.k;					// 將該類放在k文件下
import j.Hello ;				// 引用的是之前的類
public class TestPackage7 
{
	public static void main(String[] args) 
	{
		Hello h = new Hello();
		System.out.println(h.getInfo());
	}
}


祝大家健健康康,快快樂樂。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章