| « Windows Mobile PIN unlock is braindead | HttpWebRequest.Abort() in .NET Compact Framework 2 doesn't work when m_connection is null » |
Static classes in C# and Java
Sunday, February 28, 2010
While C# and Java are similar enough that one can often copy/paste code from one to the other with minor changes, sometimes the subtle differences will get you...
Both languages allow you to declare a class as static. They mean very different things, however.
In C#, a static class is pretty straightforward: it is a class with all static members. You can't instantiate a static class.
In Java, it's more complicated. A class can only be marked static if it is an inner class and not anonymous. It is a compile-time error to mark a top-level class as static, e.g. you can't create Hello.java with this as the content:
/* Java */
public static class Hello { /* ... */ }
If an inner class is not declared static, then it can only be instantiated within the context of its enclosing class:
/* Java */
public class Hello {
public class Inner {}
public static void main(String[] args) {
new Inner(); // compile-time error because there is no enclosing instance of Hello
new Hello().new Inner(); // ok
new Hello().createInner(); // ok
}
public void createInner() {
new Inner();
}
}
If an inner class is declared static, then it behaves as if it was declared as a top-level class:
/* Java */
public class Hello {
public static class Inner {}
public static void main(String[] args) {
new Inner(); // ok
new Hello().new Inner(); // can't do this with static class
new Hello().createInner(); // ok
}
public void createInner() {
new Inner();
}
}
In C#, there is no equivalent of enclosing instances or non-static inner classes. Inner classes behave the same as top-level classes:
/* C# */
public class Hello {
public class Inner {} // equivalent to declaring as static in Java
}
Comments
There are no comments.