第1个回答 2015-02-04
首先static和public,protected定义是不冲突的,你可以是static public,但是public和protected是冲突的。
根据JAVA的定义的话,public,protected,private被访问的范围是不一样的:
1. public可以被class,package,subclass和world来访问。
2. protected可以被class,package,subclass访问,但是不可以被world访问。
3. no modifier的话,可以被class,package访问,不能被subclass和world访问
4. private 的话,只能是被class来访问,其他都不可以访问他。
static跟被访问的范围没有关系,用它定义就表明这个东西虽然是在一个class内部定义的,但是你不需要实例化一个class就可以访问了,访问的方式是ClassName.fieldName or ClassName.methodName。下面是一个例子,你可以发现,display不需要实例化Difference就可以用了。
class Difference {
public static void main(String[] args) {
display(); //calling without object
Difference t = new Difference();
t.show(); //calling using object
}
static void display() {
System.out.println("Programming is amazing.");
}
void show(){
System.out.println("Java is awesome.");
}
}
第2个回答 2015-02-04
static是静态的意思,static修饰的属性和static{}块,都属于静态域,这些属性和静态快不是用构造器去加载的,而是在类加载器加载这个类文件的时候,就已经初始化好了,也就是说,static修饰的元素,包括属性和方法块,他们的生命周期会很长,伴随着类的加载和销毁。
public在英语里面是公共的意思,用public修饰的元素,包括类,方法,和类成员变量,这些值会被开放访问,别的类在运行中可以通过全限定名(编译过后是全限定名)找到。一般需要被调用的方法会用public,也是java中使用最多的访问权限关键词。
protected是受保护的意思,用protected修饰的元素(范围同上),这些值只会在被继承的子类中访问到,别的类不能够访问。
第3个回答 2015-02-04
static 和后面两个是不同类的,别混一块儿。
static有三个用法
1,用于变量或者常量修饰,对于类的不同个体实例来说,这个量只有一份,就是static。
举个例子:比如String类,里面有一段 private static final char[] ASCII;显然这个ASCII数组保存了
ascii码,对于任何一个String对象来说,ascii码都是固定不变的,所以用static。
2,用于方法修饰,该方法不需要对象就可以调用。比如,String.format(String format, Object...args);对于所有的String对象来说,格式化串的方法都是一样的,完全没区别,所以就不需要具体的String对象来调用这个方法了。
3,用于静态初始化:这个初始过程先于任何一个对象的构造之前就已完成。
举个例子:
private static final char[] ASCII;
//下面初始化这个数组的内容。
static {
ASCII = new char[128];
for (int i = 0; i < ASCII.length; ++i) {
ASCII[i] = (char) i;
}
}