Java is an object-oriented language. Through new you create instances of objects of a certain class. But a class is also an object in essence, which takes place in the memory and to which you can get a link.
When a program writes a .class file, it divides all variables in the class into two parts. static will be written to the class object. This type of variable will increase the size of the class itself. The class object is one in memory and is loaded once and for the entire duration of the operation. Accordingly, the static variable is one per class and, accordingly, one for all created objects of this class.
Non-static variables will be written to the generated objects, for each generated object there will be its own independent set of these variables that can be manipulated independently of each other.
So here. At the time the program starts, only the class is loaded. There is not a single instance of the object until you create it with new. There are no non-static variables that are stored in objects, and there is also no place for them in RAM. They have nowhere to read and write. Therefore, the program curses that you are trying to access non-static variables from a static function.
PS Here, for example, you are automating a single dispatching system of airports in the country. The specific density of kerosene is the same for all airports. That is, from the volume of fuel purchased, you can calculate its weight at any time, without knowing anything about a particular airport. Density is a static quantity. And the length of the runway and the number of parking on the platform - for each airport has its own. Until you create an instance of the airport through new and download the information from the database, you will not be able to operate with these values. Without a selected airport, the number of parking areas is an abstract concept that makes no sense.