package&import

 


 

一、包

1、作用:

         对类文件进行分类管理;

         给类提供多层命名空间;

         也为了避免类重名;

2、包的定义:

         package,要放在源文件的第一条语句;

         包名所有的字母都小写;

         注意:有包名后,编译运行时要把包名带上;类的全名是必须要带包的;否则就是错误的类名;如果不带报名,编译时不会出错,但是运行时会抛出错误NoClassDefFoundError,即错误的类名;

         包的目录和文件夹目录是一样的;

         编译运行格式:包名.文件名.java

        

         如果没有包,在编译时加一些参数可以自动生成包文件;

         javac–d 指定包的目录,或者新建目录;如javac –d c:\......

         javac  –d  源文件名,不带包,它就会自动把包生成出来;

         点表示当前目录里,在创建包时,可以简写

         编译时,或者指定classpath时,只需指向包的父目录即可;

         当制定包文件后,运行后就无法运行,因为类文件不在当前目录;所以就需要指定classpath路径(包的父目录),即可。

 

1、源文件中带上包后,类名就必须要把包加上,否则时错误的类名,会报错NoClassDefFoundError不是例外;(正确的类名格式是:父包与子包之间用点号分隔)

2、编译时,必须要指定到源文件,在当前目录编译或者通过斜杠指定都可;(所有的地方都用斜杠分开,到最后源文件也是,特别发现在指定目录时,斜杠和反斜杠没有区别),

D:\>javac  e:/equip/practice/package_import.java

E:\>javac  e:/equip/practice/package_import.java

至于现在在什么目录不重要,只需要保证源文件名称和指定地址正确即可;

3、运行时,只能在带包的类名的父目录下进行,其他地方找不到文件,如果没包,就默认当前目录;如果在别的地方,可以通过设置classpath也可以;(注意类名的正确性)

编译时,设不设classpath没有任何影响,那是对类文件而言的;

(记住,运行只有两种途径,要么在当前目录,要么在classpath指定的目录;别无他法;)

4、通过命令行javac  -d命令创建目录,只需要指定源文件的目录位置即可按照源文件的包目录创建目录;

E:\ >javac -d  d:\ e:/equip/practice/package_import.java

D:\>javac –d  d:\ e:/equip/practice/package_import.java

或者在当前目录下直接创建也可以,就不需要指定前面的包目录了

 

3、不同包之间的类,该如何进行访问呢?

        

         在源文件中加了包之后,范围变大,一个包中的类要被访问,就必须要有足够大的权限,所以被访问的类要被public修饰;

         类公有后,被访问的成员也要公有,才可以被访问;

         即不同包的文件,默认的权限时不够的;默认权限只限同包;

         包也是一个封装形式,如果一个包中有十个文件,只有一个公有,其他九个文件,其他的包也访问不了,只设置一个公有包提供访问;

         不同包之间的文件要进行继承时要注意,继承的类要带上包名,或者构建对象等都要带上包名;也就是不同的包之间的文件,只要时公有的,都是可以访问的,构建实例等都可行;

 

总结:包与包之间进行访问,被访问的保重的类以及类中的成员,需要public修饰;

           不同包中的子类,还可以直接访问父类中,被protected权限修饰的成员;

 

 

权限问题:

包与包之间可以使用的权限:public  protected;

                       public                 protected                            default               private

同一个类中              ok                               ok                          ok                              ok

同一个包中              ok             ok            ok

子类             ok             ok

不同包中         ok

注意:在继承的覆盖中,子类的活动权限一定要大于等于父类的活动权限才行;因为要保证父类调用的属性,子类能调用到才行,否则无法覆盖;

 

一个源文件里面,不可以出现两个以上的公有类或者公有接口,因为要和源文件名字相同;

 

二、import

为了简化带包名的类名的书写,就使用import关键字导入包中的类文件;再写类名的时候就不需要再带包名写类了;

格式:import  aa.bb.cc.dd.Demo;导入指定的类文件;(都用点作为分隔符;)

或者使用一个通配符*;导入该包中的所有的类文件;

格式:import  aa.bb.cc.dd.*;只表示导入该包中的类,不包括子包中的类文件;

建议:

一般情况下,不要写通配符*,需要用到包中的哪个类,直接就导入哪个类即可;因为只用一个类,而把所有的类都导入了,比较占用内存空间,不高效;

注意:当导入不同类出现重名时,这个类必须要加包名;

 

建议定义包名不要重复,可以使用url来完成定义;因为url时唯一的;

一个程序里面可以不写import的,可以按照全名类书写,写import只为简化书写;

 

 

 

 

        

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值