关于java语言的中的package和import机制:
-
为什么要使用package?
package是java 中包机制。包机制的作用是为了方便程序的管理。
不同功能的类分别存放在不同的包下。(按照功能划分的,不同的软件包具有不同的功能。) -
package怎么用?
package是一个关键字,后面加包名。例如:
package com.bjpowernode.javase.chapter17;
注意:package语句只允许出现在java源代码的第一行。 -
包名有没有命名规范?有
一般都采用公司域名倒序的方式(因为公司域名具有全球唯一性)
包命名规范:
公司域名倒序 + 项目名 + 模块名 + 功能名 -
对带有package的Java 程序怎么编译?怎么运行?
采用之前的编译和运行不行了。
类名不再是:HelloWorld了。
类名是:com.bjpowernode.javase.chapter17.HelloWorld编译: javac -d . HelloWorld.java 解释一下: javac 负责编译的命令 -d 带包编译 . 代表编译之后生成的东西放到当前目录下(点代表当前目录) HelloWorld.java 被编译的java文件名。 运行: java com.bjpowernode.javase.chapter17.HelloWorld
-
关于import的使用。
import什么时候使用? A类中使用B类。 A和B类都在同一个包下。不需要import。 A和B类不在同一个包下。需要使用import。 java.lang.*;这个包下的类不需要使用import导入。 import怎么用? import语句只能出现在package语句之下,class声明语句之上。 import语句还可以采用星号的方式。
package com.bjpowernode.javase.chapter17;
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
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); //com.bjpowernode.javase.chapter17.HelloWorld@28a418fc
// 包名可以省略吗?
// 思考:这里的包名之所以可以省略,是因为HelloWorld和Test01在同一个package下。
HelloWorld hw2 = new HelloWorld();
System.out.println(hw2); //com.bjpowernode.javase.chapter17.HelloWorld@5305068a
}
}
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 hw = new com.bjpowernode.javase.chapter17.HelloWorld();
System.out.println(hw);
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);
}
}
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.Scanner s = new java.util.Scanner(System.in);
Scanner s = new Scanner(System.in);
String str = s.next();
System.out.println("您输入的字符串是--->" + str);
java.lang.String name = "zhangsan";
System.out.println("名字是:" + name);
String username = "lisi";
System.out.println("用户名是:" + username);
}
}
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.Scanner; // 完整类名。
// 有疑问:这样是不是效率比较低。
// 这个效率不低,因为编译器在编译的时候,会自动把*变成具体的类名。
import java.util.*;
// 想省懒劲你不能太省了。
import java.*; 这是不允许的,因为在java语言中规定,这里的*只代表某些类的名字。
访问控制权限
1.1、访问控制权限都有哪些?
4个。
private 私有
public 公开
protected 受保护
默认
1.2、以上的4个访问控制权限:控制的范围是什么?
private 表示私有的,只能在本类中访问
public 表示公开的,在任何位置都可以访问
“默认”表示只能在本类,以及同包下访问。
protected表示只能在本类、同包、子类中访问。
访问控制修饰符 本类 同包 子类 任意位置
---------------------------------------------------------------------------
public 可以 可以 可以 可以
protected 可以 可以 可以 不行
默认 可以 可以 不行 不行
private 可以 不行 不行 不行
这个不要死记硬背,自己下去之后编写代码自己测试。
范围从大到小排序:public > protected > 默认 > private
1.3、访问控制权限修饰符可以修饰什么?
属性(4个都能用)
方法(4个都能用)
类(public和默认能用,其它不行。)
接口(public和默认能用,其它不行。)
.....