Я вызываю метод без объекта, почему он запускается? - PullRequest
0 голосов
/ 01 августа 2020
public class SalaryManager {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    SalaryManager sm=new SalaryManager();
    System.out.println(sm.getMonthlySalary(20000000));
}

public double getMonthlySalary(int yearlySalary) {
    double monthlysalary=yearlySalary/12.0;
    
    double tax=calculateTax(monthlysalary);//HERE
    double pension=calculateNationalPension(monthlysalary);//HERE
    double insurance=calculateHealthInsurance(monthlysalary);//HERE
    double sum=tax+pension+insurance;
    
    monthlysalary-=sum;
    
    return monthlysalary;
}

public double calculateTax(double monthSalary) {
    return monthSalary*0.125;
    
}

public double calculateNationalPension(double monthSalary) {
    double pension=monthSalary*0.081;
    
    return pension;
}

public double calculateHealthInsurance(double monthSalary) {
    double insurance=monthSalary*0.135;
    
    return insurance;
}
}

Я знаю, что если я вызываю метод, я должен создать объект без c метода stati; Но я вызываю метод без объекта в "getMonthlySalary Method", он работает хорошо. Как работает этот код?

Ответы [ 3 ]

4 голосов
/ 01 августа 2020

Когда вы уже находитесь в методе-члене, что-то вроде calculateTax(monthlysalary); является сокращением для this.calculateTax(monthlysalary);. Вы вызываете метод для текущего объекта . Чтобы лучше понять это, узнайте, что означает this в Java.

1 голос
/ 01 августа 2020

Вы можете вызвать любой метод из метода getMonthlySalary, так как этот метод не является методом c stati. Вы уже создали объект в основном методе, а затем вы вызвали метод getMonthlySalary. Так что код работает нормально.

0 голосов
/ 01 августа 2020

Абсолютно невозможно вызвать нестатический c метод без прикрепленного к нему объекта. Нестатистический c метод позволяет программисту получить доступ к элементам объекта двумя особенно важными способами:

  1. Через ключевое слово this
  2. Доступ другие члены объекта напрямую без явной ссылки на объект.

Утверждения, которые, по вашему мнению, функционируют без связанного с ними объекта, на самом деле обращаются к членам объекта последним способом .

Итак, для объекта следующей формы:

obj a
{
 var one;
 non-static method two();
}

Внутри нестационарного c метода два ():

a. один эквивалентен как this.one , так и one .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...