java包的权限_java包及权限总结

/*

包:包就是java中的文件夹,一个文件夹就对应java中的一个包。包表现在具体的操作系统(如Windows)中,就是一个

文件夹。是用来存放类文件的即.class文件,也可以存放其他的子包,即包中有包。

在JAVA的世界中,没有什么源文件,核心的文件就是.class文件,即java运行文件。文件夹就是包。带压缩的文件夹

就是Jar包。

总的原则是:

1、一个java源文件(即.java文件)中可以定义多个类(即class),该源文件在编译的时候,每一个类都会形成一个

.class文件,包括内部类在内。

2、含有main方法的类(即public static void main(String[] args))是可以独立运行的类,即不需要依靠其他类

的调用,直接交给JVM,就可以被JVM运行的类。没个类都可以作为主类。一个程序有多个主类也可以,但一般没有

这样设计的,一般坚持一个程序只有一个程序入口。

3、一个Java源文件中(即.java文件)中只可以有一个公共类(即被public修饰的类)。因为有这样一条规定,如果

一个源文件中存在一个公共类,则源文件名必须和该公共类同名,否则编译时就会报错。所以,当一个Java源文件中

有多个公用类时,文件名就不知道该和哪个公共类名称一致了。所以java源文件中不允许出现两个以上的公共类,

最多只能有一个公共类,可以没有,没有公共类时,java源文件的名称可以任意命名,可以与源文件中定义的某个类

的名称相同,也可以与源文件中的任何类的名称都不相同,任意命名,编译时都会通过。

4、而位于同一个java源文件中的类也位于同一个包中。

经过编译后,就不存在源文件了,程序变成由一个个类文件组成,而这一个个类文件又被放在文件夹中,即被包

所管理。

————————**由于有了包之后,类也就有了公用类和默认类之分,公共类是可以突破包的封装隐藏,而暴露除去,给其他包中的

类所使用的公共类。而默认类(即没有被任何修饰的类),只能在本包中被使用,被引用,即时是父包中的类也

无法引用。**

带包的源文件的编译和运行方法:

带包的源文件的编译:用Javac直接编译即可。如果没有用创建文件的javac命令编译,则编译出的.class文件不能

被JVM所找到识别。必须手动创建文件夹(即包),按照源文件中包的定义,创建出文件夹目录,将.class文件放入

其中,然后再用JVM运行主类,而运行时需要主类的完全名称,即包名.类名。并且需要设置classpath路径,在

classpath中找完没有,在当前文件夹下找,查找的方式按照包名.类名的方式,每一个包名是一个文件夹,所以

会在classpath所显示的路径下及当前路径下(如果classpath带有;),按照包名——文件夹名,包名——文件夹名,

类名——.class文件名的方式查找。最后一个.之前的都是包名,如果查找不到就会报错。

带包的类的运行方法:必须用完全类名来引用类,即用包名.类名的方式。JVM(java虚拟机)查找该类的方式

和上面描述的一致,按照包名对应文件夹名,类名对应.class文件名的方式查找,找到则加载,当然还有检查

权限是否足够大。

注意:我认为默认包机制,是没有包名的,即所在文件夹即根目录即时默认包。没有定义包的类,都是在根目录下

即默认包中。

补充:javac编译器和java运行器的工作,都不可能离开jvm,java虚拟机相当于一个小的java操作系统。但这个

Java操作系统必须运行在其他操作系统之上,即属于一种寄生操作系统。而java语言写的源文件(即.java文件)和

java的运行文件(即.class文件)都只有JVM能够识别,即只有java虚拟机能够识别Java语言和运行java语言编译

后的字节码文件。其他操作系统不行,没有该功能。windows和Linux都不行,除非内嵌了java虚拟机的功能。

————————**javac和java运行器,这些工具程序,都是用java语言开发的程序,所以本质上都是一些java的.class类文件,而

这些类文件需要通过jvm来运行的,所以是调用Jvm的功能,通过jvm来进一步调用使用宿主操作系统的底层功能。

而classpath是给JVM使用的,是JVM在寻找.java文件和.class文件中的类时,依据的查找路径。所以编译的时候

也会同样使用到classpath环境变量,编译一个.java文件时,如果.java文件中用到了其他类,JVM会依据classpath

环境变量中设置的路径依次查找该类的.class文件或者源文件.java文件,若找到.class文件则直接使用,若找

到.java文件则先编译成.class文件后使用。即本质上JVM使用的是.class文件,而不是.java文件,来形成当前需要

编译的.java文件的.class类文件。**

创建方法: 用关键字package来创建,包名一律用小写。

eg. package pack;

包的作用:

1、包是对类文件的管理

2、包是为了区分同名类文件而引入的命名空间(即名称空间)。

3、包也是一种封装。

注意:所以本质上类的名称为:包名.类名 ,这个称为类的完全限定名,也称为完全类名。

包的创建要位于一个java文件(即源文件)的第一行。因为要先有包文件,然后再有类文件。对于没有显示用package

关键字创建包的类文件,则采用默认java默认包机制,即将java源文件所在的当前目录作为一个默认包。

将.class文件放在里面,所以就会看到之前编译后的类文件和java源文件是在一个文件夹下的。

Dos命令行创建带有包(即文件夹)的类文件时,需要使用带参数的javac语句,即 javac -d 目录 Test.java。

这样编译后会将Test.class文件放到Test.java中package语句所定义的包(文件夹)中。

用java运行类时,必须要带有包名,否则找不到类。

java允许包中有包,是因为那么多的类文件需要分层分类管理。包下的子包,就是一种分层管理。

包对于类的封装,体现为将一部分功能相似的类或者有某些关系的类放到一个包中,同时通过关键字public,protected

将某些类及类中的方法提供出去,而某些类作为包的内部使用,不对外提供。

eg. 1、对于包与包之间类的访问,必须将包中的类

例如:

【表 1】:基于类的封装,对类中成员的隐藏程度的设置,形成了类中成员的权限。

一个java源文件中的一处代码是否可以访问(引用)某个类中的成员。

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

不同类中的成员是否可以访问(引用)就依照该表,即在一个java源文件中是否可以出现该成员的名称

成员权限修饰符:public|protected|default(没有该关键字,什么都不写就是默认权限) | private

(作用范围:)|| |

同一个类中成员ok|ok|ok | ok

同一个包中的类中成员ok|ok|ok |

不同包中子类和父类中成员ok|ok| |

不同包中的非子父的两个类中成员ok|| |

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

注意:表 1 的使用是需要参照 表 2 的,即表1 中的情况是建立在类的访问没问题的基础上,对类中成员的访问是否可以。

如果类的访问就不行,那成员就更白扯了,就更不行了,无论是什么权限。

【表 2】:基于包的封装,对包中类的隐藏程度的设置,形成了包中类的权限。

一个java源文件中的一处代码是否可以访问(引用)某个类。

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

不同的类之间是否可以访问(引用)就依照该表,即在一个java源文件中是否可以出现该类的名称

类权限修饰符:public | default(没有该关键字,什么都不写就是默认权限)

(作用范围:)|

同一个包中的类ok|ok

不同包中的类ok|

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

*/

class Demo

{

}

class PackDemo2

{

public static void main(String[] args)

{

System.out.println("Hello World!");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值