package,import,classpath

package和import

- 所有的Java类都是放置在同一个目录下面的, 因此类之间的相互调用无需显示声明调用。
	- 同一个目录下, 两个类的名字不能相同
	- 文件过多, 查找和修改都不易, 且容易出错。
- Java支持多个目录放置Java, 并且通过package/import/classpath/jar等机制配合使用, 可以支持跨目录放置和调用Java类。
- package包, 和C++中namespace类似
- 在Java类文件的第一句话给出包的名称
	- package cn.a.b;
	- public class C{} 
- 类全名称cn.a.b.C, 短名称C
- 引用类的时候, 必须采用全称引用;程序正文可以用短名称
- C.java必须严格放置在cn/a/b目录下
- 包名package name尽量唯一
- 域名是唯一的, 因此常用域名做包名
- 域名逆序: 范围从大大小如:cn.edu.xx
- 类的完整名字: 包名+类名
- 包名: 和目录层次一样, cn\edu\xx.java
- 但是包具体放在什么位置不重要, 编译和运行的时候再指定。(到时候classpath来指定)
C.java中, 可用import关键字来引入Dpackage a.b;
import a.b.D;
// 也可以采用import a.b.*;
// 如果D和当前类在同一个目录, 可用省略上句import

public class C{
	public static void main(String[] args){
		D obj = new D();
		// 此处可用用类的短名称来引用
	}
}
import规则
- import必须全部放在package之后, 类定义之前。
- 多个import的顺序无关。
- 可用用*来引入一个目录下的所有类, 比如import java.lang.*;次意思是引入java.lang下面所有的子目录文件, 即并不包括java.lang.reflect.*;换句话说, 不能递归包含各个目录下的文件。
- import 尽量精确, 不推荐用*, 以免新增的同名程序会使得老程序报错。
package a;
public class A {
	public void hello() {
		System.out.println("hello");
	}
}

package b;
import a.A;
public class B {
	public static void main(String[] args){
		new A().hello();
	}
}
package a;
public class SameName {

}

package b;
public class SameName {

}

package c;
import a.*;
import b.*;
public class C {
	public static void main(String[] args){
		SameName sameName = new SameName();// 当前行会报错, 因为SameName类模糊不清
		// 注: 如果import导入的是精确的类, 那么import的时候就会报错, 这样方便找错误
		// 如果实在想要实现某同名类, 可以如下
		a.SameName sameNameA = new a.SameName();// b包下的同理
	}
}

jar文件导出和导入

- jar文件, 一种扩展名为jar的文件, 是Java所特有的一种文件格式, 用于可执行程序文件的传播。
- jar文件实际上是一组class文件的压缩包(类似C++里面的dll)
- jar文件优势
	- jar文件可以包括多个class, 比多层目录更加简洁实用
	- jar文件经过压缩, 只有一个文件, 在网络下载和传播方面, 更具有优势
	- jar文件只包括class, 而没有包含java文件, 在保护源文件只是版权方面, 能够可以起到更好的作用
	- 将多个class文件压缩成jar文件(只有一个文件), 可以规定给一个版本号, 更容易进行版本控制
	- 有些软件可以将.class文件转换成.java文件, 但同样的java中也存在混淆器来保护只是产权
IDEA导出jar文件

在项目中, 点击File->Project Structure->Artifacts添加jar, 选择导出的类以及位置, 运行程序, 可以看到导出的jar包。

IDEA可以通过导入jar

可以通过File->Project Structure->Libraries导入, 也可以通过Maven导入

package和import的命令行操作

- java -classpath .;c:\temp cn.xx.xx.Man
- 第一部分: java, 执行命令, 是java.exe的简写。
- 第二部分: -classpath 固定格式参数, 可以简写成-cp.
- 第三部分: 是一个(Windows分号, Linux/Mac冒号连接起来的)字符串。按分隔符隔开, 得到一个个子路径。当运行cn.xx.xx.Man类的过程中, 如果需要用到其他的类, 就会分裂第三部分的字符串, 得到多个子路径, 然后依次在每个路径下, 再去寻找相应的类(全称, 报名以点隔开对应到目录)。(如果没找到, 就会报NoClassDefFoundException错误)
- 第四部分: 主执行类的全称(含包名)
编译和运行规则
- 编译一个类, 需要java文件的全路径, 包括扩展名。
- 运行一个类, 需写类的类名全称(非文件路径), 无需写扩展名
- 编译类的时候, 需要给出这个类所依赖的类(包括依赖的类再次依赖的所有其他类)的所在路径。
- 运行类的时候, 需要给出这个类, 以及被依赖类的路径总和。
- classpath参数也可以包含jar包。如果路径内有空格, 需要将classpath参数整体加双引号
- java -classpath ".;c:\test.jar;c:\temp;c:\a bc" cn.com.test.Man

在这里插入图片描述

java访问权限

- Java访问权限有四种
	- private: 私有的, 只能本类访问
	- default(通常忽略不写): 同一个包内访问
	- protected: 同一个包, 子类均可以访问
	- public: 公开的, 所有类都可以访问
- 使用范围
	- 四种都可以用来修饰成员变量, 成员方法, 构造函数
	- default和public可以修饰类

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值