包及访问控制权限,为一个程序打包:使用
包及访问控制权限,为一个程序打包:使用
包及访问控制权限
1.主要内容
- 包的定义与使用
- Java新特性--静态导入
- java常用系统包
- jar命令使用
- Java中的四种访问权限
- Java语言命名规范
2.包的定义与使用
为什么要使用包:
包实际上就是一个文件夹,在需要定义多个类或接口时,为了避免名称重复而采用的一种措施。
为一个程序打包:
使用:
直接在程序中加入package关键字。
定义格式: package 包名称.子包名称;
案例:
package kw.com; class Demo{ public String getInfo(){ return "Hello World"; } } public class ClassDemo01 { public static void main(String[] args){ System.out.println(new Demo().getInfo()); } }
此时,程序是在包中的,所以完整的类名称应该是
"包.类名称"
即为kw.com.ClassDemo01
编译时需要加入参数:
javac -d . ClassDemo01.java
-d
:表示生成目录。.
:表示当前目录。编译完成之后,会自动生成相应的文件夹(包)。
执行类:(需要完整类名)
java kw.com.ClassDemo01
3.import语句
作用:
在一个包中需要使用其他包中的类就需要通过import
语句导入。
导入格式:
import 包名称.子包名称.类名称;
--> 手工导入所需要的包import 包名称.子包名称.*;
--> 由JVM自动加载所需要的类
案例:
定义包kw.com.a和包kw.com.b,并在包w.com.b中调用包kw.com.a中的类。
package kw.com.a; public class Demo { public String getInfo(){ return "Hello World!!!"; } }
package kw.com.b; import kw.com.a.Demo; public class PackageDemo02 { public static void main(String[] args) { Demo demo = new Demo(); System.out.println(demo.getInfo()); } }
注意:手动编译时:应该先编译Demo.java,在编译PackageDemo02.java
如果一个类想要外包访问,则此类一定要定义成 public class
⭐⭐⭐
public class 与 class 声明类的区别:
- 一个类声明为
public class
,则文件名称必须与类名称一致,并且一个类文件中只能有一个 public class。 - 使用
class
声明一个类,则文件名称可以与类名称不一致,但是执行时必须执行生成的class文件名称。 - 在包访问上存在限制
- 如果一个类只在本包中访问,不需要被外包访问,则可以直接声明为
class
。 - 如果一个类需要被外包访问,则必须声明为
public class
。
- 如果一个类只在本包中访问,不需要被外包访问,则可以直接声明为
分别导入与使用 "*" 导入哪种性能更高?
这两种导入方式的性能是一样的。因为使用 "*" 时程序也是自动加载所需要的类,而不需要的类根本不会被加载进来。
注意:
在一个程序中同时导入两个包的同名类时,需要明确的写出完整的类名称:
"包.类名称"
4.常见系统包
序号 | 包名称 | 作用 |
---|---|---|
1 | java.lang | 此包为基本的包,String、Inter等常用类都保存在此包中,在JDK1.0中如果想要编写程序,则必须手动导入此包,但是随后的JDK解决了此问题,所以此包现在是自动导入。 |
2 | java.lang.reflect | 此包为反射机制的包,是java.lang的子包,在Java反射机制中介绍。 |
3 | java.util | 此包为工具包,一些常用的类库、日期操作等都在此包中、如果把此包掌握精通,则各种设计思路都可以很好的理解。 |
4 | java.text | 提供一些国际化显示的处理类库。 |
5 | java.sql | 数据库操作包,提供了各种数据库操作的类和接口。 |
6 | java.net | 完成网络编程 |
7 | java.io | 输入、输出处理 |
8 | java.awt | 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形界面(GUI) |
9 | javax.swing | 此包用于构建图形用户界面,此包中的组件相对于java.awt包而言是轻量级组件。 |
5.Java新特性--静态导入
什么是静态导入:
如果一个类中的方法全部是使用
static声明的静态方法
,则在导入时就可以直接使用import static
的方式导入。
导入格式: import static 包.类.*;
案例:
package kw.com.a; public class Demo { public static int add(int i, int j){ return i + j; } public static int sub(int i, int j){ return i - j; } public static int mul(int i, int j){ return i * j; } public static int div(int i, int j){ return i / j; } }
package kw.com.b; import static kw.com.a.Demo.*; public class PackageDemo02 { public static void main(String[] args) { // 直接调用静态方法,不需要声明对象之后在调用 System.out.println("3 + 3 = " + add(3, 3)); System.out.println("3 - 2 = " + sub(3, 2)); System.out.println("3 * 3 = " + mul(3, 3)); System.out.println("3 / 3 = " + div(3, 3)); } }
注意:如果程序使用了静态导入,则类中所有的静态方法都可以直接被使用,而不需要在使用
"类.静态方法()"
的形式调用。
6.jar命令使用
当开发者为客户开发了一套Java类后,需要把这些类交给用户使用,但是如果直接把*.class格式的文件发给用户是比较麻烦的,所以一般情况下会把这些*.class 文件压缩成一个文件交付给客户使用,那么这样的文件就称为jar文件(Java Archive File)。
JDK自带jar.exe文件,可以在命令行中使用jar命令进行打jar包。
7.访问控制权限
Java中一共存在4中访问控制权限:
- private
- default(默认)
- protected
- public
1.private
private属于私有访问控制权限,可以用在属性的定义、方法的声明上,一旦使用了private关键字声明,则只能在本类中进行访问。
2.default
如果一个类中的属性和方法没有使用任何的访问权限声明,则就是默认的访问权限,默认的访问权限可以被本包中的其他类所访问,但是不能被其他包的类所访问。
3.protected
protected属于受保护的访问权限。一个类中的成员如果使用了protected访问权限,则只能被本包及不同包的子类所访问。
案例:
在其他包的类中直接访问protected属性
package kw.com.a; public class Demo { protected String name = "Hello"; }
package kw.com.b; import kw.com.a.Demo; public class PackageDemo02 { public static void main(String[] args) { Demo demo = new Demo(); // 错误,不同包的类无法访问protected属性 System.out.println(demo.name); } }
案例:
package kw.com.a; public class Demo { protected String name = "Hello"; }
package kw.com.b; import kw.com.a.Demo; class HelloDemo extends Demo{ public void print(){ // 可以访问protected权限 System.out.println("访问受保护的属性:" + super.name); } } public class PackageDemo02 { public static void main(String[] args) { HelloDemo demo = new HelloDemo(); //实例化子类实例 demo.print(); } }
通过不同包中的子类进行访问。
4.public
public属于公共访问权限。使用public声明的成员,可以在所有类中被访问,不管是否在同一个包中。
5.访问控制权限表
范围 | private | default | protected | public |
---|---|---|---|---|
同一类 | ✔️ | ✔️ | ✔️ | ✔️ |
同一包中的类 | ✔️ | ✔️ | ✔️ | |
不同包中的子类 | ✔️ | ✔️ | ||
其他包中的类 | ✔️ |
8.Java命名规范
- 类:所有单词的首字母大写,如 TestJava。(大驼峰)
- 方法:第一个单词的首字母小写,之后每个单词的首字母大写,如 getInfo()。【小驼峰】
- 属性:第一个单词的首字母小写,之后每个单词的首字母大写,如 studentName。【小驼峰】
- 包:所有单词的字母小写,如 kw.com.demo
- 常量:所有单词的字母大写,如 FLAG
用户点评