-
Static Variables and MethodsJava 2022. 2. 9. 14:16
자바의 Static한 변수와 메소드에 대해 정리하였습니다.
< Static Methods >
Static methods are methods that belong to an entire class, not a specific object of the class. Static methods are called using the class name and the . operator.
Example)
double randomNumber = Math.random(); // Stores a random decimal between 0.0 and 1.0 in randomNumber double number = Double.valueOf("2.5"); // Transforms the String "2.5" into a double
: We didn’t need to create a object in order to use that method.
< Static Variables >
Much like static methods, you can think of static variables as belonging to the class itself instead of belonging to a particular object of the class.
Just like with static methods, we can access static variables by using the name of the class and the . operator.- Unlike static methods, you can still access static variables from a specific object of the class. However, no matter what object you use to access the variable, the value will always be the same.
Example)
public class Dog{ // Static variables public static String genus = "Canis"; //Instance variables public int age; public String name; public Dog(int inputAge, String inputName){ this.age = inputAge; this.name = inputName; } public static void main(String[] args){ System.out.println(Dog.genus); // Prints Canis } } // always same! public static void main(String[] args){ Dog snoopy = new Dog(3, "Snoopy"); Dog ringo = new Dog(5, "Ringo"); System.out.println(Dog.genus); // Prints Canis System.out.println(snoopy.genus); // Prints Canis System.out.println(ringo.genus); // Prints Canis }
< Modifying Static Variables >
Often times, you’ll see static variables used to keep track of information about all objects of a class.
Example : our variable numATMs is keeping track of the total number of ATMs in the system. Similarly, totalMoney variable is keeping track of all money across all ATMs.
public class ATM{ // Static variables public static int totalMoney = 0; public static int numATMs = 0; // Instance variables public int money; public ATM(int inputMoney){ this.money = inputMoney; numATMs += 1; totalMoney += inputMoney; } public void withdrawMoney(int amountToWithdraw){ if(amountToWithdraw <= this.money){ this.money -= amountToWithdraw; totalMoney -= amountToWithdraw; } } public static void main(String[] args){ System.out.println("Total number of ATMs: " + ATM.numATMs); ATM firstATM = new ATM(1000); ATM secondATM = new ATM(500); System.out.println("Total number of ATMs: " + ATM.numATMs); System.out.println("Total amount of money in all ATMs: " + ATM.totalMoney); firstATM.withdrawMoney(500); secondATM.withdrawMoney(200); System.out.println("Total amount of money in all ATMs: " + ATM.totalMoney); } } // Total number of ATMs: 0 // Total number of ATMs: 2 // Total amount of money in all ATMs: 1500 // Total amount of money in all ATMs: 800
< Writing Your Own Static Methods >
One important rule to note is that static methods can’t interact with non-static instance variables.
This is due to static methods not having a this reference.To wrap your mind around this, consider why we use this when working with non-static instance variables.
Let’s say we have a Dog class with a non-static instance variable named age. If we have a line of code like this.age = 5; that means we’re setting the age of a specific Dog equal to 5. However, if age were static, that would mean that the variable belongs to the entire class, not a specific object.
The this keyword can’t be used by a static method since static methods are associated with an entire class, not a specific object of that class. If you try to mix this with a static method, you’ll see the error message non-static variable this cannot be referenced from a static context.'Java' 카테고리의 다른 글
Debugging (0) 2022.02.10 Inheritance and Polymorphism (0) 2022.02.09 Math Methods (0) 2022.02.08 Access, Encapsulation, and Scope (0) 2022.02.08 String Methods (0) 2022.02.07