网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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,移动开发
本月文章推荐
.GreedySnake贪吃蛇-测试版.
.Java XML教程(附:源程序A).
.RMI的主要优点.
.Java中引用,造型等问题解析.
.用JBuilder9 开发Struts实例.
.Java与.NET间进行Web Service交互.
.J2ME编程开发平台中几个重要概念.
.超越梦想 EJB 3.0规范全新体验.
.反向控制和面向切面编程在Spring.
.java 应用程序的发布.
.轻松测试-学习如何简化测试外部资.
.NaN 属性 (Global).
.用NetBeans开发平台开发J2ME游戏.
.表单递交合法性检测 - 只接受数字.
.编程技巧:在Java应用开发中如何.
.如何用Java实现Web服务器.
.高级应用 java多线程设计模式详解.
.Java 6新更新 JRE环境和命令行开.
.深入研究JAVA字节码反编译的方法.
.Java.util包简介 如何开发应用之.

控制对类内部数据或函数成员访问的类

发表日期:2008-1-5



  public class ProtectClassTest{
  public static void main(String[] args) throws ProtectClass.NoAccessException{
  ProtectClass p1=new ProtectClass("chenqi","100001");
  System.out.println("p1.bankAccount:"+p1.getField(p1.BANKACCOUNT_POS));
  System.out.println("p1.bankPassWord:"+p1.getField(p1.BANKAPASSWORD_POS));
  try{
  p1.setMethod(p1.BANKACCOUNT_POS,"risingsoft");
  }
  catch(ProtectClass.NoAccessException error){
  System.out.println("set p1.bankAccount:"+error);
  }
  try{
  p1.setMethod(p1.BANKAPASSWORD_POS,"100002");
  }
  catch(ProtectClass.NoAccessException error){
  System.out.println("set p1.bankPassword:"+error);
  }
  System.out.println("p1.bankAccount:"+p1.getField(p1.BANKACCOUNT_POS));
  System.out.println("p1.bankPassword:"+p1.getField(p1.BANKAPASSWORD_POS));
  }
  }
  
  class ProtectClass{
  //user define exception
  public static final class NoAccessException extends Exception{
  public String toString(){
  return "No privilege to access this property(field/method)";
  }
  }
  //static final defination section
  public static final int BANKACCOUNT_POS=0;
  public static final int BANKAPASSWORD_POS=1;
  //Inner property state array
  //只需要修改以下的对象元素访问全县数组即可动态控制用户可读/写的数据成员范围。(0,0 / 0,1 / 1,0 / 1,1)
  private static final int[] PROPERTY_ARRAY={0,1};
  //get the property state array count
  private final int getPropertyCount(){
  return (PROPERTY_ARRAY!=null)?PROPERTY_ARRAY.length:0;
  }
  //get the property available state
  public final boolean getPropertyAvailable(int pos){
  return (pos>=0 && pos<getPropertyCount())?(PROPERTY_ARRAY[pos]==1):false;
  }
  //private property defination section
  private String bankAccount;
  private String bankPassword;
  private void setBankAccount(String bankAccount) throws NoAccessException{
  if (getPropertyAvailable(BANKACCOUNT_POS))
  this.bankAccount = bankAccount;
  else
  throw new NoAccessException();
  }
  private void setbankPassword(String bankPassword) throws NoAccessException{
  if(getPropertyAvailable(BANKAPASSWORD_POS))
  this.bankPassword=bankPassword;
  else
  throw new NoAccessException();
  }
  
  ProtectClass(String bankAccount,String bankPassword) throws NoAccessException{
  /*
  假如使用这两句被屏蔽代码,则对象无法构造
  this.setBankAccount(bankAccount);
  this.setbankPassword(bankPassword);
  */
  this.bankAccount=bankAccount;
  this.bankPassword=bankPassword;
  }
  ProtectClass() throws NoAccessException{
  this("","");
  }
  
  public final void setMethod(int methodID,String param) throws NoAccessException{
  switch(methodID){
  case BANKACCOUNT_POS:
  try{
  setBankAccount(param);
  }
  catch(NoAccessException error){
  throw error;
  }
  break;
  case BANKAPASSWORD_POS:
  try{
  setbankPassword(param);
  }
  catch(NoAccessException error){
  throw error;
  }
  break;
  }
  }
  private String getBankAccount(){
  if (getPropertyAvailable(BANKACCOUNT_POS))
  return bankAccount;
  else
  return null;
  }
  private String getbankPassword(){
  if(getPropertyAvailable(BANKAPASSWORD_POS))
  return bankPassword;
  else
  return null;
  }
  public final String getField(int methodID){
  switch(methodID){
  case BANKACCOUNT_POS:
  return getBankAccount();
  case BANKAPASSWORD_POS:
  return getbankPassword();
  default:
  return null;
  }
  }
  }
上一篇:分析 Java 中乱码问题产生的根源 人气:966
下一篇:利用基本数组类型搭建可自扩展的数组类 人气:652
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐