java中class,public的用法

一.Java访问权限饰词(access specifiers)

Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。

1. friendly

1) 果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。

2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package, 但隶属于相同的default package。

class Sundae{
//以下两个方法缺省为friendly
Sundae(){}
Void f() {System.out.println(“Sundae.f()”);
}
public class IceCream{
public static void main(String[] args){
Sundae x = new Sundae();
x.f();
}
}
2. public:可以被任何class调用

3. private:private成员只能在成员所属的class内被调用,如:

class Sundae{
private Sundae(){}//只能在Sundae class中被调用
Sundae(int i) {}
static Sundae makASundae() {
return new Sundae();
}
}
public class IceCream{
public static void main(String[] args){
// Sundae class中构造函数Sundae()是private,
// 所以不能用它进行初始化
//Sundae x = new Sundae();
Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
Sundae z = Sundae.makASundae();
}
}
4. protected:具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。

二.Class的访问权限

1.Class同样具有public、protect、friendly、private四种访问访问权限:

1)public:在任何地方都可被使用

2)protect、private:除了它自己,没有任何class可以使用,所以class不能是

protected或private(inner class除外)

3) friendly:同一个package中的classes能用

2. 如何调用构造函数被声明为private的class

1) 用static函数

2) 用Singteton模式

class Soup{
private Soup(){}
//(1)静态函数方法
public static Soup makeSout(){
return new Soup();
}
//(2)The "Singleton" pattern:

private static Soup ps1 = new Soup();
public static Soup access(){
return ps1;
}
public void f(String msg){
System.out.println("f(" + msg + ")");
}
}
public class Lunch{
public static void main(String[] args){
//Soup priv1 = new Soup();编译错误
Soup priv2 = Soup.makeSout();
Soup priv3 = Soup.access();
priv2.f("priv2");
priv3.f("priv3");
}

http://blog.sina.com.cn/s/blog_45ce6045010187ks.html

时间: 2024-10-03 17:39:03

java中class,public的用法的相关文章

java中Object.equals()简单用法

/* equals()方法默认的比较两个对象的引用! */ class Child { int num; public Child(int x){ num = x; } //人文的抛出运行时异常的好处是:可以自定义错误信息! /*public boolean equals(Object o) throws ClassCastException{ if(!(o instanceof Child)) throw new ClassCastException("中文提示:类型错误"); Ch

Java中Date各种相关用法

Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 注:在使用set方法之前,必须

Java中的Socket的用法

                               Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的网络通信时通过Socket实现的,Socket分为ServerSocket和Socket两大类,ServerSocket用于服务器端,可以通过accept方法监听请求,监听请求后返回Socket,Socket用于完成具体数据传输,客户端也可以使用Socket发起请求并传输数据.ServerSocke

Java中Class类及用法

Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建. 说白了就是: Class类也是类的一种,只是名字和class关键字高度相似.Java是大小写敏感的语言. Class类的对象内容是你创建的类的类型信息,比如你创建

JAVA中mark()和reset()用法

根据JAVA官方文档的描述,mark(int readlimit)方法表示,标记当前位置,并保证在mark以后最多可以读取readlimit字节数据,mark标记仍有效.如果在mark后读取超过readlimit字节数据,mark标记就会失效,调用reset()方法会有异常. 但实际的运行情况却和JAVA文档中的描述并不完全相符. 有时候在BufferedInputStream类中调用mark(int readlimit)方法后,即使读取超过readlimit字节的数据,mark标记仍有效,仍然

Java中static作用及用法详解

1.1概述: static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在.这样做有什么意义呢?在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是用static修饰的成员可以通过类名加".&q

java中list接口的用法

list为继承自collection接口的接口,list里存储的值的类型通过list<object>泛型来声明:存值时调用ArrayList类的add方法,删除时调用用remove方法.list的很多方法与set很相似,但在存储结构上有区别,set的存储特点为无序和互异,相反的,list的存储特点为有序和存异. package test_list; import java.util.ArrayList; import java.util.HashSet; import java.util.It

巨人大哥谈Java中的Synchronized关键字用法

巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就搞定 了,如果说不考虑性能问题的话,这一操绝对能应对百分之九十以上的情况,若对于性能方面有要求的话就需要额外的知识比如读写锁等等.本文目的先了解透彻synchronized的基本原理. Synchronized的基本使用 Synchronized的作用主要有三个: (1)确保线程互斥的访问同步代码 

hadoop 关于java中的public static 变量是不能被改变的?

我在写hadoop的时候,在mapper里定义了一个public static int rownums = 0.但我在main里对这个变量进行了赋值. 结果在循环的过程中,根本没有任何输出,因为我是用这个变量来控制循环的,所以我猜想可能是不能改变这个值,于是我直接在初始定义的时候直接赋上正确的值,所以这样最后程序就正确运行了. 但是我又新建了一个工程写了一个小程序,试了一下,明明是能够改变,正确输出的. 不能理解了. hadoop 关于java中的public static 变量是不能被改变的?