包及访问权限

包是一个文件夹,它是类的一种特殊性质,可以更合理的管理大量的类文件,设置他人对类成员的访问权等。
在Java开发大型项目时,通常要把类分门别类地存到文件夹里,在将这些文件夹一起编译执行,这样的程序代码更易于维护。同时将类分割开后,对于类的使用也就有了相应的访问权限。


包(package)的基本概念
当一个大型程序由多个不同的组别或人员共同开发时,不可能保证每个人写的类名称是完全不同的,这样一来就可能出现同文件覆盖的问题。那么为了解决这样的麻烦确保程序可以正常运行,就必须通过使用package关键字来帮忙。所谓的包(package)指的就是一个文件夹,即在不同的文件夹之中可以保存同名的类文件。
包的使用方法:在类或接口当然最上面一行加上package的声明。通常包全部用小写字母命名。
package package 名称[.package 名称2.package 名称3…];

程序中如果有package语句,该语句一定是源文件中第一条可执行语句,它的前面只能有注释或空行。另外一个文件中最多只能有一条package语句。
经过package的声明之后,同一文件内的接口或类就都会被保存在相同的package中。
包的名字有层次关系,各层以点分隔。包层次必须与Java开发系统的文件系统结构相同。
若包声明如下:package java.awt.a,则文件中的接口和类都存放在…java\awt\a目录下。

package的使用
package demo.java;   //声明package,相当于将Perso类和TestPerson1类放入demo\java文件夹之下
class Person
{
    public String talk()
    {
        return"Person>>>>talk()";
    }
}
class TestPackage1
{
    public static void main(String args[])
    {
        System.out.println(new Person().talk());
    }
}

包的导入
使用包可以将功能相似的若干类保存在一个文件目录之中,但这样一来就有可能出现包之间的互相访问问题,当一个程序需要其他包中类的时候可以通过import完成导入操作。package导入方法如下
import package 名称.类名称;
若某个类需要被访问时,则必须把这个类公开出来,即此类必须声明public。通过import命令,可将某个package内的整个类导入,后续程序可直接使用类名称,而不用再写上被访问的package的名称。

若在不同的package中存在相同类名的public类,若要访问某个public类的成员时,
在程序代码内必须明确指明“被访问package的名称.类名称”。

包的导入使用范例

package demo.java.a;
public class Person
{
public String talk()  //类中的方法
{
return "Person>>>talk()";
}
}
//声明一个demo.java.b包 并调用demo.java.a中的类方法
package demo.java.b;
import demo.java.a.Peraon;
//将demo.java.a包中的Person类导入此包中
class TestPerson2
{
    public static void main(String args[])
    {
        //调用demo.java.a中的方法并输出
        System.out.println(new Person().talk());
    }
}
第一句声明一个demo.java.b包将TestPerson2类放入此包中。
第二句使用import语句,将demo.java.a包中的Person类导入到此包中。
最后一句调用demo.java.a包中的Person类中的talk()方法。

提示:如果一个项目中有几百个类时,为了方便导入可以使用“包.”的形式完成。虽然使用的是“包.”,但实际上并不表示此包之中所有类都会被导入,导入的时候也只是导入所需要的类,不需要的类是不会有任何加载的,所以分开导入和使用“*”导入从性能上讲是完全一样的。

上面程序也可以写成如下形式:

package demo.java.b;
class TestPerson3
{
public static void main(String args[])
{
//在程序中将写出所用类的具体位置
System.out.println(new demo.java.a.Person().talk());
}
}
程序中没有使用import语句,但是使用Person类
的时候使用了“包名.类名”的方式,所以在程序中也可以使用此方法来使用
非本类所在包中的类。
很多时候有可能在程序开发之中导入的包里面有同名的类,则这个时候再使用类的话就
必须写上类的完整名称“包名.类名”才可以正确操作。

JDK中常见的包

包名 描述
java.lang java.lang包含一些java语言的核心类,如String,Math,Integer,System和Thread,提供常用功能。在java.lang包中还有一个子包:java.lang.reflect,用于实现java类的反射机制(Java1.2以后所有版本中java.lang这个包会自动导入,对于其中的类,不需要使用import语句来导入,如System类)。
java.awt java.awt包含构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
avax.swing avax.swing此包用于建立图形用户界面,包含的组件相对于java.awt包而言是轻量级组件。
java.applet java.applet包含applet运行所需要的一些类。可以实现图形绘制、字体和颜色控制、动画和声音的插入、人机交互及网络交流等功能.Apple还提供各种名为抽象窗口工具箱
java.net java.net包含执行与网络相关的操作的类。
java.io java.io包含能提供多种输入/输出功能的类。
java.util java.util包含一些实用工具类,如定义系统特性与日期日历相关的方法。

导入一个Applet程序所需要的包

package demo.java;    //声明包demo.java
import java.applet.*;   //导入java.applet中所有包
import java.awt.*;     //导入java.awt中所有包
 public class MyApplet extends Applet   //声明一个MyApplet类继承Applet类。
{
    public void paint(Graphics g)
    {
        g.drawString("世界,你好!",30,30);   //输出一行字,调用Java中自带的方法在图形化窗口输出一行字
        g.drawLine(50,50,100,100);  //画一条线,调用Java中自带的方法在图形化窗口输出一条线段
    }
}
第2,3行导入实现小窗口应用程序的包。

Applet程序必须继承一个Applet类,Java是单继承局限,所以此程序不会在用了。Applet程序和Application程序有一个最大区别:Applet不是依靠主方法运行,而Application是依靠主方法运行的,Applet已经成为了一个过去。

类成员的访问控制权限
Java中四种访问控制权限,privatedefaultprotectedpublic
private:如果一个成员方法或成员变量名前使用private访问控制符,那么这个成员只能在这个类内部使用。
default:如果一个成员方法或成员变量名前没有使用任何访问控制符,那么这个成员拥有的是默认的(default)访问控制符。默认的访问控制成员可以被这个包中的其他类访问。如果一个子类与其父类位于不同包中,子类也不能访问父类中的默认访问控制成员。
protected:如果一个成员方法或成员变量名前使用protected访问控制符,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。
public:如果一个成员方法或成员变量名前使用了public访问控制符,那么这个成员可以被所有的类访问,不管类与被访问类是否在同一个包中。

权限 private default protected public
同一类
同一包中的类
不同包的子类
其他包中的类

类成员的访问控制权限使用范例

范例1
package demo.java.b;
import demo.java.a.*; //通过导入demo.java.a.*;而导入所需要的Person类
public class Student extends Person
{
public Student(String name)
{
this.name=name;   //Stude类访问Person类中的name属性
}
public String talk()
{
return "Person>>talk(),"+this.name;
}
}

范例

package demo.java.c;
import demo.java.b.*;
class TestPackage
{
public static void main(String args[])
Student s=new Student("javafans");
s.name="javafans";  //通过对象调用受保护的属性
System.out.println(s.talk());
}
}

Java命名规范
JDK中类的声明,方法的声明,常量的声明有一定规律
1,包名中的字母一律小写,如demo.java。
2,类名、接口名应当使用名词,每个单词首字母大写。如TestPerson。
3,变量名(属性名)第一个单词小写,后面单词的首字母大写。如newLxh。
4,方法名的第一个单词小写,后面每个单词大写,如talkMySelf()。
5,常量名中的每个字母一律大写,如COUNTRY。


打包工具>>>jar命令的使用
jar文件即java archive file的缩写,其应用与Java息息相关。jar文件就是一种压缩文件,与常见的ZIP压缩文件格式兼容,习惯上称之为jar包。如果开发者开发了许多类,当需要把这些类提供给用户时,通常都会将这些类压缩到jar文件中,以jar包的方式提供给用户使用。只要别人的classpath环境变量的设置中包含这个jar文件,Java虚拟机就能自动在内存中解压这个jar文件,把这个jar文件当做一个目录,在这个jar文件中去寻找所需要的类名及包名所对应的目录结构。
jar命令是Java中提供的一个非常有用的一个命令,可以用来对大量的类(.class文件)进行压缩,然后存为.jar文件。jar压缩文件可以方便管理大量的类文件,,进行压缩也减少了文件所占的空间。

只要在命令行中使用以下命令就可以将一个包打成一个jar文件。
jar-cvf create.jar demo

-c:创建新的存档
-v:生成详细输出到标准输出上。
-f:指定存档文件名。
create.jar:是生成jar文件的名称。
demo:要打成jar文件的包


单例设计模式

package demo.java.b
class Singleton
{
private static Singleton inst=new Singleton();   //实例化对象
private Singleton(){}  //此时类中不会再生成无参的什么都不做的构造
public static Singleton getInst()
{
return inst;
}
public void print()
{
System.out.println("HelloWorld");
}
}
class Test1
{
public static void main(String args[])
{
Singleton inst=null;   /声明对象
inst=Singleton.getainst();
inst.print();
}
}

如果想要产生类的实例化对象,那么一定要调用构造方法,如果把一个类的构造方法卡死了,那么就表示外部无法调用此构造,就意味着外部无法产生实例化对象。同时在类内部定义的本类实例化对象使用的是static定义,static特点是在全局数据区之中保存,是一个公共属性。那么不管外部声明多少个对象实际上只是取得了唯一的一个实例化对象。这样的设计模式称之为单例设计模式。


多例设计模式
多例设计模式指的是一个类可以定义指定多个对象,不管是单例还是多例,构造方法都不可以使用public定义。

public demo.java.d;
classSex  //性别
{
private String title;  //保存信息
private static final Sex MALE=new Sex("男");
private static final Sen FEMALE=new Sen("女");
private Sex(String title)
{
this.title=title;
}
public static Sex getInst(int ch)
{
switch(ch)
{
case 0:
return MALE;
case 1:
return FEMALE;
default:
return null;
}
}
public String toString()
{
return this.title;
}
}
public class Test
{
public static void main(String args[])
{
System.out.println(Sex.getInst(0));
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,360评论 6 343
  • 今天,朋友圈被杨绛先生去世的消息刷屏了,我方惊讶于我屌丝环绕的周遭,尽还有那么多深藏的知识分子。这些年,我除了专业...
    再续朝圣路阅读 367评论 0 1
  • 认识朋友小A的时候,他已经从导游成功转型当了旅游达人了。每天满世界飞来飞去,免费住各种豪华的酒店,吃各类精致的美食...
    未末小七阅读 818评论 0 2
  • 多少人生 如同是在一个轨道上 还没有进入轨道 就已经知道轨道那头的结果 单行的轨道 非要不偏不倚 必须沿着轨迹 一...
    董禹阗阅读 239评论 3 7