Question: As we use "default" keyword as a access specifier, and it can be used in switch statements as well with complete different purpose, So i was curious that is there any other keywords in java which can be used in more then one purposes

Answer: 
Something no one else has mentioned yet: the **class** keyword has two different uses.

Declaring a class:

```
class Test{};

```

and indicating a class literal:

```
Class<Test> testClass = Test.class;

```
As all the other answers have stated, there are many keywords that server multiple purposes depending on context. I just wanted to add that there is a reason for this: There is a strong aversion to adding keywords because such additions break existing code, so when new features are added existing keywords are used if they make a reasonable fit, such as super and extends for generics and default for annotations, or they are just skipped as in the colon used in the enhanced for loop.

So my point is to expect that as the language continues to evolve even more uses are found for existing keywords rather than introducing new ones.