Primero que nada java es un lengiuaje orientado a objetos asi que tu parte de decir porque no String.subStrin, es porque String define que la variable es de ese tipo de dato, String, int, double, float son tipos de datos, pero hay clases que te permiten mas cosas como Integer, Double, busca informacion en las api de java sobre esto.
por otro lado static, public, private influyen en la visibilidad del metodo o variable, es decir quien puede acceder a estos metodos o variables mira la siguiente url que ahi explican eso.
http://docs.oracle.com/javase/tutori...sscontrol.html
recuerda que java distingue mayusculas de minusculas