第十七章 package、import以及访问控制权限

1 package

1、为什么要使用package?
package是java中的包机制,包机制的作用是为了方便程序的管理。
不同功能的类分别存放在不同的包下。(按照功能划分,不同的软件包具有不同的功能)

2、package怎么用?
package是一个关键字,后面加包名。例如:
package com.bjpowenode.javase.chapter17;
注意:package语句只允许出现在java源代码第一行。

3、包名有没有命名规范?有
一般都采用公司域名倒序的方式(因为公司域名具有全球唯一性)
包名规范:
公司域名倒序 + 项目名 + 模块名 + 功能名

4、对于带有package的java程序怎么编译?怎么运行?
采用之前的编译和运算不行了。
类名不在是:HelloWorld了。
类名变为:com.bjpowernode.javase.chapter17.HelloWorld

之前的编译运行模式:
编译:javac HelloWorld.java
运行:java com.bjpowernode.javase.chapter17.HelloWorld  
在运行之前需要在当前目录建出 com/bjowernode/javase/chapter17 目录
然后把 HelloWorld.class 文件复制刚刚建出来的目录。

针对包机制的编译运行模式:
编译:javac -d . HelloWorld.java  
解释一下:
javac --> 负责编译的命令
-d --> 带包编译
. --> 代表编译之后生成的东西放到当前目录下
HelloWorld.java --> 被编译的java文件名
运行:java com.bjpowernode.javase.chapter17.HelloWorld


package com.bjpowernode.javase.chapter17;
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}

 

 

2 import

import什么时候使用。
	A类中使用B类。
	A和B类都在同一个包下,不需要import
    A和B类不在同一个包下,需要使用import
    java.lang.*;  这个包下的类不需要使用import导入
	
import怎么用?
	import语句只能出现在package语句之下,class声明语句之上。
	import语句还可以采用星号的方式。
	

Test01.java

package com.bjpowernode.javase.chapter17;

public class Test01{
	public static void main(String[] args){
		// 创建HelloWorld对象
		// HelloWorld的完整类名:com.bjpowernode.javase.chapter17.HelloWorld
		com.bjpowernode.javase.chapter17.HelloWorld hw = new com.bjpowernode.javase.chapter17.HelloWorld();
		System.out.println(hw);

		// 包名可以省略吗?
		// 思考:这里的包名之所以可以省略,是因为HelloWorld和test01在同一个package下。
		HelloWorld hw2 = new HelloWorld();
		System.out.println(hw2);
	}
}

Test02.java

package com;

// 将需要的类导入
// import com.bjpowernode.javase.chapter17.HelloWorld;
import com.bjpowernode.javase.chapter17.*;

public class Test02{
	public static void main(String[] args){
		/*
			Test02在com包下。
			HelloWorld在com.bjpowernode.javase.chapter17下。
			不在同一个package下,包名可以省略吗?
				不能省略。
		*/

		// 错误:找不到符号
		/*
		HelloWorld hw = new HelloWorld();
		System.out.println(hw);
		*/

		// 没导包之前需要这样做,比较繁琐
		/*
		com.bjpowernode.javase.chapter17.HelloWorld hw1 = new com.bjpowernode.javase.chapter17.HelloWorld();
		System.out.println(hw1);
		com.bjpowernode.javase.chapter17.HelloWorld hw2 = new com.bjpowernode.javase.chapter17.HelloWorld();
		System.out.println(hw2);
		com.bjpowernode.javase.chapter17.HelloWorld hw3 = new com.bjpowernode.javase.chapter17.HelloWorld();
		System.out.println(hw3);
		*/

		HelloWorld hw1 = new HelloWorld();
		System.out.println(hw1);
		HelloWorld hw2 = new HelloWorld();
		System.out.println(hw2);
	}
}

Test03.java

package com.bjpowernode.javase.chapter17;

// import java.util.Scanner;
import java.util.*;

public class Test03{
	public static void main(String[] args){

		// 为什么要这样写?
		// Test03类和Scanner类不在同一个包下。
		// java.util就是Scanner类的包名。
		// 没有导入java.util包之前这样编写
		/*
		java.util.Scanner s = new java.util.Scanner(System.in);
		System.out.print("请输入你想输入的字符串: ");
		String str = s.next();
		System.out.println("您输入的字符串是: " + str);
		*/

		Scanner s = new Scanner(System.in);
		System.out.print("请输入你想输入的字符串: ");
		String str = s.next();
		System.out.println("您输入的字符串是: " + str);

		java.lang.String name = "zhangsan";
		System.out.println("名字是: "  + name);
		String username = "lisi";
		System.out.println("用户名是: " + username);
		
	}
}

 

 

3 package和import总结

1 package
   - package出现在java源文件第一行
   - 带有包名怎么编译?
  javac -d . xxx.java
   - 怎么运行?
  java 完整类名
   
   补充:以后说类名的时候,如果带着包名描述,表示完整类名。如果没有带包,描述的话,表示简类名。
  java.util.Scanner  // 完整类名
  Scanner  // 简类名
   
 
2 import
   import什么时候不需要?
  java.lang 不需要
  同包下不需要
  其它一律都需要
   怎么用?
  import 完整类名;
import 包名.*;

// 疑问:这样是不是效率比较低。
// 这个效率不低,因为编译器在编译的时候,会自动把*变成具体的类名。
import java.util.*;  // 注意:这里的星号只能到类名那级。因为在java语言中规定,这里的*只代表某些类的名字。

 

 

4 访问控制权限

1 访问控制权限都有哪些?4个
private 私有
protected   受保护
public      公开
默认


2 以上的4个访问控制权限:控制的范围是什么?
private: 表示私有的,只能在本类中访问
public: 表示公开的,在任何位置都可以访问
“默认”: 表示只能在本类,以及同包下访问。
protected: 表示只能在本类、同包、子类中访问

访问控制修饰符    本类    同包   子类    任意位置
   ------------------------------------------------
public ok ok ok ok
protected ok ok ok no
默认   ok   ok      no      no
private ok no no no

范围从大到小排序: public > protected > 默认 > private


3 访问控制权限修饰符可以修饰什么?
属性(4个都能用)
方法(4个都能用)
类(public和默认能用)
接口(public和默认通用)
 

 

 

 

 

 

posted @   路走  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示