.
отделяет части пакета и пакет от класса.
#
отделяет имена классов от полей, методов или конструкторов.
Т.е. в client.navigator.URLManager#newToken
the client.navigator
- это пакет, URLManager
- это класс, а newToken
- это имя метода.
Можно даже использовать #someMethod
для ссылки на методы внутри текущего класса без указания класса (то же самое для полей , ...).
Обратите внимание, что в случае внутренних классов будет несколько имен классов: java.lang.Thread.State
является внутренним классом в пакете java.lang
, который находится внутри Thread
и называется State
. Нет никакой разницы в синтаксисе между внутренними классами и классами верхнего уровня, единственный способ распознать эту разницу (без поиска классов) состоит в том, чтобы увидеть, что Thread
пишется с большой буквы и, следовательно, вероятно, класс (но Java допускает строчные буквы классы и пакеты в верхнем регистре, даже если соглашения запрещают их).