Java Singleton getter/setter I've created working  setters/getters for an application, that will use a few different classes. This classes will use one class, that will store all data. I know, when I will use a standard constructor of container class, I'll get tons on nulls, due to different instance of container class.

I've created container class within a singleton, that works, but I wanted to ask if anything could be done better, or if this code follow the best practice.

public class Container {

    private String appName = null;
    private String appOwner = null;

    private Container() {
        System.out.println("Start");
    }

    private static class SingletonHolder {
        private final static Container INSTANCE = new Container();
    }

    public static Container getInstance() {
        return SingletonHolder.INSTANCE;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getAppOwner() {
        return appOwner;
    }

    public void setAppOwner(String appOwner) {
        this.appOwner = appOwner;
    }
}


Sample class, that will use this container:

public class SecondClass {
     Container ctn = Container.getInstance();
}


Right now, when I use in main class:

ctn.setAppOwner(owner);


I get a proper value in any other classes, when I call this:

Container ctn = Container.getInstance();
ctn.getAppOwner();


Is that a good approach?
There are a couple bad things in the code

First of all, this is weird in many ways:

private Container() {
    System.out.println("Start");
}


You print out "Start" to the standard output. This basically restrict any usage of this class to have access to a console. What if it is used in a GUI application? What if this is used in a server application?

Also, "Start" what? Whoever read the console will have no clue what is started? 

The object is constructed as a static field, and Java did not guarantee when these static constructor are run (they only guarantee it is run before the class methods is run, so it is basically you have a console print that is shown in non-deterministic time.

This is not great too.

public void setAppName(String appName) {
    this.appName = appName;
}


Whoever got access to the Container object instance can call this method, which means you basically have a global variable that anyone can access. That's a bad idea, because it will makes debugging really difficult. 

From these classes, it appears to me that all you needed is to let the app name and app owner initialized once and get access anywhere, you can make that by simply having a Configuration class with a static property.

public class Configuration
{
    private static String appName;
    private static String appOwner;
    public static void Initialize(String appName, String appOwner)
    {
        Configuration.appName = appName;
        Configuration.appOwner = appOwner;
    }
    public static String AppName() { return Configuration.appName; }
    public static String AppOwner() { return Configuration.appOwner; }
}


That would be it, simple and clear.