Binary string to decimal conversion
Usability

The Binary class has two kinds of usages:


Create an instance from a binary string, to get the decimal value later
A utility class with a utility method to convert a binary string to decimal value


Having two usages is confusing.
In general, an API that lets you accomplish the same thing in multiple ways raises questions like "which way is better",
which is not a very productive discussion.
Just provide one way, and there will be less questions asked, less confusion.

In this particular example,
it might make sense to move the converter logic to a BinaryUtils utility class.
If you still want a class that contains a binary string and decimal value,
then you can keep the Binary class for that purpose.

Pre-calculate when it makes sense

Getters should not calculation. When I see a method named "getSomething",
I assume it simply returns the value of a field (or sometimes a defensive copy).
But in this class, it calculates the decimal value.
Every time it's called, again and again.
Since the method always returns the same value,
it would be better to calculate that value once,
at construction time.
And that way, the getter will naturally really return just a simple field value.

Avoid negation in names

Negation as the "Not" in charIsNotBinary may lead to double-negation in code like if (!charIsNotBinary(...)) { ... }, which can be confusing.
It's better to rewrite as isBinary, and use ! where you need to negate it.

Using &lt; and &gt; operators is also slightly odd, feels kind of overkill for a range of size 2.
This way seems simpler and more natural:

  private static boolean isBinary(char ch) {
    return ch == '0' || ch == '1';
  }