天天看点

java方法使用修饰符的总结

一个类中对于非静态方法主要是用来对类中的类变量进行操作的。

而一个类中的静态方法一般是不会对类中的类变量进行操作的,而是完成一些其他的特殊功能。

在类中写方法时,什么情况下用public,什么情况下用private,什么情况要加static来修饰,做一下总结。通过这些总结,可以检查一下自己写的类的方法中用到的修饰符是否合理

首先要弄清楚一点,类中的静态方法只能访问类中的静态类变量(属性)

下面两种方式的说明:

-----------------------------------------------------------------------方式1------------------------------------------------------------------------------

1.Private和static private总结

如果类中的一个方法只是用来被类中的其他方法调用,那么这个方法就最好用private修饰,如果调用它的那个方法使用static修饰的,那么被调用的方法就要用static private来修饰。凡是使用了private就可以保证在其他类中生成这个类的一个对象后将无法访问到这个方法。而且通过类名也无法访问到static private修饰的方法了。

也就是说,类中的方法只要使用private,它就是为了让类中的其他方法放调用的,而不是为了在其它类调用中实例化一个此类的对象后调用的。而在private前面加上了static那只是因为调用它的那个方法也是用static修饰的,所以这个方法也必须用加上static修饰。当然只用private修饰的方法也可以调用static private修饰的方法。这里又出现一点注意的问题,那就是

2.Public和public static

我们知道,一个方法其实就是为了用来操作类中定义的类变量,或者是完成一个功能的。那么

如果类中的方法操作静态类变量的,那么此方法就必须是静态方法,如果类中的方法不是用来操作静态类变量的(非静态类变量也不能在静态方法中操作),而是为了完成一个与类变量无关的功能,难么方法就最好用static修饰。

如果用public来修饰一个方法时,那就说明这个方法只是用来操作类中的非静态类变量的。我们最好保证,此方法的功能与类中的非静态类变量(类中的属性)有关。而不是这个方法实现了一个功能但却从未用到过类中的类变量。因为我们使用一个public方法,就是为了访问或操作一个对象他自己独有的类变量的。那么想象一下如果你这个方法里面从未出现过类变量,我们每次生成一个对象,这个方法都要被         生成一次,浪费了多少资源,那就不如改成前面说的静态方法了,这样这个方法只生成一次。

-----------------------------------------------------------------------方式2------------------------------------------------------------------------------

如果方法A只用来访问或操作类变量(属性)那么就最好保证方法A用public来修饰

如果方法A中从未操作或访问过类变量(属性)去完成了一个功能,那么最好用public static来修饰。

如果方法A只用来被这个类中的其他方法来调用,那么最好用private来修饰。

如果方法A被这个类中的其他static修饰的方法来调用,那么就必须用static private来修饰

用static修饰的方法A,调用方法B,那么方法B一定要用static修饰,至于使用public static还是private static呢?那分两种情况:(1)如果方法B只是为了提供给方法A或者是与方法A同类的其他方法调用,那么就用private static来修饰。(2)如果方法B除了(1)所描述的情况外,还想对外使用(通过类名调用使用),那么就是用public static来修饰。

-----------------------------------------------------------------------例子------------------------------------------------------------------------------

Public class Character{
	private final char value;
         //public static修饰的方法完成的功能中一般不包含类变量
         public static Character valueOf(char c) {
	if(c <= 127) { // must cache
	    return CharacterCache.cache[(int)c];
	}
               return new Character(c);
        }

        //public 修饰的方法用于访问或操作类变量
        public int hashCode() {
              return (int)value;
        }
        
        //public 修饰的方法用于访问或操作类变量
        public boolean equals(Object obj) {
             if (obj instanceof Character) {
                    return value == ((Character)obj).charValue();
             }
           return false;
         }

         //public static修饰的方法完成的功能中一般不包含类变量
         public static String toString(char c) {
                return String.valueOf(c);
         }


     /*static修饰的方法完成的功能中一般不包含类变量,调用此方法的方法用了static修饰,所以此方法也要用static修饰*/
          private static int getPlane(int ch) {
                return (ch >>> 16);
           }
          

          //public static修饰的方法完成的功能中一般不包含类变量
          public static boolean isLowerCase(int codePoint) {
                 int plane = getPlane(codePoint);
          }
}