Reputation: 20906
I have defined an object and declared a static variable i
. In the get()
method, when I try to print the instance and class variable, both print the same value.
Isn't this.i
an instance variable? Should it print 0 instead of 50?
public class test {
static int i = 50;
void get(){
System.out.println("Value of i = " + this.i);
System.out.println("Value of static i = " + test.i);
}
public static void main(String[] args){
new test().get();
}
}
Upvotes: 0
Views: 6827
Reputation: 3
you didn't declare any instance variable in here.only one static variable.if you declare instance variable without assigning value,then if you try to print that instance variable value using "this" key word you can get default value as 0.
Upvotes: 0
Reputation: 9
static is a class level variable and non static is an instance variable(object level variable) . So here you declare only static variable and call them different way but same meaning.
this.i
test.i
both treated as class level variable or static variable.
Upvotes: 0
Reputation: 1503409
No, there's only one variable - you haven't declared any instance variables.
Unfortunately, Java lets you access static members as if you were accessing it via a reference of the relevant type. It's a design flaw IMO, and some IDEs (e.g. Eclipse) allow you to flag it as a warning or an error - but it's part of the language. Your code is effectively:
System.out.println("Value of i = " + test.i);
System.out.println("Value of static i = " + test.i);
If you do go via an expression of the relevant type, it doesn't even check the value - for example:
test ignored = null;
System.out.println(ignored.i); // Still works! No exception
Any side effects are still evaluated though. For example:
// This will still call the constructor, even though the result is ignored.
System.out.println(new test().i);
Upvotes: 8
Reputation: 280168
The field i
is declared as static
. You can access static
fields either with the YourClass.StaticField
or instance.StaticField
. So both of
this.i
test.i
are referring to the same value in the context of an instance method of your test
class.
It's considered bad practice to access a static
field with this.i
or instance.i
.
Upvotes: 2