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. Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径)

    在今天的学习Maven项目中遇到的这个错误:pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径) 在Maven项目学习中,缓存问 ...

  2. 掌握NIO,程序人生

    就像新IO为java带来的革新那样,让我们也开启一段新的程序人生. 关键字:NIO,BIO,伪IO,AIO,多路复用选择器,通道,缓冲区,jdk研究,回调函数,高并发 java.nio 概述 历史背景 ...

  3. Vue 浅谈前端js框架vue

    Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...

  4. SALM入门笔记(1):特征点的匹配

    SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...

  5. 命令行保存指定目录文件的名字(可包含文件夹文字)到txt文本文件

    Microsoft Visual Studio中配置OpenCV解决方案属性的时候, 需要将OpenCV的lib扩展名的库文件添加到属性的依赖列表里面,网上的有些人博客里面直接给出的会有问题(但大多数 ...

  6. Spring Boot系列(一) Spring Boot介绍和基础POM文件

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...

  7. C#将dataGridView中显示的数据导出到Excel(大数据量超有用版)

    开发中非常多情况下须要将dataGridView控件中显示的数据结果以Excel或者Word的形式导出来,本例就来实现这个功能. 因为从数据库中查找出某些数据列可能不是必需显示出来,在dataGrid ...

  8. HTML中在a标签中添加onclick事件

    1.链接的onclick 事件被先执行,其次是href属性下的动作; 2.假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行,onclick 必须得到一个false的返 ...

  9. vue从入门到女装:从零开始搭建后台管理系统(一)安装框架

    安装及运行都是基于node的,不会node的可以自行百度,网上教程很多,也不难 项目效果预览: demo1 demo2 源码下载 开始安装框架: vue ==>vue-cli安装   eleme ...

  10. MySQL存储过程之游标实战

    MySQL存储过程之游标实战 ​ 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. ​ 先说一下业务需求吧 ...