I am not a physics student. I am, however, a computer science student. But even though I am not a physics student, I take it that it would be a bad idea not to learn at least one programming language. Classes can be helpful if you don't have the drive to study without assignments. But you know better than I do whether you should take a class or study own your own.
Here is where I stand on a few languages, though, as you will no doubt soon see, there are many opinions and no two or alike, or at least tend not to be. First off, if you are taking a class, study the language that will be used there, as it will give you a head start.
Now, on languages: I am personally not a fan of the Java programming language, but it is quite popular these days (I am more interested in using the JVM with a language like Clojure, a lisp dialect). I am a fan of C++, but it has a lot of well-documented problems, and can be difficult to learn. But for lower-level programming in the physics world, I suggest either C++ of Fortran, as they seem to be popular. I do not yet know Fortran, so I can't comment on it in detail, but the things I have read about the language are favorable.
I, and a few other people I have noticed on this forum, believe that understanding programming concepts is more important than knowing any particular language. The thing is, there are many paradigms in the programming world. Since object-oriented is the most popular these days, and many physical systems are easier to think of as objects, I don't think it would be a bad place to start. OOP does have its problems, however, and if you desire to become a better programmer later down the road, you may want to look into applying concepts of functional programming to your language of choice (you don't have to use a pure functional language to use the concepts). I am new to the concept myself and can't say too much on it.
I am falling in love with Ruby, but it is "slow" and not as widely used in the physics world. Python is faster and used a lot in physics. I only have a basic understanding of Python, but I would recommend it as a first language because of the ease to learn, the fact that it is used quite a bit in physics, and because of it's extensive libraries. It is a very nice language in my opinion, though there are some things about it that irritate me; nothing worth of discussion, however.
It is impossible for me to tell you what the "right" language for you is, because I do not know how your mind works. There is a good chance that the first language you choose will not end up being your preferred language in the end. My advice it to look around, choose a language you like the idea of, and learn it. Then try something else, or don't. I am not going to advise all sorts of advanced things you "should" learn, because that is up to you. You may hate programming and only wish to use the language you have just learned or the language used by the department you work in, or whatever. And that's fine. I like programming, to a degree, but I do not everyone needs to know as much about it as I would like to. I am not going to say "learn assembly, to will understand the machine better, blah blah blah." Truth is, you don't need to know assembly to programming. In my opinion, my work with assembly did help my understanding of computers and whatnot, but I don't have to know those things.
So, in summary, my advice is that you should learn a language, but it is up to you and your circumstances to decide which one. Hope this helps; just noticed I am late for practice, so no editing.