码迷,mamicode.com
首页 > 编程语言 > 详细

thinkinginjava学习笔记05_访问权限

时间:2015-08-31 01:00:19      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

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_访问权限

标签:

原文地址:http://www.cnblogs.com/lyon2014/p/4772022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!