Главная » Java, Web » Статические функции и статические переменные java

0

Каждая функция в языке Java должна быть определена внутри какого-либо класса. Функции, которые являются членами класса, называются методами. Все функции в Java являются методами. Иногда термин "функция" распространяется на статические функции, все нестатические функции при этом называются методами. В этой части мы будем иметь дело со статическими функциями.

Определение (или описание) функции в языке Java выглядит следующим образом:

модификаторы возвращаемое_значение имя_функции (список_параметров) { инструкции

Инструкции, размещенные между скобками { и }, составляют тело функции. Эти инструкции выполняются тогда, когда происходит обращение к функции (методу), в которой они содержатся. Функции могут содержать практически все типы инструкций. Начало описания функции содержит слова, которые задают некоторые характеристики функции, например, является ли она статической. Для этого используются модификаторы static и public.

Пример 1

public void changeChannel(int channelNum) {…} Пример 2

public static void playGameO {

// "public" и "static" — модификаторы // void — возвращаемый тип; // "playGame" — имя функции // список параметров пуст // выражения (инструкции)

Пример 3

int getNextN(int N) { // модификаторов нет // int — возвращаемый тип // "getNextN" — имя функции // один параметр "N" // тип параметра "int" // инструкции

! Пример 4                                                                                                                                                 !

static boolean lessThan(double x, double y) { // "static" — модификатор // "boolean" — возвращаемый тип // "lessThan" — имя функции

// список параметров состоит из двух параметров "х" и "у" // тип и того и другого параметра "double" инструкции

Каждая самостоятельная выполняемая программа должна содержать в себе функцию main о . Эта функция, как правило, определяется так:

public static void main(String[] args) { …. }

Здесь аргументами функции (ее параметрами) служит массив строк string [] args. Фактически значения аргументов могут быть введены в момент запуска программы в командной строке.

Вызов функции из программы производится при помощи инструкции, которая состоит из имени подпрограммы (с указанием фактических параметров). Например, для функции, описанной выше, это может быть такая инструкция:

playGame ();

Поскольку метод playGame () описан как public, он доступен и из других классов, а не только из того класса, в котором он описан. Однако при обращении к этому методу из других классов необходимо указать имя класса, в котором описан этот метод. Если, например, этот метод описан в классе Poker, то вызов метода из класса, отличающегося от класса Poker, производится при помощи инструкции Poker.playGame();

Метод с именем playGame о, определенный в классе Poker, может быть не единственным методом с таким именем. Функции с такими же именами

могут быть расположены в других классах. При этом одноименные функции из разных классов могут не иметь ничего общего друг с другом, например

Roulette.playGame() И Blackjack.playGame().

В общем виде инструкция, содержащая вызов функции, выглядит следующим образом:

Имя-функции(параметры);

имя класса.имя-Функции(параметры);

Пример описания функции

static void playGame() {

int computersNumber; // случайное число, выбираемое компьютером int usersGuess;  // число по выбору пользователя

int guessCount;          // число попыток

computersNumber = (int)(100 * Math.random()) + 1; // присвоение случайного числа в промежутке от 1 до 100 guessCount = 0; Text IO. put In () ;

TextlO.put("kakova pervaya popytka? "); while (true) {

usersGuess = TextlO.getlnt(); // получили пользовательский ввод guessCount++;

if (usersGuess == computersNumber) {

TextlO.putln("You got it in " + guessCount

+ " guesses! My number was " + computersNumber); break; // игра закончена, пользователь победил

}

if (guessCount == 6) {

TextlO.putln("Vy ne ugadali za 6 popytok."); TextlO.putln("Vy projgrali. Bylo chislo " + computersNumber); break; // Игра закончена, пользователь проиграл

}

// Игра продолжается if (usersGuess < computersNumber)

TextlO.put("slishkom malo. Esche popytka: "); else if (usersGuess > computersNumber)

TextlO.put("slishkom veliko. Esche popytka: ");

Text 10. put In () ;

Чтобы программа была полной, необходимо создать функцию main(). Это несложно.

Фукнция main() (программа целиком)

public class GuessingGame {

public static void main(String[] args) {

TextlO.putln("Budem igrat. Ya vyberu chislo mezhdu"); TextlO.putln("1 и 100, a vy ugadajte ego."); boolean playAgain; do {

playGame(); // вызов функции TextlO.put("Sygraem esche raz? "); playAgain = TextlO.getlnBoolean(); } while (playAgain);

TextIO.putIn("Spasibo za igru. Do svidaniya.");

}

static void playGame() {

int computersNumber; // случайное число, выбираемое компьютером int usersGuess;  // число по выбору пользователя

int guessCount;               // число попыток

computersNumber = (int)(100 * Math.random()) + 1;

// присвоение случайного числа в промежутке от 1 до 100 guessCount = 0; Text IO. put In () ;

TextlO.put("kakova pervaya popytka? "); while (true) {

usersGuess = TextlO.getlnt(); // получили пользовательский ввод guessCount++; if (usersGuess == computersNumber) {

TextlO.putln("You got it in " + guessCount

+ " guesses! My number was " + computersNumber); break; // игра закончена, пользователь победил

if (guessCount == 6) {

TextlO.putln("Vy ne ugadali za 6 popytok.");

Text10.putIn("Vy projgrali. Bylo chislo " + computersNumber); break; // Игра окончена, пользователь проиграл

// Игра продолжается

if (usersGuess < computersNumber)

TextlO.put("slishkom malo. Esche popytka: "); else if (usersGuess > computersNumber)

TextlO.put("slishkom veliko. Esche popytka: ");

}

Text 10. put In () ;

}

В рассмотренном примере функция не возвращает никакого значения, так как она имеет возвращаемый тип — void. Также функция может принимать значение. Тип этого значения указывается похожим образом: так, как это делается с объявлением типа переменных.

Следующий пример во многом походит на предыдущий, все отличия выделены полужирным шрифтом.

Пример 2

public class GuessingGame2 {

static int gamesWon; // количество выигранных пользователем игр

public static void main(String[] args) { gamesWon =0; // это необязательно

//О — начальное значение.

TextlO.putln("Budem igrat. Ya vyberu chislo mezhdu"); TextlO.putln("1 и 100, a vy ugadajte ego."); boolean playAgain; do {

playGame(); // вызов функции TextlO.put("Sygraem esche raz? "); playAgain = TextlO.getlnBoolean(); } while (playAgain); TextlO. putln () ;

TextlO.putln("Vy vyigrali " + gamesWon + " igr.");

Text10.putIn("Spasibo za igru. Do svidaniya.");

}

static void piayGameO {

int computersNumber; // случайное число, выбираемое компьютером

int usersGuess;            // число по выбору пользователя

int guessCount;            // число попыток

computersNumber = (int)(100 * Math.random()) + 1;

// присвоение случайного числа в промежутке от 1 до 100

guessCount = 0;

TextlO.putIn();

TextlO.put("kakova pervaya popytka? "); while (true) {

usersGuess = TextIO.getInt(); // получили пользовательский ввод guessCount++;

if (usersGuess == computersNumber) { TextlO.putln("Ugadali " + guessCount +

" ! moe chislo " + computersNumber); gamesWon++; // Учитываем выигрыш, увеличиваем gamesWon.

break; // игра закончена, пользователь победил

}

if (guessCount == 6) {

TextIO.putIn("Vy ne ugadali za 6 popytok.");

TextIO.putIn("Vy projgrali. Bylo chislo " + computersNumber); break; // игра закончена, пользователь проиграл

}

// Игра продолжается if (usersGuess < computersNumber)

TextlO.put("slishkom malo. Esche popytka: "); else if (usersGuess > computersNumber)

TextlO.put("slishkom veliko. Esche popytka: ");

}

Text IO. put In () ;

Функция может возвращать значение. Для этого используется инструкция

return.

static double pythagorus(double x, double y) { // Вычисление длины гипотенузы return Math.sqrt(x*x + y*y);

}

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии