Javaの名前空間の仕組みの1つにパッケージがあります。大規模開発では必須の概念です。また、他人の作ったコードの再利用という観点でも、パッケージを正しく活用する必要があります。

・完全修飾名:パッケージ名まで含めたクラスやインターフェースの呼び名
・単純名:パッケージ名を除いたStringの部分(クラス名)

パッケージで実現できることは
・名前空間
・意味的なまとまりの管理(クラスの設計同様、パッケージの設計も責務の分割が目的)
・アクセス制御(Javaのデフォルトアクセス制御は、パッケージ内からしかアクセスできない制御)

パッケージ名にインターネットドメイン名(DNSドメイン名)を推奨する。(DNSやURLと逆順)
習慣として、型名は大文字で始まる名前、パッケージ名は全て小文字にします。

パッケージの宣言はファイルの先頭に「package packageの完全修飾名;」を書く(相対パスのような表記はない)

クラス名とインターフェース名がファイル名に制約をつけるように、パッケージ名はディレクトリ名に制約をつけます。(必須ではない)

java.langパッケージは暗黙にインポートする。

単純名を書いた時の名前解決の順序は、
・そのファイル内で定義する型名
・単一型インポートした型名
・同じパッケージ内の型名
・オンデマンドインポートした型名
曖昧さが発生する場合、面倒でも完全修飾名で型名を書くことを進めます。

単純名の衝突を防ぐ指針は、
・標準ライブラリの型名と同名は避ける
・オンデマンドインポート(「*」を使ったインポート)をなるべく避ける

staticインポートはパッケージ内のクラス及びインターフェースのstaticメンバ名をインポートします。(慎重に)

クラスとインターフェースは、public修飾子を
・付けている場合、publicスコープ
・付けていない場合、パッケージスコープ

インターフェースだけをパッケージの外にさらして、実装クラスをパッケージ内に隠蔽する技法はよく使います。

パッケージ宣言文がない場合、名前なしパッケージと見なされます。名前なしパッケージもパッケージの1つです。

JAVA_Package的更多相关文章

  1. hbase协处理器编码实例

    Observer协处理器通常在一个特定的事件(诸如Get或Put)之前或之后发生,相当于RDBMS中的触发器.Endpoint协处理器则类似于RDBMS中的存储过程,因为它可以让你在RegionSer ...

  2. gRPC源码分析0-导读

    gRPC是Google开源的新一代RPC框架,官网是http://www.grpc.io.正式发布于2016年8月,技术栈非常的新,基于HTTP/2,netty4.1,proto3.虽然目前在工程化方 ...

  3. dubbox 增加google-gprc/protobuf支持

    好久没写东西了,今年实在太忙,基本都在搞业务开发,晚上来补一篇,作为今年的收官博客.google-rpc 正式发布以来,受到了不少人的关注,这么知名的rpc框架,不集成到dubbox中有点说不过去. ...

  4. Cocos2d-JS/Ajax用Protobuf与NodeJS/Java通信

    原文地址:http://www.iclojure.com/blog/articles/2016/04/29/cocos2d-js-ajax-protobuf-nodejs-java Google的Pr ...

  5. Android Log Tag含义

    在分析Android问题的时候重要的手段之一就是分析log,在events.log中有很多系统log,其中有些log的含义并不是很了解,下面就是从安卓源码中得到的系统log的tag. 关于Tag的说明 ...

  6. Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据

    Protobuf序列化的字节流数据是不能自描述的,当我们通过socket把数据发送到Client时,Client必须知道发送的是什么类型的数据,才能正确的反序列化它.这严重影响限制了C/S功能的实现, ...

  7. golang下的grpc

    facebook的thrift也是开源rpc库,性能高出grpc一倍以上,grpc发展的较晚,期待以后有长足的进步.简单来说thrift = grpc + protobuf gRPC基于HTTP/2标 ...

  8. hbase 协处理器

    一.服务端1.安装Protobuf2.RPC proto 定义文件:Examples.protooption java_package = "org.apache.hadoop.hbase. ...

  9. protobuf初体验

    概念介绍 Protocol buffers 是google公司的与语言无关.与平台无关的.可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧.快速.简单.Protocol buffers 目前 ...

随机推荐

  1. opencv mser算法框出图片文字区域

    MSER(Maximally Stable Extrernal Regions)是区域检测中影响最大的算法 1. 原理 MSER基于分水岭的概念:对图像进行二值化,二值化阈值取[0, 255],这样二 ...

  2. 去掉user agent stylesheet 浏览器默认样式 [ 2.0 版本 ]

    今天在写一个网页的时候发现一个问题,我的table的样式很奇怪,也没有设置什么样式,跟其他的页面不一样,打开开发者工具一看,发现有这么点样式: 其中右上角:user agent stylesheet ...

  3. linux 为什么要关闭selinux

    一般安装linux课程时都把SELinux与iptables安排在后面,使初学者配置linux服务器时不成功,却没有头绪,那是因为在RedHat linux操作系统中默认开启了防火墙,SELinux也 ...

  4. 00008 - crontab定时执行任务命令详解

    linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...

  5. confluence部署与破解

    一.confluence安装 #安装环境环境 centos7.jdk8.mysql5.7.Confluence6.14.1 confluence下载地址 wget https://product-do ...

  6. SAS ODS GRAPHICS SGPLOT 画图 指存放定路径、名称、指定格式

    OPTION NOCENTER LS=MAX PS=MAX NODATE; LIBNAME S 'E:\00@Data'; PROC FREQ DATA=S.DATA00; TABLES CLE_DA ...

  7. 第16课 右值引用(3)_std::forward与完美转发

    1. std::forward原型 template <typename T> T&& forward(typename std::remove_reference< ...

  8. 在django中使用django_debug_toolbar进行日志记录

    一.概述 django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能. 包括查看执行的sql语句,db查询次数,request,headers,调试概览等.  ...

  9. jQuery实现鼠标滑过图片列表加遮罩层

    这个例子实现的功能是:有一列图片列表,鼠标滑过时,将有遮罩层的另一张图盖在该图片的上方,实现鼠标hover的效果. 一.HTML代码: <div class="home-content ...

  10. mac maven lombok报错

    maven已导入lombok的jar包,注解@Data,但是用到getter,setter时依然出错.解决办法: 打开eclipse.ini文件,加上如下两句: -Xbootclaspath//Use ...