It's not a secret anymore!*
The moose likes Beginning Java and the fly likes Global Variables in Java Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of EJB 3 in Action this week in the EJB and other Java EE Technologies forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Global Variables in Java" Watch "Global Variables in Java" New topic
Author

Global Variables in Java

Kamal Ahmed
Ranch Hand

Joined: Feb 15, 2005
Posts: 91
I want to declare a global variable in Java, and hence in the code below....

i use:

static int port = 10013 ; // Which is fine and dandy,
but i want to use this variable "port" as a global variable AND also as arg[0] so a user who runs the program can choose port on
command line.

I was able to do it, if i define:

int port = 0; //port number for Socket Connection, This will be arg[0]
if (args.length > 0) {
port = Integer.parseInt(args[0]);

But, then the variable "port" is NOT available in the run() method.

How can i make it as an arg[0] , and also have it available in the run() method

Thanks,

-Kamal.
}

import java.net.ServerSocket;

//Enhancement: Now instead of going to stdout , the output from the following lines should go to a Socket
//The ServerSocket represents a listening TCP connection
public class Server implements Runnable {
int id;

static int port = 10013 ;

public static void main(String[] args)
throws java.lang.InterruptedException {

//ServerSocket serverSocket = null;

//int port = 0; //port number for Socket Connection, This will be arg[0]
//if (args.length > 0) {
//port = Integer.parseInt(args[0]);
//}
System.out.println("Socket Port = " + port);
//if (args.length > 1) {
//fileName = args[1];
//}

for (int i = 0; i < 5; i++) {
Server runnable = new Server();
runnable.setId(i);
Thread thread = new Thread(runnable);
thread.start();
}

}
public void run() {

//Socket server = null;
ServerSocket serverSocket = null;
while (true) {

int num = NumberServer.getInstance().getNextNumber();

try {
//PrintStream out = new PrintStream(server.getOutputStream());
serverSocket = new ServerSocket(port);
System.out.println("before " + num);
//out.println(num);
System.out.println("after " + num);

} catch (Exception e) {
System.out.println("PrintStream: " + e);
//e.printStackTrace();
}

}

//System.out.println(
//"id: "
//+ this.id
//+ ": "
//+ "Number Server's instance Number : "
//+ num);

//try {
//Thread.sleep(1000);
//} catch (InterruptedException e) {
//
//e.printStackTrace();
//}

}

public void setId(int i) {
id = i;
}

}
David Harkness
Ranch Hand

Joined: Aug 07, 2003
Posts: 1646
Note to bartenders: this is unrelated to Sockets and should be in the Java in General (Beginner) forum.

In this codesimply remove the first line (declaration of port) and uncomment the other three lines. If the user specifies a port on the command line, the if test will pass and the static port shared by all Server instances will be written over.

However, a better way (you generally want to avoid "global" variables like this) would be to add the port as an argument to Server's constructor (you'd have to add a constructor). This would allow you to have multiple Servers running on different ports. This requires
  • Change "static int port" to "int port" (instance field).
  • Create a constructor for Server that takes an "int port" and assigns it to the instance field.
  • Create a constructor that takes no arguments and assigns a default port to its instance field.
  • Parse args[0] if available and pass to Server constructor; otherwise call no-arg constructor.


  • This isn't mandatory to do what you want, but it is cleaner.
    [ February 27, 2005: Message edited by: David Harkness ]
    Ernest Friedman-Hill
    author and iconoclast
    Marshal

    Joined: Jul 08, 2003
    Posts: 24166
        
      30

    Originally posted by David Harkness:
    Note to bartenders: this is unrelated to Sockets and should be in the Java in General (Beginner) forum.


    Yep. And that's where I'm moving it.


    [Jess in Action][AskingGoodQuestions]
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: Global Variables in Java
     
    Similar Threads
    Reseting socket after few seconds
    Monitoring Web Services
    Gloal Variables in Java
    Socket Server Serving Numbers
    How to send a message back from Server to Client?