包及访问控制权限
package是在使用多个类或接口时,为力避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。
包的定义格式: ·package 包名称 . 子包名称 ;
package com.xy.demo08; //定义包名称
class Demo
{
public String getInfo(){
return "hello world";
}
}
public class packDemo01
{
public static void main(String args[]){
System.out.println(new Demo().getInfo());
}
}
以上程序编译时应按照以下格式:
javac –d . packDemo01.java
执行时应按照以下格式:
java com.xy.demo08.packDemo01
由以上的程序可以发现,当一个类使用package打包,编译与执行应该按照以下格式:
编译:javac –d . 类名称.java
执行:java 完整包名 . 类名称
包的导入
如果几个类存在不同的包中,则在使用类的时候就必须通过import语句导入。
语法:
·import 包名称 . 子包名称 . 类名称; à手动导入所需要的类
·import 包名称 . 子包名称 . *; à由JVM自动导入所需要的类。
如以下的代码:
Demo.java:
package com.xy.demo08.a;
public class Demo{
public String getInfo(){
return "hello world!!";
}
}
ImportDemo01.java:
package com.xy.demo08.b;
import com.xy.demo08.a.Demo;
public class ImportDemo01
{
public static void main(String args[]){
System.out.println(new Demo().getInfo());
}
}
编译的时候,应该先编译Demo01.java类,之后再编译ImportDemo01.java,因为后者使用了前者包中的类。
注意:在b包中有访问a包中的类,此时a被访问的类必须是public类型的,才能够被外部所访问。而且在开发中对于一个*.java文件往往都只定义一个类:public class
假如说两个包中有同样名称的类,则要使用该类需要加上完整的包名称。
系统常见包
以上内容在java的开发中较为重要,好的程序员会将以上包中的方法记住80%以上。
静态导入
在JDK1.5之后提供了静态导入功能,概念:如果一个类中的方法全部是使用static关键字声明的方法,则在导入的时候就可以直接使用“import static”的方式导入,导入格式如下:
Import static 包 . 类 . *;
staticDemo.java:
package com.xy.demo08.e;
public class staticDemo //该类中方法全部为静态方法
{
public static int add(int i,int j){ //加法操作
return i+j;
}
public static int sub(int i,int j){ //减法操作
return i-j;
}
}
staticImportDemo.java:
package com.xy.demo08.f;
import static com.xy.demo08.e.staticDemo.*; //静态导入 注意导入的是方法 类名结束以后还有.*
public class staticImportDemo
{
public static void main(String args[]){
System.out.println("3 + 2 ="+add(3,2));
}
}
通过以上方法就可以静态导入,特别需要注意的是静态导入的条件是被导入的类里面应该全部都是静态的方法,然后实际上导入的就静态的方法,调用方法的时候就不需要类名称.方法,直接调用方法即可。
Jar命令
当开发者为客户开发了一套JAVA类之后,肯定要把这些类交给用户来使用,但是如果所有的类都是直接通过.class的格式给用户,则会比较麻烦,所以一般情况下回将这些.class文件压缩成一个文件交给客户使用,那么这样的文件就叫做jar文件,(JAVA Arcchive File),如果要想生成jar文件,直接使用JDK中bin目录里的jar.exe可以将所有类文件进行压缩。
此时我们有以下一个java类:
package com.xy.demo;
public class Hello{
public String getInfo(){
return "hello world!!";
}
}
现在要将其打包为jar文件,则需要以下命令:
jar -cvf my.jar com
以上的打包的格式解释:
·-c 创建新的归档文件
·-v 在标准输出中生成详细输出
·-f 指定归档文件名
my.jar为要新创建的jar包名称,com是以com开头的.class文件
假如当前路径为: d:\lession8\packDemo此时在你的当前目录下就会产生一个名为my.jar的文件。
有以下类要使用当前Jar包:
package com.xy.demo08;
import com.xy.demo.Hello;
public class ImportJarDemo
{
public static void main(String args[]){
Hello h=new Hello();
System.out.println(h.getInfo());
}
}
此时需要指定classpath,set classpath=.;d:\lession8\packDemo\my.jar 设置该classpath目的为让JVM正确的找到Hello.class文件,因为在当前系统环境变量下次文件肯定是不存在的,=. 则表示的是在当前目录也可以执行
编译以上代码:
javac -d . ImportJarDemo.java
执行以上代码:
java com.xy.demo08.ImportJarDemo
此时就完成了一个对jar包中.class文件读取的功能。
访问控制权限
Java中存在四种访问权限:private、default、protected、public、使用范围:
private:可以定义方法,属性,定义的方法和属性不能被外部的类看到。
default:可以在本包中的任意地方访问。
protected:保护,不同包的非子类不可以访问。
public:公共的,都可以访问,不受任何的限制。
回顾:
当产生了一个类之后,为了保护类中的属性不被外部看到,则使用private关键字。
但是,如果现在两个有关系的类要进行属性互相访问就比较麻烦,之前可以使用set、get方法取得和设置,所以为了减少私有属性访问的麻烦,使用了内部类,但是内部类本身会破坏程序的结构。为了让一个类的内容可以继承方便的时候,使用了继承的概念,但是在继承中private属性的内容也是子类无法看到的,所以此时,为了方便子类的操作,可以将属性使用protected进行封装,这样一来外部也无法直接看到(不同包);