包 //建立包后同一个文件中的类都属于这个包,所有的类都必须按包名所对应的目录,在硬盘中存放。同一个包中的类在相互调用时,是不用指定包名的。
---在编译时对于下面这个类,用这样的方法 javac -d . TestException 就可以不用自已创建目录,它自己就可以创建一个fhx的目录,然后把所有的类放到里面。
package fhx; //定义包,这样,在下面的所有的类都在这个包中,必须建一个名为fhx的文件夹,将下面编译后的所有的类,都放到这个文件夹中,运行时输入 java fhx.TestException
class Test
{ public int devide(int x,int y) throws Exception
{ int result=x/y;
return result;
}
}
class TestException
{ public static void main(String[] args)
{ try
{ new Test().devide(3,0);}
catch(Exception ex)
{ System.out.println(ex.getMessage()); }
System.out.println("program is running here!");
}
}
---如果一个包中的类要访问另一个包中的类,则那个包中的类前必须加上public
package fhx;
public class Test
{ public int devide(int x,int y) throws Exception
{ int result=x/y;
return result;
}
}
package hx;
class TestException
{ public static void main(String[] args)
{ try
{ new fhx.Test().devide(3,0);} //这里必须打上Test所在的包名,因为一个包中的类在调用另一个包中的类,必须写上完整的包名。
catch(Exception ex)
{ System.out.println(ex.getMessage()); }
System.out.println("program is running here!");
}
}
----如果要多次用到fhx包中的类,可以用import fhx.*; 这样在调用fhx包中的类,就不用再前面加上fhx.了
package hx;
import fhx.*;
class TestException
{ public static void main(String[] args)
{ try
{ new Test().devide(3,0);} //这里就不用写fhx.Text().devide(3,0)
catch(Exception ex)
{ System.out.println(ex.getMessage()); }
System.out.println("program is running here!");
}
}
---如果同时调用两个包,而这两个包又含有相同的类名,调用这个类时必须在类前写上完整的包名
import java.sql.*;
import java.util.*;//它们下有下同的类Data
java.util.Data //调用util下的Data
***java下常用的包***
*java.lang----包含一些java语言的核心类,如String,Math,Integer,System,Thread,提供常用的功能。
*java.awt-----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
*java.applet--包含applet运行所需的一些类。
*java.net-----包含执行与网络相关的操作的类。
*java.io------包含能提供多种输入/输出功能的类。
*java.util----包含一些实用工具类,如定义系统特性,使用与日期日历相关的函数。
***********访问控制*************
-----------------------------------
| |private|defalut|protected|public|
--------------------------------------------------
|同一类 | T | T | T | T |
|同一包中的类 | | T | T | T |
-------------------------------------------------
|子类 | | | T | T |
-------------------------------------------------
|其它包中的类 | | | | T |
--------------------------------------------------
类本身也有访问控制,即在定义类的class关键字前加上访问控制符,但类本身只有两种访问控制,即public和默认,父类不能是private和protected,否则子类无法继承。public修饰的类能被的所有的类访问,默认修饰(即class关键字前没有访问控制符)的类,只能被同一包中的所有类访问。
package fhx;
public class Test
{ public int devide(int x,int y) throws Exception
{ int result=x/y;
return result;
}
void fun1() //前面没有加public,所以别的包中的类不能调用它,只有同一包中的类可以调用它
{...}
private void fun2() //加private只能被同一类中的函数访问
{ fun1(); }
}
package hx;
class TestException
{
public static void main(String[] args)
{ try
{ new fhx.Test().devide(3,0);}
new fhx.Test().fun1(); // 这条语句在编译时出错
catch(Exception ex)
{ System.out.println(ex.getMessage()); }
System.out.println("program is running here!");
}
}
-----------------------------------------------------------------------------------------------
package fhx;
public class Test
{ public int devide(int x,int y) throws Exception
{ int result=x/y;
return result;
}
protected void fun1() //前面加protected,别的类继承这个Test类可以执行fun1()
{...}
private void fun2() //加private只能被同一类中的函数访问
{ fun1();
}
}
package hx;
class TestException
{ class TestSub extends fhx.Test //因为fun1()前面有protect,所以这里可以调用fun1()
{ public void fun3()
{ fun1();}
}
public static void main(String[] args)
{ try
{ new fhx.Test().devide(3,0);}
new fhx.Test().fun1(); // 虽然fun1前有protect,但是这条语名编译时出错,因为只有继承Test的类能用
catch(Exception ex)
{ System.out.println(ex.getMessage()); }
System.out.println("program is running here!");
}
}
*********jar文件**********
jar -cf 新建文件名.jar 压缩的目录
jar -cvf 新建文件名.jar 压缩的目录 //在压缩时显示详细信息
jar -cvf 新建文件名.jar 压缩的目录/* //这样就会把该目录也加到jar这个压缩文件中
jar -cvf 新建文件名.jar 压缩的目录1 压缩的目录2 //同是压缩多个目录
jar -tf 文件名.jar //显示jar中的详细目录信息
jar -tvf 文件名.jar //显示jar中的更为详细目录信息
jar -tvf 文件名.jar >1.txt //将jar中的文件定向到1.txt中
jar -xvf 文件名.jar //解压文件,显示详细信息