从零开始打jar包
https://www.cnblogs.com/flashsun/p/7246260.html
6.1 包:库单元
package与import关键字
Java用关键字package将一组类放到了单一的命名空间之下。
如jre/lib/rt.jar 是Java的基础类库,在命名空间java.util中有一个类叫做ArrayList的类。使用ArrayList的方法:
/** 使用全名 */
java.util.ArrayList list = new java.util.ArrayList();
/** 导入类,在import语句中命名该类 */
/** 同package下的类不需要import */
import java.util.*;
ArrayList list = new ArrayList();
代码组织规则
(1)main方法一定是public,否则Java虚拟机调不到。
(2)一个Java源代码文件被称为一个编译单元,编译单元内的多个类在编译后会生成多个与类名同名的class文件。如果没有public类,文件可以随意命名。
/** Person.java */
/** 生成Person1.class和Person2.class */
class Person1 {
public static void main(String[] args) {
}
}
class Person2 {
public static void main(String[] args) {
}
}
(3)如果编译单元内有public关键字的话(允许package外的类调用),那么只能有一个public类,并且该类的名称必须与文件的名称相同。编译单元之中额外的类用来为主public类提供支持,在包之外看不到这些类。(类的名称必须与文件的名称相同使得:import路径,java源文件名,class文件名,public类名都能保持一致)
/** Person1.java */
public class Person1 {
public static void main(String[] args) {
}
}
class Person2 {
public static void main(String[] args) {
}
}
打jar包
一组.class文件可以打包并压缩成JAR包(Java文档文件,使用Java的jar文档生成器)。
- 右键项目 / Open Module Settings
- Artifacts / +号 / JAR / From modules with dependencies
- 指定Main-Class MANIFEST.MF设置为项目根目录
- Build / Build Artifacts / Build
package com.fei.han;
import com.shan.yu.Peson1;
public class Person {
public static void main(String[] args) {
Person1.person1();
}
}
package com.shan.yu;
public class Person1 {
public static void person1() {
System.out.println("Person1...............");
}
}
导入jar包
- 右键项目 / Open Module Settings
- Modules / Depenencies / +号 / JARs
package com.fei.han;
import com.shan.yu.Person1;
public class Man {
public static void main(String[] args) {
Person1.person1();
}
}
运行jar包
java -jar bbbbbb.jar
Java解释器的运行过程
(1)import关键字指定了需要导入的类的路径,在运行时会将每个句点替换成反斜杠,然后从CLASSPATH中按照类的路径寻找对应的.class文件。
(2)CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。
%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar
- Java_Home代表了jdk的路径
- dt.jar是关于运行环境的类库,主要是用于swing的包,如果不使用可以不配置。
- tools.jar是工具类库,它在编译和运行一个类时被使用
(3)在JDK1.5以后,classpath并不是必须配置了,在JDK1.5之前,是没有办法在当前目录下加载类的(找不到 JDK目录下lib文件夹中的.jar文件),所以我们需要通过配置classpath,但JDK1.5之后,JRE能自动搜索目录下类文件,并且加载dt.jar和tool.jar的类。
(4)通过官方的文档说明我们可以看到,rt.jar和tool.jar这两种属于java平台自身的包就不需要添加到classpath中,只有一些第三方类或者自定义类需要,也并不推荐使用配置CLASSPATH的方法,更推荐使用-classpath选项。(https://www.runoob.com/java/env-classpath.html)
import static静态导入
public class Person {
public static void main(String[] args) {
System.out.println(Math.sqrt(4));
}
}
import static java.lang.Math.*;
public class Person {
public static void main(String[] args) {
System.out.println(sqrt(4));
}
}
Java访问权限修饰词
(1)包访问权限-friendly:默认的,包内可访问
同包:两个类的package路径完全相同(在相同的命名空间下)
默认的访问权限,在忘记添加时能够自动得到的权限。
(2)public:公开使用
(3)private:类内可访问
将构造器设为private,用户只能通过调用其他方法来构造对象。
(4)protected:继承访问权限
基类的创建者会希望有某个特定成员,把对它的访问权限赋予派生类而不是所有类。
小结
类内:private
同包:包访问权限。
不同包但是继承了父类:protected。
不同包:public。