Java 笔记 包及访问控制权限
1.package关键字
package是在使用多个类或接口时,为了避免名称重复而采用的一种措施,直接在程序 中加入package关键字即可,格式如下。
package包名称.子包名称;
案例1
package org.sz.demo01;
class Demo{
public String getInfo() {
return “Hello world!”;
}
}
public class PackageDemo01{
public static void main(String args[]) {
System.out.println(new Demo().getInfo());
}
}
编译需要 javac -d . PackageDemo01.java //-d(空格).(空格)
PackageDemo01
翻译时 java 包.类名称
2.import语句
*如果几个类放在不同的包中,在使用类就必须通过Import语句导入
- 使用格式
import 包名称.子包名称.类名称;//手动导入所需要的类
import 包名称.子包名称.*; // 由JVM自动加载所需要的类
案例1:
package org.sz.demo01;
public class Demo{ //public 必须要添加,不然无法从外部程序包中对其进行访问
public String getInfo() {
return “Hello world!”;
}
}
package org.sz.demo02;
import org.sz.demo01.Demo;
public class PackageDemo03{
public static void main(String args[]) {
System.out.println(new Demo().getInfo());
}
}
案例1:
package org.sz.demo01;
public class Demo{ //public 必须要添加,不然无法从外部程序包中对其进行访问
public String getInfo() {
return “Hello world!”;
}
}
package org.sz.demo02;
import org.sz.demo01.*;
public class PackageDemo03{
public static void main(String args[]) {
System.out.println(new Demo().getInfo());
}
}
3.public class和class的区别
- 如果一个类声明为public class,则文件名称必须与类名称 一致,而且在一个类文件中只能有一个public class,而如果使用class声明一个类,则文件 名称可以与类名称不一致,但是执行时必须执行生成的class文件名称。除了这些之外,public class和class还在包的访问上有所限制,如果一个类只在本包中访问,不需要被外包访问, 则直接声明成class即可;而如果一个类需要被外包访问,则必须声明为public class.
4.导入不同包的相同类
- 为了避免出现歧义 在声明Demo对象时要明确的写出完整的“包.类”;
案例
package org.sz.demo01;
public class Demo{
public String getInfo() {
return “Hello world!”;
}
}
package org.sz.demo03;
public class Demo{
public String getInfo() {
return “Hello sz!”;
}
}
package org.sz.demo02;
import org.sz.demo01.;
import org.sz.demo03.;
public class PackageDemo03{
public static void main(String args[]) {
System.out.println(new org.sz.demo01.Demo().getInfo());
System.out.println(new org.sz.demo03.Demo().getInfo());
}
}
5.系统常用包
1 java.lang 此包为基本的包,String都保存在此包之中,在JDK 1.0中如果想编写程序,则必须手工导入此包,但是随后的JDK解决了此问题,所以此 包现在为自动导入
2 java.lang.reflect 此包为反射机制的包,是javadang的子包,在Java反射机制中将会为 读者介绍
3 java.util 此包为工具包,
一些常用的类库、日期操作等都在此包中,如果把此包掌握精通,则各种设计思路都好理解
4 java, text 提供了一些文本的处理类库
5 java.sql 数据库操作包,提供了各种数据库操作的类和接口
6 java.net 完成网络编程
7 java.io 输入、输出处理
8 java.awt 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些 类被用来构建和管理应用程序的图形用户界面(GU1)
9 javax. swing 此包用于建立图形用户界面,此包中的组件相对于java.awt包而言是轻量级组件
6.静态导入
- 如果一个类中的方法全部都是使用static声明的静态方法,则在导入之后就可以使用import static 的方式导入
- 导入格式
import static 包.类.;
案例
package org.sz.demo04.a; //注意这里是包名称加类加;
public class Demo{
public static int add (int i,int j) {
return i + j;
}
public static int sub (int i,int j) {
return i - j;
}
public static int mul (int i,int j) {
return i * j;
}
public static int div (int i,int j) {
return i / j;
}
}
package org.sz.demo04.b;
import static org.sz.demo04.a.Demo.*;
public class StaticImportDemo{
public static void main(String args[]) {
System.out.println(" 3 + 2 = " + add(3,2));
System.out.println(" 3 - 2 = " + sub(3,2));
System.out.println(" 3 * 2 = " + mul(3,2));
System.out.println(" 3 / 2 = " + div(3,2));
}
}
7.jar命令的使用
- 在实际开发中没有包的基本不存在,完整类名称“包.l类名称”
*主要命令
jav C:创建新的文档
V:生成详细的输出信息
F:指定存档的文件名
案例
package org.sz.demo05.demo;
public class Hello1{
public String getInfo() {
return “Hello world!!”;
}
}
package org.sz.demo05;
import org.sz.demo05.demo.Hello1;
public class ImportJarDemo{
public static void main(String args[]) {
Hello1 hello = new Hello1();
System.out.println(hello.getInfo());
}
}
将其打包编译:java -d . Hello.java
将其打成Java包:jar -cvf my.jar org
如果一个jar包要使用,必须配置path路径
set classpath=.;d:\testjava\my.jar //设置两条路径,一条为.;另一条为jar包所在的路径
8.包的访问权限控制
- private :可以定义方法,属性,定义的方法属性不会被类的外部看见
- default : 可以在本包中的任意地方访问
- public : 公共的,都可以访问
package org.sz.demo06.b;
public class HelloDemo{
protected String name = "sz";
}
package org.sz.demo06.a;
import org.sz.demo06.b.HelloDemo;
class SubHelloDemo extends HelloDemo{
public void print(){
System.out.println("访问成功 " + super.name);
}
}
public class ProtectedDemo01{
public static void main(String args[]) {
SubHelloDemo sub = new SubHelloDemo();
sub.print();
}
}