2010-01-09 21 views
5

en php puede declarar una función en un alcance global con función.¿no hay una "función" normal en java?

¿no es esto posible en java? parece que cada función está en una clase como método. Entonces, ¿todo es OOP en Java? sin código de procedimiento?

+5

hacerle una pregunta, en promedio, una vez cada hora. Creo que sería aconsejable invertir en algunos libros, o la capacidad de google ... – Pod

Respuesta

18

Lo más parecido que puede tener a una función de "libre flotación" es una función estática, a la que puede llamar como calificado con el nombre de clase, p.

public class Foo { 
    public static void bar(){} 
} 

... en otro lugar

Foo.bar(); 

Se puede añadir un poco de azúcar sintáctico a este para que se vea como lo que usted está pensando:

import static Foo.bar; 

... en el resto

bar(); 
+0

También puede importar la función por sí mismo: 'import packagename.Foo.bar static', pero si lo hace demasiado esto puede ser confuso – MatrixFrog

+0

ahh, eso es lo que quise decir, gracias. –

3

Yep. Pero puede definir métodos estáticos, que en última instancia pueden actuar como métodos contenidos dentro de una clase pero se invocan sin instanciar una instancia de la clase. Es decir, si define un método bar como static en la clase Foo, puede invocarse como Foo.bar().

1

Sí, eso es correcto. Java es estrictamente OOP.

3

Así es, no hay código de procedimiento, todo es un objeto definido por una clase (excepto los pocos tipos de datos primitivos). Puede, sin embargo, utilizar los métodos estáticos:

public class MyClass { 
    public static void callMe() { 
     System.out.println("HEY"); 
    } 
} 

public class MyOtherClass { 
    public void someMethod() { 
     MyClass.callMe(); 
    } 
} 

El lenguaje basado en JVM Scala sí permite crear higher-order functions, que se puede pasar alrededor como valores.

+0

Genial, Scala gen es la mejor opción para ti. Realmente necesito sentarme y * leer * mi sangriento libro de Scala para ver cuánto del cierre, "currying" y otras cosas funcionales. Rollo. – Roboprog

+0

Obtuve el libro y lo leí, y es bastante poderoso idioma. Sin embargo, encontré que las docenas de operadores de acceso directo que representan estas nuevas características son un poco confusas y difíciles de recordar. Ruby parece ser más fácil para empezar (demasiado malo es dinámico y 50 veces más lento que Java, jajaja). –

+0

Sigo oyendo que Java es grande -N veces más rápido que Ruby. Eso podría ser cierto para x + = y tipos de cosas matemáticas-y/primitivas, pero NO es lo que medí para algunos jiggering de cuerdas básicas: http://roboprogs.com/devel/2009.12.html (por supuesto, estos " benchmark "solo usa algunos métodos estáticos, las únicas instancias que afectan al GC de ambos lenguajes son cadenas integradas" – Roboprog

3

Oh sí, OO indeed. Sin embargo, puede codificar cosas pseudoprocesales dentro de un método estático.

3

Puede hacer un método estático de una llamada sin crear un objeto

public class MyClass{ 
    public static void m(){ 
     ... 
    } 
} 


MyClass.m(); 
3

Ampliando lo que todo el mundo está diciendo, si usted tiene una gran cantidad de tales funciones, es común agruparlos en clases que están llenos de nada más que métodos estáticos, a menudo llamados "clases de utilidad". El primer ejemplo que me viene a la mente es java.lang.Math pero hay muchos otros. Cualquier clase con "Util" en su nombre es probable que siga este patrón.

-1

No jive bien bien OOP. Aún puede haber definido un método público estático y llamarlo desde cualquier lugar como lo han mencionado otros.

0

En Java World, todas las funciones se deben declarar dentro de una clase, no importa qué. Bienvenido a OO world =)

0

Sí, puede hacer funciones estáticas, er, métodos, pero luego tiene que codificar las llamadas a ellas. Para seleccionar una devolución de llamada en tiempo de ejecución, debe crear una interfaz (no un puntero de función, tipo de procedimiento o delegado) y luego crear una clase falsa (aunque quizás sea anónima) para "implementarla". Disfruta el make-work!

O bien, disfrutar de la satirazation humorística: http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html

Cuestiones relacionadas