Java 包及访问控制权限---小总结

时间:2021-12-27 15:18:17

1,包的作用以及定义

2,包的导入语法以及导入限制

3,Java常用包

4,Java新特性—静态导入

5,jar命令的使用

6,访问控制权限

在大型程序的开发中,可以将一个大的模块,拆分开来,拆分 成多个类,这样一来,更便于代码的维护,也可以分派给多个人开发,加快开发效率。
多人同时开发,虽然会加快开发效率,但是多人开发,不可避免的会存在类名称相同的问题,类名称相同会怎么样,提交代码到服务器,相同的类名的文件会覆盖掉,那怎么办,包,就是为为了处理这样的问题的,在不同的包下,就算类名称相同,也没有任何的问题。

在不同包下,可以存在同名文件,这就解决了多人开发的问题。

1,package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序中加入package关键字即可。

包的定义格式:
package 包名称.子包名称

定义了包之后,实际上类的名称就是:包.类名称
那么包定义之后,怎么使用呢?
所谓的包,其实就是一个文件夹,就是将这个编译的*.class文件保存在一个文件夹之中。
打包编译命令:
编译: javac -d . 类名称.java
javac空格,杠d,空格,点,空格,类名称点Java。
-d就表示打包编译。

运行:
直接Java 类名称,肯定是不行的,因为在这个当前路径下是没有*.class文件的,所以会报错,找不到这个类的错误。
难道要我们再一次进入这个包的路径,然后才能运行么?其实不用,
直接 Java 报名.类名称 就可以了,因为这个类的全称现在就是,包名点类名称。

在不同包下,可以存在同名文件,这就解决了多人开发的问题。

2,包的导入

当一个包的class文件需要使用另一个包的class文件的时候,就需要使用导入指令。

没有定义包的类,是存放在通一同个默认的包中的,所以不存在导包的问题,但是如果几个类存放在不同的包中,则使用类的时候就必须通过import语句导入。

语法:
①:import 报名称.子包名称.类名称; 这是精细的导入,直接导入自己需要的类。
②:import 包名称.子包名称.*; 这是由jvm自动加载所需要的类,如果一个包下有多个类需要到导入,如果一个个类的导入太麻烦,可以直接这样一条语句即可。

一个包中的类,如果需要被外包中的类所使用,则需要把这个类定义成public的,否则,无法在外包被调用。

如果一个类只在本包中访问,不需要被外包访问,则直接声明class即可,而如果一个类需要被外包访问,则必须声明为public class

如果包中有子包,它是不会自动导入这个子包的

导入包的时候,需要注意,如果导入了不同包的同名类的时候,就有编译可能出现不明确的错误信息。
那么对于这种问题,怎么处理呢?最好使用完整的包点类名称进行使用,就不会出问题了。

3,常见包

java.lang,是一个基本包,比如String以及各个包装类,这些都是放在这里面的。
Java.lang.reflect;反射
java.util;工具包,一些常用的类库,日期操作等等
Java.text;文本处理类
java.sql;数据库操作包
java.net;网络编程
java.io;输入、输出处理
java.awt;窗口工具,用来构建GUI界面。
javax.swing;用于构建图形用户界面,和java.awt相比,是轻量级的组件。

熟悉以上的常用包,各种设计思路就很好理解了。

4,静态导入

这个导入功能是在jdk1.5之后加入的,什么是静态导入?
如果一个类中的方法全部是使员工static声明的静态方法,则在导入的时候,就可以直接使用“”import static“”的方式进行导入。

导入格式:
import static 包.类.*;

问题

和之前的直接导入有什么差别么??

如果按照之前的import导入的话,则使用的时候肯定是 类.方法()的形式。

 类.方法()

如果使用了静态导入,就可以直接使用方法,省去类名点;

静态方法()

5,jar命令使用

开发者开发出一套Java类以后,完成了功能,需要交付给
用户使用,但是如果所有的类都是通过.classde 格式给用户,则会比较麻烦,所以一般情况下会将这些.class文件压缩成一个文件交付给用户使用,这样的文件就称为jar文件(Java archive file),如果想要生成jar文件,直接使用jdk的bin目录的jar.exe就可以将所有的类文件进行压缩。

jar命令主要参数:
c 创建新的文档
v 生成详细的输出信息
f 指定存档的文件名

举个例子,现在写一个Hello.java的类,

package org.demo.demo08.g ;
public class HelloDemo{
public String getInfo(){
return "hi";
}
};

编译:Java -d . Hello.java
将org包内部的所有class文件打为jar包,jar包命名为my.jar
打jar包:jar -cvf my.jar org

怎么使用这个jar包呢?

一个jar包要想被使用,必须配置其classPath路径

setclasspath=“.;c:/demo.my.jar”
这样一来就可以直接使用hello,而不用先编译hello了,

查看一个jar包中有什么东西,那些包名,那些类名以及包的大小,可以使用命令:“jar -tvf my.jar”这样就可以看到了

1,包可以将很多class文件分类的存放好,可以避免很多人开发的时候,类文件重名的情况;
2,在实际开发中,没有包的类其实是不存在的,完整的类名称是通过“包.类名称”出现的;
3,如果导入不同包的同名类的时候,可以直接通过完整的,包.类名称避免重复;
4,jdk1.5之后又了静态导入,可以直接使用一个类的静态方法;
5,如果一个包中的全部类,要交付用户使用,则要将其打成一个jar包。

6,访问控制权限

Java的4种访问时控制权限:
private 可以定义方法属性,定义的方法属性不能被类的外部所看到。
default(默认的) 可以在本包中的任意地方访问
protected 不同包的非子类不可以访问
public 公共的,都可以访问,不收任何的限制
Java 包及访问控制权限---小总结

总结

当产生了一个类之后,为了保证类中的内容不被外部直接看到,则使用了private关键字;
但是,如果现在两个有关系的类,要进行属性的相互访问的话就比较麻烦,只能借助于getter和setter取得和设置,所以为了减少私有属性的访问的麻烦,使用了内部类,但是内部类本身会破坏程序的结构,
为了让一个类的内容可继续方便的使用,出现了继承的概念,但是继承中private属性也是无法被子类看到的,所以此时,为了方便子类的操作,可以将属性使用protected进行封装,这样一来,外部也无法直接看到。(不同包)
有了继承之后,就存在了父子的关系,所以就可以使用向上或者向下转型操作,以完成多态性,
但是在开发中,类与类的直接继承是不多见的,往往是继承抽象类或实现接口,若干个操作间需要解耦和的时候,就可以使用接口完成。
既然有内部类,就不得不说一下匿名内部类了,则如果一个接口或者一个抽象类的子类只使用一次的话,则可以将其定义成匿名内部类。
开发中,没有包的类是绝对不存在的。

封装——内部类——-匿名内部类——》继承——protected——-》多态。这种根据开发的需要而诞生的各个概念。

7,Java命名规范

类:所有单词首字母大写;
方法:第一个单词的首字母小写,之后每隔单词的首字母大写;
属性:第一个单词的首字母小写,之后每隔单词的首字母大写;
包:所有单词字母小写;
常量:所有单词字母大写;