/*
关于java语言当中的包机制:
1、包又称为package,java中引入package这种语法机制主要是为了方便程序的管理。
不同功能的类被分门别类放到不同的软件包当中,查找比较方便,管理比较方便,易维护。
2、怎么定义package呢?
- 在java源程序的第一行上编写package语句。
- package只能编写一个语句。
- 语法结构:
package 包名;
3、包名的命名规范:
公司域名倒序 + 项目名 + 模块名 + 功能名;
采用这种方式重名的几率较低。因为公司域名具有全球唯一性。
例如:
com.bjpowernode.oa.user.service;
org.apache.tomcat.core;
4、包名要求全部小写,包名也是标识符,必须遵守标识符的命名规则。
5、一个包对应一个目录。
6、使用了package机制之后,应该怎么编译?怎么运行呢?
- 使用了package机制之后,类名不再是Test01了,类名是:com.bjpowernode.javase.day11.Test01
- 编译:javac java源文件路径(在硬盘上生成一个class文件:Test01.class)
- 手动方式创建目录,将Test01.class字节码文件放到指定的目录下
- 运行:java com.bjpowernode.javase.day11.Test01
- 另一种方式(编译 + 运行):
* 编译
javac -d 编译之后存放路径 java源文件的路径
* 例如:将F:\Hello.java文件编译之后放到C:\目录下
javac -d C:\ F:\Hello.java
* javac -d . *.java
将当前路径中*.java编译之后存放到当前目录下。
* 运行:JVM的类加载器ClassLoader默认从当前路径下加载。
保证DOS命令窗口的路径先切换到com所在的路径,执行:
java com.bjpowernode.javase.day11.Test01
*/
package com.bjpowernode.javase.day11; //4个目录【目录之间使用.隔开】
public class Test01
{
public static void main(String[] args){
System.out.println("Test01's main method execute!");
}
}
package com.bjpowernode.javase.day11;
public class Test02
{
public static void main(String[] args){
//完整类名是:com.bjpowernode.javase.day11.Test01
com.bjpowernode.javase.day11.Test01 t = new com.bjpowernode.javase.day11.Test01();
System.out.println(t); //com.bjpowernode.javase.day11.Test01@179935d
//可以省略包名,因为Test01和Test02在同一个软件包当中。
Test01 tt = new Test01();
System.out.println(tt); //com.bjpowernode.javase.day11.Test01@b9e45a
}
}
package com.bjpowernode;
public class Test03
{
public static void main(String[] args){
//创建Test01对象
//以下代码编译错误:当省略包名之后,会在当前包下找Test01
//实际上编译器去找:com.bjpowernode.Test01了。这个类不存在。
//Test01 tt = new Test01();
//System.out.println(tt);
//修改以上的错误
//包名不要省略,添加包名
//结论:什么时候前边的包名可以省略呢?Test03和Test01在同一个包下的时候不需要加包名。
com.bjpowernode.javase.day11.Test01 tt = new com.bjpowernode.javase.day11.Test01();
System.out.println(tt);
com.bjpowernode.javase.day11.Test01 ttt = new com.bjpowernode.javase.day11.Test01();
System.out.println(ttt);
com.bjpowernode.javase.day11.Test01 tttt = new com.bjpowernode.javase.day11.Test01();
System.out.println(tttt);
}
}
package org.apache;
/*
import语句用来完成导入其他类,同一个包下的类不需要导入,
不在同一个包下需要手动导入。
import语法格式:
import 类名;
import 包名.*;
import语句需要编写到package语句之下,class语句之上。
*/
//import com.bjpowernode.javase.day11.Test01;
import com.bjpowernode.javase.day11.*;
import java.util.*;
import java.util.Date;
public class Test04
{
public static void main(String[] args){
com.bjpowernode.javase.day11.Test01 tt = new com.bjpowernode.javase.day11.Test01();
System.out.println(tt);
com.bjpowernode.javase.day11.Test01 ttt = new com.bjpowernode.javase.day11.Test01();
System.out.println(ttt);
com.bjpowernode.javase.day11.Test01 tttt = new com.bjpowernode.javase.day11.Test01();
System.out.println(tttt);
//以上程序可以,就是麻烦一些。
Test01 x = new Test01();
System.out.println(x); //com.bjpowernode.javase.day11.Test01@4e25154f
Test01 y = new Test01();
System.out.println(y); //com.bjpowernode.javase.day11.Test01@70dea4e
//java.lang.*; 不需要手动引入,系统自动引入。
//lang:language语言包,是java语言的核心类,不需要手动引入。
String s = "abc";
System.out.println(s);
//直接编写以下代码编译错误,因为Date类没有找到
//Date d = new Date();
//java.util.Date d = new java.util.Date();
//使用import语句之后:import java.util.Date;
Date d = new Date();
}
}
/*
最终结论:
什么时候需要import?
* 不是java.lang包下,并且不在同一个包下的时候,需要使用import进行引入。
*/
package com.May.eight;
import java.util.Date;
import com.Apr.thirty.Cat;
//myeclipse导入类的快捷键:ctrl + shift + o
public class Test {
public static void main(String[] args) {
// 编译错误
// Cat c = new Cat();
/*
* com.Apr.thirty.Cat c = new com.Apr.thirty.Cat();
* System.out.println(c);
*/
Cat c = new Cat();
System.out.println(c);
Date t = new Date();
System.out.println(t);
}
}