zoukankan      html  css  js  c++  java
  • thinkinginjava学习笔记05_访问权限

    Java中访问权限等级从大到小依次为:public、protected、包访问权限(没有关键词)、private;

    以包访问权限为界限,public、protected分别可以被任意对象和继承的对象访问,而包访问权限(未加关键词的类、方法等)则不能在包外被访问;在一个类中,不能出现相同类成员;在同一个包中,不可以出现相同类;

    public作为接口访问权限,将一些方法作为public,即将该方法作为接口,供其他程序调用;private权限下,除了包含该成员的类之外,其他任何类都无法访问该成员,用来隐藏一些类和方法;protected权限下,只有派生类具有访问权限,提供一个可继承的方法;没有关键词的权限成为包访问权限,对包内的类相当于public,对包外的类相当于private;访问权限的控制构成了实现的封装;

    java中,类访问权限只能是public或者包访问权限(除了内部类);一个编译单元最多有一个public类,该类的名字必须和文件的名称相同,并如果指定该类为public,则只有该类可以在该文件的包外部被调用;每个编译单元可以有多个非public类,一个public类,所有这些类在编译的时候都会被编译成.class文件,Java可运行程序是一组可以打包并且压缩为java文档文件(JAR)的.class文件,解释器负责查找、装载和解释这些文件;

    使用package语句,可以将编译单元的public类名称位于包名的保护伞下,使其名称在别的包中调用时具有唯一性;并且使用时,必须使用import关键字导入;

    java创建包名称时,使用创建者域名的反顺序小写名称作为第一部分,以CLASSPATH作为根目录,将相应的包相对目录作为第二部分(每个目录之间在调用时以点号连接);

    如,在CLASSPATH中添加$HOME/org/lozybean,将其作为包的ROOT之一,然后在该目录下新建util目录,并且编写了一个自己定义的java文件,并且使用package org.lozybean.util将该文件置于包文件名的保护下;在其他的任何地方,都可以使用import static org.lozybean.util.ClassName来导入编写好的静态方法,即可直接在当前文件中使用该静态方法,其他方法或者类(可访问的)则使用import即可;

     定制工具库;

    新建java项目,并将java项目路径/bin(eclipase会在项目目录下自动添加src和bin目录)添加到JAVAPATH中;新建包:org.lozybean.util,并添加类:Print,添加定制的print工具

    package org.lozybean.util;

     

    //: org/lozybean/util/Print.java

    // Print methods that can be used without

    // qualifiers, using Java SE5 static imports:

     

     

    import java.io.*;

     

    public class Print {

     

        //Print with a newline;

        public static void println(Object obj){

            System.out.println(obj);

        }

        //Print a newline by itself;

        public static void println(){

            System.out.println();

        }

        //Print with no line break;

        public static void print(Object obj){

            System.out.print(obj);

        }

        //The new Java SE5 printf() (from C):

        public static PrintStream

        printf(String format,Object... args){

            return System.out.printf(format,args);

        }

    }

     

    新建一个类:Test.java,测试:

    import static org.lozybean.util.Print.*;

     

    publicclass Test{

        public static void main(String[] args){

            print("ok");

        }

    }

     

    以下示例给出两种特殊的实例化方式:

    class Soup1{

        private Soup1(){};

        public static Soup1 makeSoup(){

            return new Soup1();

        }

    }

    class Soup2{

        private Soup2(){};

        private static Soup2 ps1 = new Soup2();

        public static Soup2 access(){

            return ps1;

        }

        public void f(){};

    }

    public class Lunch {

        void testPrivate(){

            //! Soup1 soup = new Soup1();

        }

        void testStatic(){

            Soup1 soup = Soup1.makeSoup();

        }

        void testSingleton(){

            Soup2.access().f();

        }

    }

    以上示例中,Soup1屏蔽了默认的构造方法(构造方法权限为private),并且添加静态方法返回一个实例化对象,通过这样的方式,可以在类内部记录每次实例化的过程;

    Soup2则是实现了一个单件类(Ruby中作为语言特征),该类只能实例化一个对象,对于一些数据库操作时,单件类是比较有效的,避免每次实例化一个对象时都对数据库进行一次连接访问操作,并且可以避免一些同步问题;

  • 相关阅读:
    YUI3学习笔记 ( 3 )
    DataSnap基础
    SQL语句的添加、删除、修改多种方法
    用命令实现Win7远程桌面关机和重启
    Delphi笔记数据库开发
    Delphi数据库处理
    数据库左连接的一点知识
    FastReport4.6程序员手册_翻译
    ADO BUG之'无法为更新定位行....' 解决之道
    动态将ADOQuery数据移植到ClientDataSet通用函数
  • 原文地址:https://www.cnblogs.com/lyon2014/p/4772022.html
Copyright © 2011-2022 走看看