概述
------- android培训、java培训、期待与您交流! ----------
Java 包及访问控制权限
在Java中,可以将一个大型项目中的类分别独立出来,分门别类地存储到文件里,再将这些文件一起编译执行,这样的程序代码将更易于维护,而且将类分割开后对类的使用也就有了相应的访问权限。可以试想一下,在一个多人开发的项目中,肯定会出现类同名的情况,这样一来处理就会比较麻烦。所以我们可以利用包(package)关键字来解决此问题。
1.包(package)
一般包的命名约定是将公司域名反转作为包名,www.itheima.com,反转之后就是:com.itheima.xxx。定义包(package)的方式:package 包名称.子包名称.[子包名称...];
package com.itheima.author;//定义包com.itheima.author
public class Demo{
public String getMsg(String msg){
return msg;
}
public static void main(String[] args){
System.out.println(new Demo().getMsg("zhangsan"));
}
}
程序在编译时,就要带上包名,编译如下:
javac -d . Demo.java //编译,-d表示指定存放类文件生成的目录
java com.itheima.author.Demo //运行
zhangsan
程序的运行结果与之前不加包是一样的,只是加入包方便管理。
2. 导包(import)
如果有两个类在不同的包下,我们现在有一个包下的类(class)要使用另外一个包中的类,这就要把另一个包下的类导入到当前的类中。通过import关键字来完成导包操作。
如果是手工导入所需的类:import 包名称.子包名称.[子包名称...].类名称;
如果是Java虚拟机自动加载所需的类:import包名称.子包名称.[子包名称...].*;
package com.itheima.b;
class ImportDemo{
public String getMsg(String msg){
return msg;
}
}
导入com.esoft.b下的ImportDemo,
package com.itheima.a;
import com.itheima.b.ImportDemo;//导包
public class Demo{
public static void main(String[] args){
System.out.println(new ImportDemo().getMsg("zhangsan"));
}
}
编译并运行:
C:code>javac -d . ImportDemo.java
C:code>javac -d . Demo.java
Demo.java:2: com.itheima.b.ImportDemo 在 com.itheima.b 中不是公共的;无法从外部软件包中对其进行访问
import com.itheima.b.ImportDemo;
^
Demo.java:5: 找不到符号
符号: 类 ImportDemo
位置: 类 com.itheima.a.Demo
System.out.println(new ImportDemo().getMsg("zhangsan"));
程序编译出错:原因ImportDemo类不是public定义的,而是default,在Demo中无法访问到ImportDemo类中的方法,也就是说如果一个类要被包外访问,则此类必须要定义成public class。
package com.itheima.b;
public class ImportDemo{
public String getMsg(String msg){
return msg;
}
}
编译并运行:
C:code>javac -d . ImportDemo.java
C:code>javac -d . Demo.java
C:code>java com.itheima.a.Demo
zhangsan
3.系统包
在JDK中为了方便程序员开发程序,提供了大量的系统开发包,如下面一些常用的包:
java.lang | 提供利用 Java 编程语言进行程序设计的基础类。 |
java.lang.annotation | 为 Java 编程语言注释设施提供库支持。 |
java.lang.reflect | 提供类和接口,以获得关于类和对象的反射信息。 |
java.math | 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 |
java.net | 为实现网络应用程序提供类。 |
java.nio | 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 |
java.io | 通过数据流、序列化和文件系统提供系统输入和输出。 |
java.util | 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 |
java.util.concurrent | 在并发编程中很常用的实用工具类。 |
javax.sql | 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。 |
javax.swing | 提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。 |
javax.xml | 根据 XML 规范定义核心 XML 常量和功能。 |
java.util包在开发中使用较多,因为它支持大量的工具类操作,将要在后面说的常用类、Java类集等都是围绕此包展开的。
4.Java新特性——静态导入(static import)
在JDK 5.0之后提供了静态导入功能。如果一个类中的方法全部是使用static声明的静态方法,则在导入时就可以直接使用import static的方式导入。import static 包.类.*;
定义OperateDemo类由全部静态方法组成:
package com.itheima.b;
public class OperateDemo{
public static int add(int a, int b){
return a + b;
}
public static int sub(int a, int b){
return a - b;
}
public static int mul(int a, int b){
return a * b;
}
public static int div(int a, int b){
return a / b;
}
}
使用静态导入:
package com.itheima.a;
import static com.itheima.b.OperateDemo.*;//静态导包
public class Demo{
public static void main(String[] args){
System.out.println("3 + 3 = "+ add(3,3));
System.out.println("3 + 3 = "+ sub(3,3));
System.out.println("3 + 3 = "+ mul(3,3));
System.out.println("3 / 3 = "+ div(3,3));
}
}
输出运行结果:
C:code>javac -d . OperateDemo.java
C:code>javac -d . Demo.java
C:code>java com.itheima.a.Demo
3 + 3 = 6
3 + 3 = 0
3 + 3 = 9
3 / 3 = 1
使用静态导入的方式,在类中就不再需要使用“类.静态方法()”的形式调用了。
5. 访问控制权限
有了包(package)的概念之后,就可以为类的访问设置权限了。在Java中一共有4种访问控制权限,priavte、default(默认)、protected和public。
1).private访问权限,private属于私有访问权限,可以用在属性的定义、方法的声明上,一旦使用了private关键字声明,则只能在本类中进行访问,外部是无法直接访问的。
2).default(默认)访问权限,如果一个类中的属性或方法没有使用任何的访问权限声明,则就是默认的访问权限,默认的访问权限可以本包中的其他类所访问,但是不能被其他包的类所访问。
3).protected访问权限,protected属于受保护的访问权限。一个类中的成员使用了protected访问权限,则只能被本包及不同包的子类所访问。
4).public访问权限,public属于公共访问权限,如果一个类中的成员使用了public所修饰,就可以在所有的类中被访问,不管是否在同一包中。
以下是4中权限的对比:
对于private、public和default三种访问控制权限在之前已经使用过了,这里说一下protected访问权限
package com.itheima.b;
public class OperateDemo{
protected String name ="张三";
}
在OperateDemo类的子类中使用name属性,
package com.itheima.a;
import com.itheima.b.OperateDemo;
public class Demo extends OperateDemo
{
public void print(){
System.out.println("打印protected修饰属性的内容:"+super.name);
}
public static void main(String[] args){
Demo demo = new Demo();
demo.print();
}
}
如果在不同包的类直接访问呢?
package com.itheima.c;
import com.itheima.a.Demo;
public class Demo2
{
public static void main(String[] args){
Demo demo = new Demo();
//demo.print();
System.out.println(demo.name);
}
}
编译出错:
C:code>javac -d . Demo2.java
Demo2.java:8: name 可以在 com.itheima.b.OperateDemo 中访问 protected
System.out.println(demo.name);
^
1 错误
------- android培训、java培训、期待与您交流! ----------
最后
以上就是苹果夕阳为你收集整理的黑马程序员——Java 包及访问控制权限Java 包及访问控制权限的全部内容,希望文章能够帮你解决黑马程序员——Java 包及访问控制权限Java 包及访问控制权限所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复