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中作为语言特征),该类只能实例化一个对象,对于一些数据库操作时,单件类是比较有效的,避免每次实例化一个对象时都对数据库进行一次连接访问操作,并且可以避免一些同步问题;
thinkinginjava学习笔记05_访问权限的更多相关文章
- ThinkingInJava 学习 之 0000005 访问权限控制
1. 包:库单元 1. 代码组织 2. 创建独一无二的包名 3. 定制工具库 4. 用import改变行为 5. 对使用包的忠告 2. Java访问权限修饰词 1. 包访问权限 2. public : ...
- Liunx学习笔记(三) 文件权限
一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...
- openresty 学习笔记五:访问RabbitMQ消息队列
openresty 学习笔记五:访问RabbitMQ消息队列 之前通过比较选择,决定采用RabbitMQ这种消息队列来做中间件,目的舒缓是为了让整个架构的瓶颈环节.这里是做具体实施,用lua访问Rab ...
- Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围
1.Java有三种访问权限修饰符,分别为public.protected.private,还有一种为缺省权限修饰符的情况,记为default.其中,可以由public和default来修饰类:这四种修 ...
- thinkinginjava学习笔记06_复用类
MarsEdit粘代码好麻烦,所有代码交给github:https://github.com/lozybean/MyJavaLearning 复用一个类常用的两种方式:组合.继承: 组合 将对象引用置 ...
- 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权
1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...
- Linux基础学习笔记3-用户权限
本章内容 用户user 令牌token,identity Linux用户:Uername/UID 管理员:root,0 普通用户:1-65535 系统用户:1-499,1-999(Centos7) 对 ...
- Android学习笔记_20_访问应用权限汇总
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com. ...
- 图解HTTP学习笔记——确认访问用户身份的认证
前言 认证功能能让Web页面只被有权限的人访问.而认证机制究竟是怎样一个原理呢?通过今天的学习能对这个有个大致的了解. 正文 什么是认证 计算机无法判断对方的身份,需要客户端自报家门. 服务端为确认客 ...
随机推荐
- Chrome浏览器调试技巧
本文主要讲解针对chrome浏览器的调试方案,对于其他浏览器其实大同小异. 先来入门一点的 DOM元素调试 看上图: 以上图表明的1,2,3,4,5标记说明: 1,为移动设备模拟器,chorme现在是 ...
- Java爬虫_资源网站爬取实战
对 http://bestcbooks.com/ 这个网站的书籍进行爬取 (爬取资源分享在结尾) 下面是通过一个URL获得其对应网页源码的方法 传入一个 url 返回其源码 (获得源码后,对源码进 ...
- SQL运行时间
打开SQL运行时间统计 set timing on; 查询是否有运行时间较长的SQL存在 select a.sid, b.sql_text from v$session a, v$sqlare ...
- Codeforces 149 E. Martian Strings
正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...
- 十二、 Spring Boot 静态资源处理
spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通 ...
- 《奇思妙想:15位计算机天才及其重大发现》【PDF】下载
<奇思妙想:15位计算机天才及其重大发现>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196328 内容简介 本书介绍了15位当代 ...
- 在Azure上部署IPv6的App通过IOS App Store审核
随着中国企业出海Go Global,越来越多的用户开始在Global Azure部署自己的应用.由于对Global Azure功能和文档的不熟悉,使用过程中或多或少遇到了一些坑.事实上呢,这些并不是坑 ...
- 添加组groupadd,修改组groupmod,删除组groupdel,将用户加入删除组gpasswd
groupadd -g GID :指定组id groupmod -g GID :修改组id -n 新组名 :修改组名 groupmod -n newname oldname groupdel grou ...
- 【java设计模式】【结构模式Structural Pattern】合成模式Composite Pattern
package com.tn.pattern; import java.util.Vector; public class Client { public static void main(Strin ...
- VM环境下Linux虚拟机扩展存储空间操作方法总结
用VMwareware虚拟机安装的 Linux 系统剩余空间不足,造成软件无法正常安装.如果重新装一遍系统就需要重新配置好开发环境和软件的安装配置. 一.空间扩展 (1)打开VMware,选择Edi ...