Red de conocimiento informático - Aprendizaje de programación - ¿Cuáles son las reglas y especificaciones de nomenclatura convencionales en jdk?

¿Cuáles son las reglas y especificaciones de nomenclatura convencionales en jdk?

La versión 2017 del Manual de desarrollo de Java de Alibaba: hay muchos y solo puede copiar una parte. Puede ir a Baidu para obtener información específica 1. ¿Convención de programación?

( 1)? ¿Convención de nomenclatura?

p>

1.?Obligatorio?Los nombres en el código no pueden comenzar con un guión bajo o un signo de dólar, ni pueden terminar con un guión bajo o un signo de dólar. ?

Contraejemplo: ?_name?/?__name?/?$Object?/?name_?/?name$?/?Object$?

2. code Está estrictamente prohibido utilizar una mezcla de pinyin e inglés al nombrar, y no está permitido utilizar chino directamente. ?

Explicación: La ortografía y la gramática correctas en inglés pueden facilitar la comprensión de los lectores y evitar la ambigüedad. Tenga en cuenta que incluso se deben evitar los métodos de denominación puramente pinyin.

?

Ejemplo de contador: ?DaZhePromotion?[Descuento]?/?getPingfenByName()?[Calificación]?/?int?Una determinada variable?=?3?

Ejemplo positivo: ?alibaba ?/?taobao?/?youku?/?hangzhou? y otros nombres comunes internacionalmente pueden considerarse iguales al inglés. ?

3.?Fuerza que el nombre de la clase utilice el estilo ?UpperCamelCase? y debe cumplir con el caso camel, con las siguientes excepciones: (nombramiento relacionado del modelo de dominio

) ¿DO?/?BO?/?DTO?/?VO?etc. ?

Ejemplo positivo: MarcoPolo?/?UserDO?/?XmlService?/?TcpUdpDeal?/?TaPromotion?

Contraejemplo: macroPolo?/?UserDo?/?XMLService?/? TCPUDPDeal?/?TAPromotion?

4. Forzar que los nombres de métodos, nombres de parámetros, variables miembro y variables locales utilicen el estilo lowerCamelCase y deben seguir el formato de mayúsculas y minúsculas.

?

Ejemplo positivo: ?localValue?/?getHttpMessage()?/?inputUserId?

5.? Forzar que los nombres de constantes estén en mayúsculas y separar las palabras con guiones bajos para esfuércese por la expresión semántica Sea completo y claro, no crea que el nombre es demasiado largo. ?

Ejemplo positivo: ?MAX_STOCK_COUNT?

Ejemplo de contador: ?MAX_COUNT?

6. Forzar que los nombres de clases abstractas comiencen con ?Abstract? ; El nombre de la clase de excepción termina con ?Excepción?; el nombre de la clase de prueba

comienza con el nombre de la clase que se va a probar y termina con ?Prueba?. ?

7.? Los corchetes forzados son parte del tipo de matriz. La matriz se define de la siguiente manera: String[]?args;?

Ejemplo de contador: use ?String?args. [] definición. ?

8. Es obligatorio no agregar ?is a las variables de tipo booleano en la clase POJO?, de lo contrario, algún análisis del marco provocará errores de serialización. ?

Contraejemplo: definido como un atributo del tipo de datos básico ?Boolean?isSuccess;, su método también es ?isSuccess(). Cuando el marco RPC realiza un análisis inverso, "piensa" en el nombre del atributo correspondiente. es ?éxito, lo que da como resultado que no se obtenga el atributo y se genere una excepción

. ?

9.?Forzar que los nombres de los paquetes estén uniformemente en minúsculas, con una y sólo una palabra en inglés de semántica natural entre los separadores de puntos. Los nombres de los paquetes siempre deben usar la forma singular

pero si el nombre de la clase tiene un significado plural, el nombre de la clase puede usar la forma plural. ?

Ejemplo positivo: el nombre del paquete de la clase de herramienta de la aplicación es com.alibaba.open.util y el nombre de la clase es MessageUtils (esta regla se refiere a la estructura del marco de

spring) ?

10. Es obligatorio evitar abreviaturas completamente no estándar para evitar malentendidos.

?

Contraejemplo: ?AbstractClass "abreviatura" se denomina ?AbsClass; la condición "abreviatura" se denomina ?condi. Esta abreviatura arbitraria reduce seriamente la legibilidad del código. ?

11.? Se recomienda que si se utiliza un patrón de diseño, se recomienda que el patrón específico se refleje en el nombre de la clase. ?

Explicación: Reflejar el patrón de diseño en el nombre ayudará a los lectores a comprender rápidamente las ideas de diseño arquitectónico. ?

Ejemplo positivo: public?class?OrderFactory;?

public?class?LoginProxy;?

public?class?ResourceObserver;?

12. Se recomienda que los métodos y propiedades en la clase de interfaz no agreguen ningún modificador (tampoco agreguen público), mantengan el código conciso

y agreguen comentarios Javadoc válidos. Intente no definir variables en la interfaz. Si debe definir variables, deben estar relacionadas con los métodos de la interfaz y son constantes básicas para toda la aplicación. ?

Ejemplo positivo: firma del método de interfaz: void?f();?

Representación constante básica de la interfaz: String?COMPANY?=?"alibaba";?

Contraejemplo: Definición del método de interfaz: public abstract void f();

Explicación: Las interfaces en JDK8 permiten implementaciones predeterminadas, por lo que este método predeterminado es aplicable a todas las clases de implementación Valuable default

implementación. ?

13. Hay dos conjuntos de reglas para nombrar interfaces y clases de implementación: 1) Es obligatorio para las clases de Servicio y DAO, según el concepto de SOA, que los servicios expuestos deben ser interfaces. La clase de implementación interna de

se distingue de la interfaz por el sufijo ?Impl?. ?

Ejemplo positivo: CacheServiceImpl implementa la interfaz CacheService. ? 2) Se recomienda que si se trata de un nombre de interfaz que describe capacidades, se utilice el adjetivo correspondiente como nombre de la interfaz (normalmente en forma de -able). ?

Ejemplo positivo: AbstractTranslator implementa Translatable. ?

14.? Se recomienda agregar el sufijo ?Enum? al nombre de la clase de enumeración de referencia. Los nombres de los miembros de la enumeración deben estar en letras mayúsculas y las palabras deben estar separadas por guiones bajos. ?

Explicación: La enumeración es en realidad una clase constante especial y el constructor está obligado a ser privado de forma predeterminada. ?

Ejemplo positivo: nombre de enumeración: DealStatusEnum, nombre de miembro: SUCCESS?/?UNKOWN_REASON. ?

15.?Consulte la convención de nomenclatura de cada capa:?

¿A)?Servicio/DAO?¿Convención de nomenclatura del método de capa?

1)? Obtener un único objeto Los métodos tienen el prefijo ?get?. ?

2) El método para obtener múltiples objetos tiene el prefijo ?lista?. ?

3) El método de obtención de valores estadísticos tiene el prefijo ?count?. ?

4) El método de inserción tiene el prefijo ?guardar (recomendado) o ?insertar?. ?

5) El método de eliminación tiene el prefijo ?remove (recomendado) o ?delete?. ?

6) El método de modificación tiene el prefijo ?actualizar?. ?

B)?¿Convención de nomenclatura del modelo de dominio?

1)?Objeto de datos: xxxDO, xxx es el nombre de la tabla de datos. ?

2) Objeto de transferencia de datos: xxxDTO, xxx es el nombre relacionado con el campo comercial. ?

3) Objeto de visualización: xxxVO, xxx es generalmente el nombre de la página web. ?

4) ?POJO? es el nombre colectivo de ?DO/DTO/BO/VO?, y está prohibido nombrarlo como ?xxxPOJO. ?

(2) ¿Definición de constante?

1. Es obligatorio no permitir que ningún valor mágico (es decir, constantes indefinidas) aparezca directamente en el código.

?Ejemplo de contador:?String?key?=?"Id#taobao_"+tradeId;?

cache.put(key,?value);?

2.?Forzar largo ? O al inicializar el valor de ?Long?, debe utilizar la ?L mayúscula en lugar de la ?l minúscula. Es fácil confundirla con el número

1?, lo que provoca malentendidos. ?

Explicación: ¿Long?a?=?2l;?¿Se escribe como numérico?21, o como?Long?type?2?

3. use uno La clase constante mantiene todas las constantes, que deben clasificarse según funciones constantes y mantenerse por separado. Por ejemplo: cache

Las constantes relacionadas se colocan en la clase: CacheConsts?; las constantes relacionadas con la configuración del sistema se colocan en la clase: ConfigConsts?. ?

Nota: Para una clase constante grande y completa, debe utilizar la función de búsqueda para localizar la constante modificada, lo que no favorece la comprensión ni el mantenimiento. ?

4.? Se recomienda que haya cinco niveles de reutilización de constantes: constantes compartidas entre aplicaciones, constantes compartidas dentro de aplicaciones, constantes compartidas dentro de subproyectos y paquetes

Intra- Constantes compartidas de clase, constantes compartidas dentro de la clase. 1) Constantes compartidas entre aplicaciones: colocadas en una biblioteca de terceros, generalmente en el directorio de constantes en client.jar. ? 2) Constantes compartidas dentro de la aplicación: colocadas en el directorio de constantes en los módulos de la biblioteca. ? Contraejemplo: las variables fáciles de entender también deben definirse de manera uniforme como constantes compartidas dentro de la aplicación. Dos maestros de asedio definieron variables que representan "Sí" en dos clases:?

¿En la clase?A?: ¿pública? static?final?String?YES?=?"yes";?

¿En clase?B?: public?static?final?String?YES? =?"y";?

A.YES.equals(B.YES), el valor esperado es verdadero, pero el valor de retorno real es falso, lo que provoca problemas en línea. ? 3) Constantes compartidas dentro del subproyecto: es decir, en el directorio de constantes del subproyecto actual. ? 4) Constantes compartidas dentro del paquete: es decir, en un directorio de constantes separado en el paquete actual. 5) Constantes compartidas dentro de la clase: definidas directamente dentro de la clase como final estática privada. ?

5. Se recomienda utilizar la clase Enum si el valor de la variable solo cambia dentro de un rango. Si hay atributos extendidos además del nombre, debe

usar la clase ?Enum? Los números en el siguiente ejemplo son información extendida, que indica el día de la semana. ?

Ejemplo positivo: public?Enum?{?MONDAY(1),?TUESDAY(2),?MIERCOLES(3),?JUEVES(4),?VIERNES(5),?SABADO(6) ),?

DOMINGO(7);}?

(3) ¿Especificaciones de formato?

1. Convención de uso de llaves obligatoria. Si las llaves están vacías, simplemente escriba {} sin saltos de línea; si

es un bloque de código no vacío: 1) No hay ningún salto de línea antes de la llave izquierda. ? 2) ?Nueva línea después del corchete izquierdo. ?3)?Nueva línea antes de la llave derecha. 4) Si hay más ? ?

2.?Obligatorio? No habrá espacio entre el corchete izquierdo y el carácter siguiente de igual forma, no habrá espacio entre el corchete derecho y el carácter anterior

. Para obtener más información, consulte los consejos de ejemplo correctos debajo del Artículo 5. ?

3. Es obligatorio agregar espacios entre las palabras reservadas como if/for/ while/switch/do? y los corchetes izquierdo y derecho. ?

4.? Obligar a cualquier operador a tener un espacio a su alrededor. ?

Explicación: Los operadores incluyen operador de asignación =, operador lógico &&, signos de suma, resta, multiplicación y división, operadores ternarios, etc. ?

5. Forzar la sangría a 4 espacios y los caracteres de tabulación están prohibidos.

?

Nota: Si se utilizan tabulaciones para la sangría, 1 tabulación debe establecerse en 4 espacios. Cuando IDEA establece la tabulación en 4 espacios,

No marque Usar carácter de tabulación en eclipse, se debe marcar insertar espacios para las tabulaciones. ?

Ejemplo positivo: (¿involucra ?1-5? puntos)?

public?static?void?main(String[]?args)?{?

//?¿Sangría? 4? espacios?

Cadena?say?=?"hola";?

//?Debe haber un espacio a la izquierda y a la derecha de el operador ?

int?flag?=?0;?

//?Debe haber un espacio entre la palabra clave ?if? ¿Los corchetes y el corchete izquierdo, 0? y el corchete derecho no requieren espacios?

if?(flag?==?0)?{?

System.out.println (say);?

}?

//?¿Agregar un espacio antes del corchete izquierdo sin una nueva línea; una nueva línea después del corchete izquierdo?

if?(flag?==?1)? {?

System.out.println("world");?

//?Nueva línea antes de la llave derecha, y ?Si no, después de la llave correcta, ¿no se requiere una nueva línea?

Manual de desarrollo de Java de Alibaba

——El uso comercial está prohibido y los infractores serán procesados——?6?/?37? /p>

}? else?{

System.out.println("ok");?

//?Si termina directamente después de la llave de cierre, ¿debe estar ajustado?

}?

}?

6. Es obligatorio que el número de caracteres en una sola línea no supere los 120 caracteres. Si excede el límite, se requieren saltos de línea. Al ajustar las líneas, siga los siguientes principios: 1) Las segundas líneas deben tener una sangría de 4 espacios con respecto a la primera línea, no habrá más sangría. ejemplo. ? 2) El operador ? se incluye junto con lo siguiente. ? 3) El símbolo de punto de la llamada al método se incluye junto con lo siguiente. ? 4) Cuando varios parámetros son demasiado largos, ajuste después de la coma. ? 5) ?No rompa las líneas antes del paréntesis, consulte el contraejemplo. ?

Ejemplo positivo:?

StringBuffer?sb?=?new?StringBuffer();?

//Cuando supera los ?120? ¿El salto de línea tiene una sangría de 4 espacios y el símbolo de punto antes del método está unido?

sb.append("zi").append("xin")...

.append("huang")...?

.append("huang")...?

.append("huang");?

Contraejemplo:?

StringBuffer?sb?=?new?StringBuffer();?

//Cuando supere los ?120 caracteres, no ajuste antes de los corchetes?

sb.append("zi").append("xin")...append?

("huang");

// A La llamada al método con muchos parámetros puede exceder los 120 caracteres. No ajuste la línea antes de la coma método(args1,?args2,?args3,?...?

,?argsX);?

7. Al definir y pasar parámetros de método obligatorios, se deben agregar espacios después de las comas de múltiples parámetros. ?

Ejemplo positivo: "a" en el parámetro real en el siguiente ejemplo debe ir seguido de un espacio.

?

method("a","b","c");?

8. Fuerce la codificación del archivo de texto del IDE a UTF-8. formato para saltos de línea en archivos en el IDE.

No utilice el formato de Windows. ?

9.? Se recomienda que no sea necesario agregar una cantidad de espacios para alinear los caracteres de una línea con los caracteres correspondientes de la línea anterior. ?

Ejemplo positivo:?

int?a?=?3;?

long?b?=?4L;?

float?c?=?5F;?

StringBuffer?sb?=?new?StringBuffer();?

Explicación: Agregue la variable ?sb? Luego hay que añadir algunos espacios a ?a, b, c?, lo cual es algo engorroso cuando hay muchas variables

. ?

¿Manual de desarrollo de Java de Alibaba?

——El uso comercial está prohibido y los infractores serán procesados——?7?/?37? Se recomienda insertar una línea en blanco entre el grupo de declaraciones de ejecución, el grupo de declaraciones de definición de variables, una lógica de negocios diferente o una semántica diferente

en el cuerpo del método. No es necesario insertar líneas en blanco entre la misma lógica y semántica empresarial. ?

Nota: No es necesario insertar varias líneas de espacios para separarlas. ?

(4)?OOP?Convención?

1. Obligado a evitar el acceso a tales variables estáticas o métodos estáticos a través de referencias de objetos de una clase, lo que aumentará innecesariamente la resolución del compilador

Se puede acceder a esto directamente usando el nombre de la clase. ?

2.? Forzar que todos los métodos de anulación se anoten con @Override?. ?

Contraejemplo: problema con getObject() y ?get0object(). Uno es la letra ?O y el otro es el número ?0. Agregue @Override

para determinar con precisión si la anulación se realizó correctamente. Además, si la firma del método se modifica en una clase abstracta, su clase de implementación se compilará inmediatamente e informará un error. ?

3. Es obligatorio utilizar el mismo tipo de parámetro y el mismo significado comercial antes de utilizar parámetros variables de Java y evitar el uso de Objeto. ?

Nota: Los parámetros variables deben colocarse al final de la lista de parámetros. (Se anima a los estudiantes a evitar la programación de parámetros variables tanto como sea posible).

Ejemplo positivo: ¿public?User?getUsers(String?type,?Integer...?ids)?

4. ?Fuerza la interfaz que se llama externamente o de la que depende la biblioteca de terceros, y no se permite modificar la firma del método para evitar cualquier impacto en la persona que llama a la interfaz.

Si la interfaz está obsoleta, se debe agregar la anotación @Deprecated? y se debe indicar claramente la nueva interfaz o el nuevo servicio. ?

5.? Obligar a que no se utilicen clases o métodos obsoletos. ?

Nota: El método ?decode(String?encodeStr)? en java.net.URLDecoder? Este método está obsoleto y debería

usar el parámetro doble ?decode(String?source). ,?Cadena?codificar). Dado que el proveedor de la interfaz es claramente una interfaz obsoleta,

está obligado a proporcionar una nueva interfaz al mismo tiempo; como llamador, está obligado a verificar la nueva implementación del método obsoleto. ?

6. El método ?equals? de Objeto forzado es propenso a generar una excepción de puntero nulo. Debe utilizar una constante o un objeto con un valor determinado para llamar

equals. . ?

Ejemplo positivo: ?"test".equals(object);?

Contraejemplo: ?object.equals("test");?

Explicación : Se recomienda utilizar java.util.Objects#equals (clase de herramienta introducida por JDK7)

7. Forzar todas las comparaciones de valores entre objetos de clase contenedora del mismo tipo para utilizar iguales. Comparación de métodos .

?

Explicación: Para la asignación de ?Integer?var?=?entre -128? y ?127?, el objeto Integer? se genera en

IntegerCache.cache?,? Los objetos existentes se reutilizarán. Los valores enteros dentro de este rango se pueden juzgar directamente usando ==. Sin embargo, todos los datos fuera de este rango se generarán en el montón y los objetos existentes no se reutilizarán, lo cual es un gran problema. /p>

Se recomienda utilizar el método de igualdad para juzgar.

8. Los estándares de uso para tipos de datos básicos y tipos de datos empaquetados son los siguientes: 1) Es obligatorio que todos los atributos de clase POJO utilicen tipos de datos empaquetados. ? 2) Forzar el valor de retorno y los parámetros del método RPC para que utilicen tipos de datos ajustados. ? 3) Se recomienda que todas las variables locales utilicen tipos de datos básicos. ? Nota: El atributo de clase POJO? no tiene un valor inicial para recordar a los usuarios que deben asignar explícitamente el valor ellos mismos cuando necesiten usarlo. ¿NPE? usuario. Ejemplo positivo: el resultado de la consulta de la base de datos puede ser nulo porque el desempaquetado y la recepción automáticos con tipos de datos básicos tienen el riesgo de NPE. Ejemplo de contador: por ejemplo, muestra el aumento y la caída del monto total de la transacción, es decir, más o menos x%, x es el tipo de datos básico y se llama al servicio RPC. Cuando la llamada no tiene éxito, el valor predeterminado es. devuelto La página muestra: 0%, lo cual no es razonable y debe mostrarse como un guión -. Por lo tanto, el valor ?null? del tipo de datos empaquetado

puede representar información adicional, como por ejemplo: error de llamada remota y salida anormal. ?

9. Al definir por la fuerza DO/DTO/VO y otras clases POJO, no establezca ningún valor predeterminado de atributo. ?

Ejemplo de contador: el valor predeterminado de ?gmtCreate? de la clase POJO? es ?new?Date() pero este atributo no se establece en un valor específico durante la extracción de datos.

In Cuando se actualizan otros campos, este campo también se actualiza, lo que hace que la hora de creación se modifique a la hora actual. ?

10.?Cuando fuerce a la clase de serialización a agregar atributos, no modifique el campo ?serialVersionUID? para evitar fallas de deserialización si

es completamente incompatible con las actualizaciones; deserialización Para evitar confusiones, modifique el valor serialVersionUID. ?

Nota: Tenga en cuenta que la inconsistencia serialVersionUID generará una excepción en tiempo de ejecución de serialización. ?

11. Está prohibido agregar cualquier lógica de negocios en el método de construcción obligatorio. Si hay lógica de inicialización, colóquela en el método de inicio. ?

12. Forzar a la clase POJO a escribir el método toString. Cuando utilice la herramienta IDE: source>generatetoString

, si hereda otra clase POJO, agregue super.toString al frente. ?

Nota: Cuando se produce una excepción durante la ejecución del método, puede llamar directamente al método ?toString() de ?POJO para imprimir el valor de su atributo, lo cual es conveniente para solucionar problemas.

. ?

13.? Se recomienda utilizar el índice para acceder a la matriz obtenida mediante el método ?split? de ?String?, y es necesario verificar si hay

contenido. después del último delimitador; de lo contrario, existe el riesgo de generar IndexOutOfBoundsException. ?

Explicación:?

Cadena?str?=?"a,b,c",";?

Cadena[]?ary?=? str.split(",");?

//La expectativa es mayor que?3, ¿el resultado es?3?

System.out.println(ary.length) ;?

p>

14. Se recomienda que cuando una clase tenga múltiples constructores o múltiples métodos con el mismo nombre, estos métodos se coloquen juntos para facilitar la lectura.

?

15. El orden recomendado para la definición de métodos dentro de una clase es: ¿método público o método protegido?>?Método privado?>?Getter/setter

método. ?

Explicación: Los métodos públicos son los métodos que más preocupan a los llamadores y mantenedores de la clase, y se muestran mejor en la primera pantalla, aunque los métodos protegidos sólo interesan a las subclases

<; p>, también pueden ser "El método central en "Patrón de diseño de plantilla"; aunque los métodos privados generalmente no requieren cuidados especiales en el exterior, son una implementación de caja negra; porque el valor de la información del método es bajo, todos los captadores "Servicio" y "DAO" El método /setter se coloca al final del cuerpo de la clase

. ?

16. Se recomienda que en el método de establecimiento, el nombre del parámetro sea coherente con el nombre de la variable del miembro de la clase, esto. En el método

getter/setter?, intente no agregar lógica empresarial y aumentar la dificultad de resolución de problemas. ?

Contraejemplo:?

¿público?Integer?getData()?{?

si?(verdadero)?{?

¿retorno?datos?+?100;?

}?else?{?

retorno?datos?-?100;?

}?

}

17. Se recomienda utilizar el método de adición de StringBuilder para expandir el método de conexión de cadena en el cuerpo del bucle. ?

Contraejemplo:?

Cadena?str?=?"start";?

for?(int?I?=?0;?I?

str?=?str?+?"hello";?

}?

Descripción: Descompilar el El archivo de código de bytes de salida muestra que cada bucle "nuevo" un objeto "StringBuilder", luego realiza la operación "append" y finalmente devuelve el objeto "String" a través del método "toString", lo que da como resultado un? Desperdicio de recursos de memoria. ?

18. Se recomienda que en las siguientes situaciones, declararlo final sea más informativo: 1) Variables que no necesitan ser reasignadas, incluidos atributos de clase y variables locales. ? 2) Agregar ?final antes del parámetro del objeto significa que no se permite modificar el punto de referencia. ? 3) Los métodos de clase no deben anularse. ?

19. Se recomienda utilizar el método de clonación de Objeto con precaución para copiar objetos. ?

Nota: El método de clonación de un objeto tiene como valor predeterminado una copia superficial. Si desea implementar una copia profunda, debe anular el método de clonación para copiar el objeto de atributo.

. ?

20. Se recomienda un control de acceso estricto a los miembros y métodos de la clase: 1) Si no se permite la creación de objetos externos directamente a través de new, el constructor debe ser privado. 2) No se permite que las clases de herramientas tengan constructores públicos o predeterminados. ? 3) Las variables miembro no estáticas de la clase se comparten con las subclases y deben protegerse. ? 4) Las variables miembro no estáticas de la clase solo se usan en esta clase y deben ser privadas. ? 5) Si una variable miembro estática de una clase solo se usa en esta clase, debe ser privada. 6) Si es una variable miembro estática, debe considerar si es definitiva. ? 7) Los métodos de los miembros de la clase son solo para llamadas internas dentro de la clase y deben ser privados. 8) Los métodos de los miembros de la clase sólo son públicos para las clases heredadas, por lo que el límite está protegido. ?

Nota: Controle estrictamente el alcance de acceso de cualquier clase, método, parámetro o variable. Un alcance de acceso demasiado amplio no favorece el desacoplamiento de módulos.

Pensamientos

Pensamiento: si es un método privado, puede eliminarlo si desea eliminarlo, pero si es un método de servicio público o un miembro público

Variable, bórralo, ¿no te sudan un poco las palmas? Las variables son como sus propios hijos. Trate de mantenerlas a la vista. El alcance de las variables es demasiado grande, si corren sin restricciones, se preocupará.