I disagree. If null was like Maybe, than you should be able to do:
E foo;
...
foo=foo.bar().bat()
without having to do a null check after each function.
I think that Java's approach has the worst of both worlds, because there is no way to make foo.bar().bat() safe when a function could return null.
In C, for example, calling a method on a null object does not cause an error. Rather it passes in null as the 'this' value, allowing you to do you null checks within the method.
I agree that C handles this much better than java. But your description is inaccurate. In C there are no methods, objects or 'this', which is far better.
In doing so, Java makes it just that much easier to create bottom values when they are not desired (e.g., dereferencing a null pointer).