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中作为语言特征),该类只能实例化一个对象,对于一些数据库操作时,单件类是比较有效的,避免每次实例化一个对象时都对数据库进行一次连接访问操作,并且可以避免一些同步问题;

thinkinginjava学习笔记05_访问权限的更多相关文章

  1. ThinkingInJava 学习 之 0000005 访问权限控制

    1. 包:库单元 1. 代码组织 2. 创建独一无二的包名 3. 定制工具库 4. 用import改变行为 5. 对使用包的忠告 2. Java访问权限修饰词 1. 包访问权限 2. public : ...

  2. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  3. openresty 学习笔记五:访问RabbitMQ消息队列

    openresty 学习笔记五:访问RabbitMQ消息队列 之前通过比较选择,决定采用RabbitMQ这种消息队列来做中间件,目的舒缓是为了让整个架构的瓶颈环节.这里是做具体实施,用lua访问Rab ...

  4. Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围

    1.Java有三种访问权限修饰符,分别为public.protected.private,还有一种为缺省权限修饰符的情况,记为default.其中,可以由public和default来修饰类:这四种修 ...

  5. thinkinginjava学习笔记06_复用类

    MarsEdit粘代码好麻烦,所有代码交给github:https://github.com/lozybean/MyJavaLearning 复用一个类常用的两种方式:组合.继承: 组合 将对象引用置 ...

  6. 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权

    1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...

  7. Linux基础学习笔记3-用户权限

    本章内容 用户user 令牌token,identity Linux用户:Uername/UID 管理员:root,0 普通用户:1-65535 系统用户:1-499,1-999(Centos7) 对 ...

  8. Android学习笔记_20_访问应用权限汇总

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com. ...

  9. 图解HTTP学习笔记——确认访问用户身份的认证

    前言 认证功能能让Web页面只被有权限的人访问.而认证机制究竟是怎样一个原理呢?通过今天的学习能对这个有个大致的了解. 正文 什么是认证 计算机无法判断对方的身份,需要客户端自报家门. 服务端为确认客 ...

随机推荐

  1. 地图开发GIS的应用有哪些?

    GIS的应用领域有哪些? 地理信息系统在最近的30多年内取得了惊人的发展,广泛应用于资源调查.环境评估.灾害预测.国土管理.城市规划.邮电通讯.交通运输.军事公安.水利电力.公共设施管理.农林牧业.统 ...

  2. ThinkPHP5.0 实现 app支付宝支付功能

    前几天做项目,要求要用到支付宝接口,第一次做,弄了好几天 各种坑啊,简单写一下我做支付宝支付的过程,希望对也是第一次做支付宝支付的童鞋有帮助, 不懂的可以先去支付平台看一下支付宝支付的文档,我是下的d ...

  3. CSS3 box-shadow 内外阴影效果

    说明 box-shadow 属性可以给元素边框周围添加一个或者多个阴影效果.定义多个阴影,使用逗号分隔. 语法 box-shadow: none | [inset? && [<o ...

  4. MyEclipse 使用图文详解

    引言 某天在群里看到有小伙伴问MyEclipse/Eclipse的一些使用问题,虽然在我看来,问的问题很简单,但是如果对于刚刚学习的人来说,可能使用就不那么友好了.毕竟我在开始使用MyEclipse/ ...

  5. webrtc视频数据解码处理流程

  6. python 3.6 +pyMysql 操作mysql数据库

    版本信息:python:3.6 mysql:5.7 pyMysql:0.7.11 ########################################################### ...

  7. Java内存模型—JMM

     有时候编译器.处理器的优化会导致runtime与我们设想的不一样,为此Java对编译器和处理器做了一些限制,JAVA内存模型(JMM)将这些抽象出来,这样编写代码时就无需考虑那么多底层细节,并保证& ...

  8. ADC/DAC设计常见40问

    本文章是关于ADC/DAC设计经典问答,涵盖时钟占空比.共模电压.增益误差.微分相位误差.互调失真等常见问题. 1. 什么是小信号带宽(SSBW)? 小信号带宽(Small Signal Bandwi ...

  9. C# 文件去仅仅读工具-线程-技术&amp;分享

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. 利用AndroidStudio开发java工程

    1.新建一个project,或者如果你已经有project的话,那就直接新建一个module.注意选择Java library,然后下一步. 2.输入module的一些信息.点击finish.(在创建 ...