动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.如何配置Java Server Page运行环.
.EJB 异常处理的最佳做法(1).
.Java更新XML的四种常用方法简介(.
.里程碑式的革新—全新J2SE 1.5新.
.Java设计模式之工厂方法模式.
.Java对Domino Objects的访问 (4.
.JDBC基础教程之连接.
.Java的移位运算符.
.atan2 方法.
.如何在Java应用程序中动态的分配.
.Java开发工具与开发环境问答.
.JAVA经典实例--连接字符串.
.从配置文件读取信息.
.优秀的对象角色建模解决方案-Tor.
.Java Socket编程(四).
.开发框架hibernate3.0开发实例.
.自己写的一个未成熟的数据库连接.
.探讨Java与Ruby语言迁移时的安全.
.Java远程方法调用(2).
.JavaMail常见问题之一般问题.

类访问

发表日期:2008-1-5 |



  在Java中,亦可用访问指示符判定出一个库内的哪些类可由那个库的用户使用。若想一个类能由客户程序员调用,可在类主体的起始花括号前面某处放置一个public要害字。它控制着客户程序员是否能够创建属于这个类的一个对象。
  
  为控制一个类的访问,指示符必须在要害字class之前出现。所以我们能够使用:
  
  public class Widget {
  
  也就是说,假若我们的库名是mylib,那么所有客户程序员都能访问Widget——通过下述语句:
  
  import mylib.Widget;
  
  或者
  
  import mylib.*;
  
  然而,我们同时还要注重到一些额外的限制:
  
  (1) 每个编译单元(文件)都只能有一个public类。每个编译单元有一个公共接口的概念是由那个公共类表达出来的。根据自己的需要,它可拥有任意多个提供支撑的“友好”类。但若在一个编译单元里使用了多个public类,编译器就会向我们提示一条出错消息。
  
  (2) public类的名字必须与包含了编译单元的那个文件的名字完全相符,甚至包括它的大小写形式。所以对于Widget来说,文件的名字必须是Widget.java,而不应是widget.java或者WIDGET.java。同样地,假如出现不符,就会报告一个编译期错误。
  
  (3) 可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。
  
  假如已经获得了mylib内部的一个类,预备用它完成由Widget或者mylib内部的其他某些public类执行的任务,此时又会出现什么情况呢?我们不希望花费力气为客户程序员编制文档,并感觉以后某个时候也许会进行大手笔的修改,并将自己的类一起删掉,换成另一个不同的类。为获得这种灵活处理的能力,需要保证没有客户程序员能够依靠自己隐藏于mylib内部的特定实施细节。为达到这个目的,只需将public要害字从类中剔除即可,这样便把类变成了“友好的”(类仅能在包内使用)。
  
  注重不可将类设成private(那样会使除类之外的其他东西都不能访问它),也不能设成protected(注释④)。因此,我们现在对于类的访问只有两个选择:“友好的”或者public。若不愿其他任何人访问那个类,可将所有构建器设为private。这样一来,在类的一个static成员内部,除自己之外的其他所有人都无法创建属于那个类的一个对象(注释⑤)。如下例所示:
  
  //: Lunch.java
  // Demonstrates class Access specifiers.
  // Make a class effectively private
  // with private constrUCtors:
  
  class Soup {
   private Soup() {}
   // (1) Allow creation via static method:
   public static Soup makeSoup() {
    return new Soup();
   }
   // (2) Create a static object and
   // return a reference upon request.
   // (The "Singleton" pattern):
   private static Soup ps1 = new Soup();
   public static Soup access() {
    return ps1;
   }
   public void f() {}
  }
  
  class Sandwich { // Uses Lunch
   void f() { new Lunch(); }
  }
  
  // Only one public class allowed per file:
  public class Lunch {
   void test() {
    // Can't do this! Private constructor:
    //! Soup priv1 = new Soup();
    Soup priv2 = Soup.makeSoup();
    Sandwich f1 = new Sandwich();
    Soup.access().f();
   }
  } ///:~
  
  ④:实际上,Java 1.1内部类既可以是“受到保护的”,也可以是“私有的”,但那属于非凡情况。第7章会具体解释这个问题。
  
  ⑤:亦可通过从那个类继续来实现。
  
  迄今为止,我们创建过的大多数方法都是要么返回void,要么返回一个基本数据类型。所以对下述定义来说:
  
  public static Soup access() {
  return psl;
  }
  
  它最开始多少会使人有些迷惑。位于方法名(access)前的单词指出方法到底返回什么。在这之前,我们看到的都是void,它意味着“什么也不返回”(void在英语里是“虚无”的意思。但亦可返回指向一个对象的句柄,此时出现的就是这个情况。该方法返回一个句柄,它指向类Soup的一个对象。
  
  Soup类向我们展示出如何通过将所有构建器都设为private,从而防止直接创建一个类。请记住,假若不明确地至少创建一个构建器,就会自动创建默认构建器(没有自变量)。若自己编写默认构建器,它就不会自动创建。把它变成private后,就没人能为那个类创建一个对象。但别人怎样使用这个类呢?上面的例子为我们揭示出了两个选择。第一个选择,我们可创建一个static方法,再通过它创建一个新的Soup,然后返回指向它的一个句柄。假如想在返回之前对Soup进行一些额外的操作,或者想了解预备创建多少个Soup对象(可能是为了限制它们的个数),这种方案无疑是非凡有用的。
  
  第二个选择是采用“设计方案”(Design Pattern)技术,本书后面会对此进行具体介绍。通常方案叫作“独子”,因为它仅答应创建一个对象。类Soup的对象被创建成Soup的一个static private成员,所以有一个而且只能有一个。除非通过public方法access(),否则根本无法访问它。
  
  正如早先指出的那样,假如不针对类的访问设置一个访问指示符,那么它会自动默认为“友好的”。这意味着那个类的对象可由包内的其他类创建,但不能由包外创建。请记住,对于相同目录内的所有文件,假如没有明确地进行package声明,那么它们都默认为那个目录的默认包的一部分。然而,假若那个类一个static成员的属性是public,那么客户程序员仍然能够访问那个static成员——即使它们不能创建属于那个类的一个对象。
上一篇:接口与实现 人气:647
下一篇:在构建器里调用构建器 人气:262
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-29 时尚DJ舞曲小偷 v3.1
2008-8-29 仿代码信息分类系统 v1.0 Beta3
2008-8-29 浮梦呓语-个人网站 完整版
2008-8-29 多用户QQ空间Flash播放器
2008-8-29 美思卡企业网站管理系统高级版
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵