1.什么是java当中的软件包
2.为什么要使用软件包
3.如何给一个类打包
package tc;
class Test{
public static void main(String args[]){
System.out.println("我是包");
}
}
将类放置在一个包中,需要使用package "包名",编译时需要使用-d参数
javac -d . Test 命令的解释
-d 根据包名来生成文件夹名
. 生成的文件夹,放的位置(d:\code 放到了d盘 code文件夹)
类名将发生变化 "包名"+"."+“类名” tc.Test
包名的命名规范:
1.要求包名所有字母小写
2.包名一般情况下,是你的域名倒过来写 com.baidu.user
(这个时候会先建com文件夹,再建baidu,文件夹)
Java 当中的访问权限:
1.public:公共权限
2.private:私有权限
3.default:包级别访问权限(默认访问权限)
4.protected:受保护权限
当class申明为 public ,则类名一定要和java名一致(Person.java Person.class)
Person.java
package com.baidu;
public class Person1{
}
package com.baidu;
public class Person1{
String name;
int age;
void introduce(){
System.out.println("name");
}
}
package com.google;
class Test{
public static void main(String args[]){
Person p = null;//申明一个Person的引用,并未调用它的构造函数
}
}
因为两个class在不同的包里,所以申明Person的时候要带上包名:com.baidu.Person
但也可以导入这个类 import com.baidu.Person; 就不需要再加入包名了。
import com.baidu.*;
public权限的作用:
package com.baidu;
class Person{
String name;
int age;
void introduce(){
System.out.println("name");
}
}
package com.google;
class Test{
public static void main(String args[]){
com.baidu.Person p = null;//申明一个Person的引用,并未调用它的构造函数
}
}
结果:
原因:Person.java 和 Test.java 分别在两个不同的包内,所以 在Test.java 中调用 Person (Person没有public) 就会出错。调用不同包的类里面的 没有public 的变量、 函数,都会出错(Person.name 出错)。
总结:在不同的包当中,一个类想要访问另外一个类,要求被访问的类拥有public权限,如果想访问这个类的成员变量和成员函数,那么也应该要求这些成员变量和成员函数有也有public权限。
private权限
private只能修饰变量和函数,不能修饰类(除了特殊情况——内部类)
所以只能在当前类中使用,在类的外部统统无法用,不管是否在同一个包里面。
default权限
不写修饰时,就是default,它就是包级别访问权限:如果两个类在同一个包中,可以互相调用,如果在不同的包当中,就不能相互调用了,换成public才行。
前三个总结:
1.public:可以修饰类、成员变量、成员函数,没有任何限制,同一个包当中或者不同包当中的类都可以自由访问。
2.private:可以修饰成员变量、成员函数,只能在本类当中使用。
3.default(不写修饰符,就是default权限)可以修饰类、成员函数、成员变量,在同一个包当中可以自由访问。
protected权限首先拥有和default一样的功能,但是该权限只能修饰成员变量和成员函数,除此之外,还允许跨包的继承。
允许子类和父类在不同的包中,子类可以使用父类protected权限的成员变量和成员函数,就是default 的特例(在父子类关系下可以跨包)