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页面只被有权限的人访问.而认证机制究竟是怎样一个原理呢?通过今天的学习能对这个有个大致的了解. 正文 什么是认证 计算机无法判断对方的身份,需要客户端自报家门. 服务端为确认客 ...
随机推荐
- HDU 1698 Just a Hook 线段树+lazy-target 区间刷新
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 【NOIP2016提高组】换教室
https://www.luogu.org/problem/show?pid=1850 题面很长,实质很水的一道期望DP题.题面自带劝退效果. 首先用Floyd算出任意两点的最短路径.然后设f(i,j ...
- 【NOIP2012提高组】同余方程
https://www.luogu.org/problem/show?pid=1082 方程可化为ax+by=1. 用扩展欧几里得算法得到ax'+by'=gcd(a,b)的一组解后,可得x=x'/gc ...
- Codeforces 558E A Simple Task
题意:给定一个字符串,以及m次操作,每次操作对字符串的一个子区间进行升序或降序排序,求m次操作后的串 考虑桶排,发现线段树可以模拟桶排的过程,所以对26个字母分别建立线段树即可 #include< ...
- 剑指 offer代码解析——面试题39推断平衡二叉树
题目:输入一颗二叉树的根结点.推断该树是不是平衡二叉树. 假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树. 分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度 ...
- mac os x 触摸板点击无效
macbook默认轻击触摸板无效,这样是为了防止误点击.可是习惯了windows笔记本的我对这一设置非常不习惯. 能够在"system preference"的"Trac ...
- hdu 1885 Key Task(bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1885 再贴一个链接http://blog.csdn.net/u013081425/article/details ...
- FTP命令具体解释(含操作实例)
以下是微软命令行FTPclient命令大全.假设你想使用"未加工(RAW)"FTP命令而非以下翻译过的请參考:http://www.nsftools.com/tips/RawFTP ...
- Object-C与Swift混合开发
Object-C作为Apple的iOS App开发语言服务了很多个年头,2014年Apple推出了新的编程语言Swift.更高效更安全的口号再次吸引了一大批非iOS开发程序猿进入,小编觉得Swift代 ...
- 解决Unable to find setter method for attribute: [commandName]
最近学习springmvc的表单标签库,其中form标签主要用于渲染HTML表单,而form标签有很多属性,可供选择,其中一般来说(以前)最重要的是commandName属性,因为它定义了模型属性的名 ...