package关键字解析
pacakge
- 简介
- 2.包规则
- 1. package其实就是类的**命名空间**,用来唯一标识这个类的,避免和的类的名字重复
- 2. 一般情况,一个公司、组织、社团中所定义的包的名字,就是他们官网的域名(倒过来),因为域名一定是全球唯一的,不可能有俩个一样的域名。
- 3. 类加上了包名,编译之后的效果
- 3.规则
- 1. 如果运行的Hello类,**没有指定包**,Hello类一定对应的是Hello.class ( 固定要求)
- 2. 如果运行的Hello类,**指定了包**,例如是package com.briup.test; Hello类一定对应的是com/briup/test/Hello.class(固定要求)
- 3. 如果运行的Hello类,被打包到一个jar中,比如是me.jar
简介
在java中,定义包的关键字是package
在程序中,要区分一些东西,一般会采用【命名空间】的设计方式,这是大多数语言都会采用的方式。
在java中,如果来区分俩个名字一样的类?例如,张三定义了一个类Hello,李四定义了一个类Hello,当把张三和李四的代码合并一起的时候,会出现俩个都叫Hello的类,那么这个时候该如果区分这个类?
可以使用package(包)来进行区分,例如张三定义的Hello这个类可以放在zhangsan这个名字的包下,李四定义的Hello这个类可以放在lisi这个包下,如下:
package zhangsan;
public class Hello{}
package lisi;
public class Hello{}
2.包规则
但是一般程序中,定义包的时候,不会直接用zhangsan、lisi这样的名字,而是都会遵从一些包的命名规则的:
1. package其实就是类的命名空间,用来唯一标识这个类的,避免和的类的名字重复
2. 一般情况,一个公司、组织、社团中所定义的包的名字,就是他们官网的域名(倒过来),因为域名一定是全球唯一的,不可能有俩个一样的域名。
例如,http://commons.apache.org/ 这官网下的代码中的包,都是 package org.apache.commons;
开头的。
例如,我们公司的代码中的包,都是以 package com.xxx;
开头的
例如,你个人写的代码,可以是以 package com.jim;
开头的,假设你的名字叫 jim
3. 类加上了包名,编译之后的效果
这样的类,在编译之后,都必须要有和包名对应的文件夹。
例如,package com.xxx.demo;
这里是三个包,包和包之间用点(.)隔开,编译完之后,需要有对应的三个文件夹分
别是com/briup/demo ,最后在demo目录中,才有编译生产的class文件
一个指定package的类,编译后该如何运行?
例如:
package com.briup.test;public class Hello {public static void main(String[] args){System.out.println("hello world");}}
编译代码
javac Hello.java
这里一定要先进入对应的目录下才能直接输入javac Hello.java,不然要输入绝对路径
运行代码:
java Hello
可以看到运行报错,但是我们已经完全产生了class文件
这个错误的原因是:Hello这个类是定义在指定的包中的,那么就需要在把生成的class文件存放到和包名相对于的文件夹中。
新建一个文件夹,把class文件放进去
再运行java Hello
会发现还是报错
这是因为,一个类一旦指定的包,那么在运行它的时候,就一定要带上它的包名
加上包名后再次运行:
java com.briup.test.Hello
类的名字有俩种:
简单类名:就是直接一个类名,例如 Hello
全限定名:包名加类,例如 com.briup.test.Hello
这时候有人会问了:难道每次编译好一个指定包的类,都需要手动去创建和包对应的目录么?
不需要,java中编码命令中有参数,可以直接帮我们在指定位置自动创建和包名对应的目录结构,并且把编译好的class文件自动存放到里面:
javac -d . Hello.java
命令中,-d表示编译时自动生成和包名对应的目录结构,-d后面的点(.)表示就在当前目录中生成
注意,编译成功后,还会自动把编译好的class文件存到这个生成的目录中
运行这个编译好的带包的类:
java com.briup.test.Hello
也可以在指定的路径下,生成和包名对应的目录结构:
javac -d bin Hello.java
运行这个类:
java com.briup.test.hello
发现还是报错
这个错误原因是因为,当前路径下没有这个文件夹或者是CLASSPATH中的路径配置的不对,因为我们要运行的Hello类所对应的Hello.class文件,并不在当前目录下,而是./bin中,所以这时候我们可以临时指定一下路径,或者配置CLASSPATH变量
运行当前命令时,临时指定:
java -cp ./bin com.briup.test.Hello
-cp参数是-classpath的意思,表示执行当前java命令的时候,临时指定classpath一次,只生效这一次
另外,./bin 路径中,可以把./去掉,直接写成bin,因为这样默认就可以表示当前路径下的bin目录
3.规则
运行一个类的时候,JVM加载这个类的规则是什么?
1. 如果运行的Hello类,没有指定包,Hello类一定对应的是Hello.class ( 固定要求)
那么当运行java Hello的时候,JVM会从CLASSPATH中指定的路径中查找,是否有Hello.class这个文件,如果有那么就加载到内存,然后运行,如果没有那么就报错。
- 这个情况下,CLASSPATH中就要配置Hello.class文件所在的路径
2. 如果运行的Hello类,指定了包,例如是package com.briup.test; Hello类一定对应的是com/briup/test/Hello.class(固定要求)
那么当运行java com.briup.test.Hello的时候,JVM会从CLASSPATH中指定的路径中查找,是否有com/briup/test/Hello.class这个文件,如果有那么就加载到内存,然后运行,如果没有那么就报错。
注意,这个时候JVM从CLASSPATH的路径中,会先找com这个文件夹,然后依次找下去。因为如果有包存在的时候,这个包就是这个类不可分割的一部分。
- 这个情况下,CLASSPATH中就要配置com文件夹所在的路径
3. 如果运行的Hello类,被打包到一个jar中,比如是me.jar
那么当运行java Hello的时候,JVM会从CLASSPATH中指定的路径中查找,是否有me.jar,如果有那么就从me.jar中将Hello.class载到内存,然后运行,如果没有那么就报错。(这是Hello没指定包的情况)
那么当运行java com.briup.test.Hello的时候,JVM会从CLASSPATH中指定的路径中查找,是否有me.jar,如果有那么就从me.jar中将com/briup/test/Hello.class加载到内存,然后运行,如果没有那么就报错。(这是Hello指定包的情况)
**注意,这时候,是要把jar文件的路径和jar文件的名字,都配置到CLASSPATH中**
package关键字解析相关推荐
- Java中的static关键字解析 转载
原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...
- synchronized 关键字解析
synchronized 关键字解析 同步锁依赖于对象,每个对象都有一个同步锁. 现有一成员变量 Test,当线程 A 调用 Test 的 synchronized 方法,线程 A 获得 Test 的 ...
- Java并发编程 Volatile关键字解析
volatile关键字的两层语义 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了 ...
- [转] Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- 第三次学JAVA再学不好就吃翔(part39)--package关键字
学习笔记,仅供参考 文章目录 面向对象 package关键字 不同包之间的访问 面向对象 package关键字 为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 包的格式 pack ...
- 【Java学习笔记之十五】Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- Java并发编程:volatile关键字解析(转载)
转自https://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatile关键字解析 Java并发编程:volatile关键字解析 v ...
- package关键字的使用
Package关键字的使用: 1.为了更好的实现项目中类的管理,提供包的概念 2.使用package声明类或接口所属的包,声明在源文件的首行 3.包,属于标识符,遵循标识符的命名规则,规范." ...
- [转] volatile关键字解析
摘要: 在 Java 并发编程中,要想使并发程序能够正确地执行,必须要保证三条原则,即:原子性.可见性和有序性.只要有一条原则没有被保证,就有可能会导致程序运行不正确.volatile关键字 被用来保 ...
最新文章
- 使用 JMeter 进行压力测试
- jdk-ant-sphnix4安装
- java集合作为参数 传递的是_Java:数组和集合类作为参数传递时的差别
- Rumor CodeForces - 893C(并查集)
- cookie代码加时间多久出现一次_JavaWeb——Cookie详解
- photos for mather's day
- 第三章CDMA的原理和应用(3)
- 用URL传值的浏览器最大长度限制
- 英雄联盟服务器维修中启动游戏失败,电脑登录英雄联盟失败的八种解决方法
- Python制作【大麦网】自动抢票程序
- 台北宇珍2021春拍捷报,美国博物馆专拍创下白手套佳绩
- 跨域问题,以及nginx应对403 ACAO的处理办法
- 高线测径仪精密测量已实现全面的检测
- oracle证书怎么查成绩,Oracle认证考试成绩查询
- 工具 | Cmder 自定义 aliases 命令
- MySql导入、导出数据解决方案(SQL语句)
- 具备听力保护作用耳机有哪些、不伤耳骨传导耳机排名
- 安装wine及相关软件
- Hexo Next为每篇文章设置自定义的banner图片
- 关于齐次坐标的理解(经典)