Looking at it this way helps me:


Every type has a static instance.
The static instance is created at the first time you access the type -- either through the static instance or creating another instance.
You can create as many non-static instances as you like, but there is only one static instance.
Anything within a class that is declared as static belongs to the static instance, and thus doesn't have access to any other instances you create. But the other instances DO have access to the static instance.
If a class is declared as static then you cannot create other instances, only the static instance can ever exist.
You can declare a static constructor for the static instance just like a constructor for a normal instance (but by declaring it static).


As for when to use the static keyword:


Any method that doesn't need access to local properties can and probably should be declared static.
Helper classes that don't have any state whatsoever (which should be rare anyway) and that will never be mocked can be declared static. Whether they should is another matter; use this functionality sparingly.
Properties and fields that must be accessed by all instances of a class must be declared static. But use this only when there is no other option.


Understanding the static keyword
I don't have any Intellisense in SQL Server 2008 R2 Express Management Studio - is this supposed to work?

I am connecting to a SQL Server 2008 R2 Express database on the same machine (no other databases here at home) and I have no Intellisense.

Just wondering if it's supposed to work or is Express crippled?
