В предыдущих главах мы часто использовали System.out.println(), так что же это такое?
println() — это метод (Метод), System — системный класс (Class), а out — стандартный объект вывода (Object). Это предложение используется для вызова метода println() в объекте стандартного вывода системного класса System.
Метод Java — это набор операторов, которые вместе выполняют функцию.
Метод — это упорядоченная комбинация шагов для решения определенного типа проблемы.
Методы, содержащиеся в классах или объектах
Методы создаются в программе и на них ссылаются в другом месте.
Обычно определение метода включает следующий синтаксис:
Имя метода типа возвращаемого значения модификатора (имя параметра типа параметра) {
...
Тело метода...
возвращаемое возвращаемое значение;
}
Метод содержит заголовок метода и тело метода. Вот все части метода:
Модификаторы: Модификаторы, которые являются необязательными, сообщают компилятору, как вызывать метод. Определяет тип доступа для этого метода.
Тип возвращаемого значения: методы могут возвращать значения. returnValueType — тип данных возвращаемого значения метода. Некоторые методы выполняют необходимую операцию, но не возвращают значение. В данном случае returnValueType — это ключевое слово void .
Имя метода: фактическое имя метода. Имя метода и список параметров вместе образуют сигнатуру метода.
Тип параметра: параметр похож на заполнитель. При вызове метода в параметры передаются значения. Это значение называется фактическим параметром или переменной. Список параметров относится к типу параметра, порядку и количеству параметров метода. Параметры являются необязательными, а методы не могут содержать параметров.
Тело метода. Тело метода содержит конкретные инструкции, определяющие функцию метода.
нравиться:
publicstaticintage(intbirthday){...}
Параметров может быть несколько:
staticfloatinterest(floatprincipal,intyear){...}
Примечание. В некоторых других языках методы относятся к процедурам и функциям. Метод, возвращающий непустое возвращаемое значение, называется функцией; метод, возвращающий непустое возвращаемое значение, называется процедурой.
Метод ниже содержит два параметра num1 и num2 и возвращает максимальное значение этих двух параметров.
/**Возвращает большее значение двух целочисленных переменных данных*/
publicstaticintmax(intnum1,intnum2){
нарушение;
если (номер1>номер2){
результат = число1;
}еще{
результат = число2;
}
возврат результата;
}
Java поддерживает два способа вызова методов в зависимости от того, возвращает ли метод значение.
Когда программа вызывает метод, управление программой передается вызываемому методу. Управление возвращается программе, когда выполняется оператор return вызванного метода или достигается закрывающая скобка тела метода.
Когда метод возвращает значение, вызов метода обычно рассматривается как значение. Например:
intlarger = Макс (30,40);
Если возвращаемое значение метода недействительно, вызов метода должен быть оператором. Например, метод println возвращает void. Следующий вызов является оператором:
System.out.println("Добро пожаловать в Java!");
В следующем примере показано, как определить метод и как его вызвать:
publicclassTestMax{
/**Основной метод*/
publicstaticvoidmain(String[]args){
инти=5;
интервал = 2;
intk = Макс (я, j);
System.out.println("Максимум между"+i+
"и"+j+"is"+k);
}
/**Возвращает большее значение из двух целочисленных переменных*/
publicstaticintmax(intnum1,intnum2){
нарушение;
если (номер1>номер2){
результат = число1;
}еще{
результат = число2;
}
возврат результата;
}
}
Результаты компиляции и запуска приведенного выше примера следующие:
Максимум между 5 и 2 равен 5.
Эта программа содержит метод main и метод max. Метод Main вызывается JVM. В остальном метод main ничем не отличается от других методов.
Заголовок основного метода остается неизменным, как показано в примере, с модификаторами public и static, возвращает значение типа void, имя метода — main и принимает параметр типа String[]. String[] указывает, что параметр представляет собой массив строк.
В этом разделе объясняется, как объявить и вызвать метод void.
В следующем примере объявляется метод с именем printGrade и вызывается его для печати заданной оценки.
publicclassTestVoidMethod{
publicstaticvoidmain(String[]args){
печатьГрейд (78,5);
}
publicstaticvoidprintGrade (двойная оценка) {
если (оценка> = 90,0) {
System.out.println('A');
}
еще если (оценка> = 80,0) {
System.out.println('B');
}
elseif(оценка>=70,0){
System.out.println('C');
}
elseif(оценка>=60,0){
System.out.println('D');
}
еще{
System.out.println('F');
}
}
}
Результаты компиляции и запуска приведенного выше примера следующие:
С
Метод printGrade здесь является методом типа void и не возвращает значения.
Вызов метода void должен быть оператором. Поэтому он вызывается как оператор третьей строки основного метода. Как и любое утверждение, которое заканчивается точкой с запятой.
При вызове метода вам необходимо предоставить параметры, и вы должны предоставить их в порядке, указанном в списке параметров.
Например, следующий метод печатает сообщение n раз подряд:
publicstaticvoidnPrintln(Stringmessage,intn){
для(inti=0;i<n;i++)
System.out.println(сообщение);
}
В следующем примере демонстрируется эффект передачи по значению.
Эта программа создает метод, который обменивает две переменные.
publicclassTestPassByValue{
publicstaticvoidmain(String[]args){
интервал1=1;
интервал2=2;
System.out.println("Beforeswapmethod,num1is"+
число1+"иномер2is"+номер2);
//Вызов метода обмена swap(num1,num2);
System.out.println("Метод Afterwap,num1is"+
число1+"иномер2is"+номер2);
}
/**Метод обмена двумя переменными*/
publicstaticvoidswap(intn1,intn2){
System.out.println("tInsidetheswapmethod");
System.out.println("ttBeforeswappingn1is"+n1
+"n2is"+n2);
//Поменяем значения n1 и n2 inttemp=n1;
n1=n2;
n2=температура;
System.out.println("ttAfterswappingn1is"+n1
+"n2is"+n2);
}
}
Результаты компиляции и запуска приведенного выше примера следующие:
Перед методом замены, num1is1 и num2is2
Внутриметода подкачки
Перед заменойn1is1n2is2
После заменыn1is2n2is1
Метод после замены, num1is1 и num2is2
Вызовите метод swap, передав два параметра. Интересно, что значения реальных параметров не меняются после вызова метода.
Используемый выше метод max применяется только к данным типа int. Но что, если вы хотите получить максимальное значение двух типов данных с плавающей запятой?
Решение состоит в том, чтобы создать другой метод с тем же именем, но с другими параметрами, как показано в следующем коде:
publicstaticdoublemax(doublenum1,doublenum2){
если (номер1>номер2){
возвратномер1;
}еще{
возвратномер2;
}
}
Если вы передадите параметр int при вызове метода max, будет вызван метод max параметра int;
Если передан параметр double, будет вызвано тело метода max типа double. Это называется перегрузкой метода;
То есть два метода класса имеют одно и то же имя, но разные списки параметров.
Компилятор Java определяет, какой метод следует вызвать, на основе сигнатуры метода.
Перегрузка методов может сделать программу более понятной и легкой для чтения. Методы, выполняющие тесно связанные задачи, должны использовать одно и то же имя.
Перегруженные методы должны иметь разные списки параметров. Вы не можете перегружать методы, основанные исключительно на модификаторах или возвращаемых типах.
Область действия переменной — это часть программы, из которой на эту переменную можно ссылаться.
Переменные, определенные внутри метода, называются локальными переменными.
Область действия локальной переменной начинается с ее объявления и заканчивается в конце содержащего ее блока.
Локальные переменные должны быть объявлены до того, как их можно будет использовать.
Область параметров метода охватывает весь метод. Параметр на самом деле является локальной переменной.
Переменные, объявленные в части инициализации цикла for, имеют область действия на протяжении всего цикла.
Но область применения переменной, объявленной в теле цикла, простирается от ее объявления до конца тела цикла. Он содержит объявления переменных, как показано ниже:
Вы можете объявить локальную переменную с одним и тем же именем несколько раз внутри метода в разных невложенных блоках, но вы не можете объявить локальную переменную дважды внутри вложенного блока.
Иногда вам нужно передать сообщения программе во время ее работы. Это достигается путем передачи аргументов командной строки функции main().
Параметры командной строки — это информация, следующая сразу за именем программы при ее выполнении.
Следующая программа печатает все аргументы командной строки:
общественныйклассCommandLine{
publicstaticvoidmain(Stringargs[]){
for(inti=0;i<args.length;i++){
System.out.println("args ["+i+"]:"+args[i]);
}
}
}
Запустите программу, как показано ниже:
javaCommandLineэто командная строка200-100
Результаты бега следующие:
args[0]:это
аргументы [1]: есть
аргументы[2]:а
args[3]:команда
args[4]:строка
аргументы[5]:200
аргументы[6]:-100
Когда объект создается, конструкторы используются для его инициализации. Конструктор имеет то же имя, что и класс, которому он принадлежит, но у конструктора нет возвращаемого значения.
Конструкторы обычно используются для присвоения начальных значений переменным экземпляра класса или для выполнения других необходимых шагов для создания законченного объекта.
Независимо от того, настраиваете ли вы конструктор или нет, все классы имеют конструкторы, поскольку Java автоматически предоставляет конструктор по умолчанию, который инициализирует все члены равными 0.
Как только вы определите свой собственный конструктор, конструктор по умолчанию станет недействительным.
Вот пример использования методов конструктора:
//Простой конструктор static classMyClass{
инткс;
//Ниже приведен конструктор MyClass(){
х=10;
}
}
Вы можете инициализировать объект, вызвав конструктор следующим образом:
publicclassConsDemo{
publicstaticvoidmain(Stringargs[]){
MyClasst1 = новыйМойКласс();
MyClasst2 = новыйМойКласс();
System.out.println(t1.x+""+t2.x);
}
}
В большинстве случаев необходим конструктор с параметрами.
Вот пример использования методов конструктора:
//Простой конструктор classMyClass{
инткс;
//Ниже приведен конструктор MyClass(inti){
х=я;
}
}
Вы можете инициализировать объект, вызвав конструктор следующим образом:
publicclassConsDemo{
publicstaticvoidmain(Stringargs[]){
MyClasst1 = новыйМойКласс(10);
MyClasst2 = новыйМойКласс (20);
System.out.println(t1.x+""+t2.x);
}
}
Результаты бега следующие:
1020
Начиная с JDK 1.5, Java поддерживает передачу в метод переменных параметров одного типа.
Объявление вариативных параметров метода выглядит следующим образом:
имя типа...имя параметра
В объявлении метода добавьте многоточие (...) после указания типа параметра.
В методе можно указать только один переменный параметр, и это должен быть последний параметр метода. Перед ним должны быть объявлены любые обычные параметры.
publicclassVarargsDemo{
publicstaticvoidmain(Stringargs[]){
//Вызываем метод переменных параметров printMax(34,3,3,2,56.5);
printMax(newdouble[]{1,2,3});
}
publicstaticvoidprintMax(double...numbers){
если (numbers.length == 0) {
System.out.println("Нет аргументов");
возвращаться;
}
двойной результат = числа [0];
for(inti=1;i<numbers.length;i++)
если (числа [i]> результат) {
результат = числа [я];
}
System.out.println("Максимальное значение"+результат);
}
}
Результаты компиляции и запуска приведенного выше примера следующие:
Максимальное значение – 56,5.
Максимальное значение – 3,0.
Java позволяет определить такой метод, который вызывается перед уничтожением (переработкой) объекта сборщиком мусора. Этот метод называется Finalize() и используется для очистки переработанного объекта.
Например, вы можете использовать Finalize(), чтобы гарантировать закрытие файла, открытого объектом.
В методе Finalize() необходимо указать операции, которые будут выполняться при уничтожении объекта.
Общий формат Finalize():
защищенныйvoidfinalize()
{
//Здесь код терминала}
Ключевое слово protected — это квалификатор, который гарантирует, что метод Finalize() не будет вызываться кодом вне класса.
Конечно, перезапуск памяти Java может автоматически выполняться JVM. Если вы используете его вручную, вы можете использовать метод, описанный выше.
publicclassFinalizationDemo{
publicstaticvoidmain(String[]args){
Cakec1 = новый торт (1);
Cakec2 = новый торт (2);
Cakec3 = новый торт (3);
с2=с3=ноль;
System.gc();//Вызов сборщика мусора Java}
}
классCakeextendsObject{
частныйинтид;
publicCake (intid) {
this.id=id;
System.out.println("CakeObject"+id+"создан");
}
protectedvoidfinalize()throwsjava.lang.Throwable{
супер.finalize();
System.out.println("CakeObject"+id+"isdispose");
}
}
Запустив приведенный выше код, результаты будут следующими:
C:1>javaFinalizationDemo
CakeObject1 создан
CakeObject2isсоздан
CakeObject3 создан
CakeObject3isрасположен
CakeObject2isрасположен