我是靠谱客的博主 苹果夕阳,最近开发中收集的这篇文章主要介绍黑马程序员——Java 包及访问控制权限Java 包及访问控制权限,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

------- 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 包及访问控制权限所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部