java关键词中static,public,protected有什么区别,能不能顺便讲个实例

谢谢各位了,对static的应用书上的解释还是有些看不懂

static 为静态定义。可以理解为:当你的应用启动时,被static定义的对象,就会加载到内存中。非static的对象只有在执行时才会被初始化使用;并且static的对象在使用完后不会给消除,非static的对象,一般在作用域结束后就会进行相关的回收释放些内存。说个具体的例子吧:例如,定义了一个static的变量 num "public static int num=0",在程序启动时这个num就给加载到内存中了,然后,你有一个A类,对num进行了加1的操作,之后B类又对num进行了加1操作。此时num就是2;如果非static的对象,例如"public int num=0",这个对象被定义在A类,当A对它进行加1操作后,B类再对这个num进行加1操作。两个num分别的得值为都是1。
再来说说public和protected的区别,最简单的理解就是public定义的方法或对象,可以在程序中任意一个包下使用,而protected只有在当前包下可以使用,超过当前包的范围,谁也不可以再使用这个对象。
温馨提示:答案为网友推荐,仅供参考
第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;
}
}
相似回答