Static And Final Variable / Field - Functional Difference?
Sep 15, 2014
I'm not really sure I understand the functional difference between a static and final variable/field. Oracle defines Class Variable as:
Class Variables (Static Fields) A class variable is any field declared with the static modifier; this tells the compiler that there is exactly one copy of this variable in existence, regardless of how many times the class has been instantiated. A field defining the number of gears for a particular kind of bicycle could be marked as static since conceptually the same number of gears will apply to all instances. The code static int numGears = 6; would create such a static field. Additionally, the keyword final could be added to indicate that the number of gears will never change.
If static will have the same value regardless of how many times it's used, then why use final (or vice versa)?
How can i take run time value for static final variable...my lecturer said first time assignment is possible for declared final variable but in my case it shows compile time error..I'm placing my program below with error message
class Sample { static final String cname; void print() { System.out.println(cname); } public static void main(String args[]) { cname=args[0]; Sample s=new Sample(); s.print(); } }
Sample.java:11: cannot assign a value to final variable cname. cname=args[0];
class A { final Object b; public A(C c) { try { b = c.someMethodThatMayThrowSomeException(); } catch (SomeException e) { b = null; // This line results in compiler error: "variable b might already have been assigned" } } // take away b=null line and you get "variable b might not have been initialized" on this line }
Why? How could 'b' be assigned if the exception was thrown?
why using the get method(c.get(c.HOUR_OF_DAY)); gives me the correct hour(currently 19) but directly accesing c.HOUR_OF_DAY returns 11 ? It shows In the documentation that HOUR_OF_DAY is public.
import java.util.*; public class calendar2 { public static void main(String[] args) { new calendar2().timer(); } private void timer() { Calendar c=Calendar.getInstance(); //c.clear(); System.out.println(c.get(c.HOUR_OF_DAY)); System.out.println(c.HOUR_OF_DAY);
I am trying to call an actionListener which is shown below in my PSVM :
class testMenuItemListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { getContentPane().removeAll(); createPanel(); getContentPane().add(panel1); //Adding to content pane, not to Frame repaint(); printAll(getGraphics()); //Extort print all content
[Code] .....
I get the following error :
Frame.java:409: error: non-static variable this cannot be referenced from a static context menuItem1.addActionListener(new testMenuItemListener());
I am trying to add a field (called special) to a hibernate table. I am copying existing code (related to the NAME field) so I don't have to figure this out from scratch. I am getting the error
"[ERROR] C:VOXvoxware-1.1.13voxwarevoxware-implsrcmainjavacomvoxwareimplflowVoxFlowConfiguration.java:[213,38] error: non-static variable special cannot be referenced from a static context".
Line 213 is in public void mergeFrom, the actual line is "special = VoxFlowConfiguration.special;" I don't understand why Java thinks special is a "non-static" variable but it doesn't have a problem with the other variables (such as name, orderShow)
I am trying to call an actionListener which is shown below in my PSVM :
class testMenuItemListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { getContentPane().removeAll(); createPanel(); getContentPane().add(panel1); //Adding to content pane, not to Frame repaint();
[Code] .....
I get the following error :
Frame.java:409: error: non-static variable this cannot be referenced from a static context menuItem1.addActionListener(new testMenuItemListener());
The error said : Non Static Variable TAShaReport Cannot referenced from a static context
I just want to put the output in the TextArea
Here is the code :
public static String DeduplicateFiles(String myFolderLocation) { try { HashSet<String> newset = new HashSet<>(); File folder = new File(myFolderLocation); //Directory where the files are located File[] listOfFiles = folder.listFiles();
This is a someway special question, because I am using jmonkeyEngine.
But the topic is simple:
I have 2 classes:
public class Spielbrett extends SimpleApplication { public static void main(String[] args) { Spielbrett app = new Spielbrett(); app.start(); } @Override public void simpleInitApp() {
[Code]...
as the main class and a second class for the chips:
public class Spielstein { public Spatial stone; public int player; public int team; private AssetManager assetManager = Spielstein.getAM(); //THIS IS THE PROBLEM public Spielstein(int t_player, int t_team){
[Code]...
My problem is: I can't access getAM() from the first in the second class. If you know why I would be glad for an answer.
One of my friend asked me that which will load first static variable or static block ? My answer was to static variable.. So he gave me two program and said to differentiate between them
1st program
public class Test { public static void main(String args[]) { System.out.println(Test.x); } static { System.out.println(Test.x);
[Code] ....
Output of this :
90 90
I tried to decompile the byte code and found it's same for both the above equation. How to differentiate between them. I am confused when the static variable will initialised.
I am wondering if there is a way in jave to use enums WITHIN a class (without creating a separate enum class) without using private static final. Something like as folows:
class My Class { myEnum {ACTIVE, INACTIVE, PENDING}; }
I wrote a code to use static class. But, when I call the class in a outer class but, it gives an error. Is it mandatory to have a static class should have static variables when we declaring them??
public class StaticClassMain { static class Sub{ String str="Example 1"; } public static void main(String[] args) { System.out.println(Sub.str); } }
this code won't compile because selected row must be declared as final because of it being defined outside the window listener. Is their anyway around this? If I make it final the first time that the variable is called it keeps it starting value until the GUI is closed.
butEdit.addActionListener (new ActionListener () { @Override public void actionPerformed (java.awt.event.ActionEvent evt) { int selectedRow = table.getSelectedRow (); final String [] values = custTableModel.getRowValues (selectedRow);
Created a java.sql.connection object. Refering those obj inside public void run() { } If i declare as final inside a method, i can't refer those outside method due to scope. Cannot refer to a non-final variable dbConnObj inside an inner class defined in a different method...
I've been using Eclipse and I realized that it compiles stuff into class files for you. So, I created a new project and each class is a separate .java file, with the .class files already there, but I cannot get rid of these errors. Or, say if I wrote them all into one file and then realized it needs to be 3 separate, or that all need to be in the same src file (oops)? Here are the errors:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: random cannot be resolved or is not a field guessp1 cannot be resolved to a variable guessp1 cannot be resolved to a variable guessp2 cannot be resolved to a variable guessp2 cannot be resolved to a variable guessp3 cannot be resolved to a variable guessp3 cannot be resolved to a variable guessp1 cannot be resolved to a variable guessp2 cannot be resolved to a variable guessp3 cannot be resolved to a variable
I have a class Tree in which all the methods to build a tree are in place. But however I would want variable of by Tree which is pointing to the last node being added to the tree.
So basically every time you keep adding a node to the tree you tail pointer gets updated to point to the last node. I have this so far.
public class NonEmptyTree implements Tree { private Tree left; private int data; private int leftleafCount; private int rightleafCount; private Tree right; private Tree tail; // This variable must be shared by all the object. There needs to just one tail pointer to the tree. public Tree insert( data ) { tail = // gets updated every time when new node gets added.
I've been looking through the functional interfaces for something like this (It's part of a REPL):
public interface ActionInterface { void call(); }
I want to use it like this:
public void setQuitAction(ActionInterface action) { quitAction = action; }
// and somewhere else:
evaluator.setQuitAction(() -> isLooping = false);
I feel like there should be something like ActionInterface included with all those functional interfaces. All I can come up with is Runnable, which makes you think of threads not lambdas. What's the way to do this in Java?
Spoiler
What I'm doing is extracting the Eval part of the REPL so I can write test doubles for it. However, the Eval part needs to be able to tell the main loop to stop. I suspect this will be the target of further refactoring. Passing a lambda might not be the ideal solution but it's better than Eval knowing about the REPL class. Now I can mock out the Eval part when testing the REPL and I can even mock out the quit action when testing Eval.
Sandwich class. I have thus far completed creating a sandwich class with a seperate sandwich Tester class to run with it. (this is according to the assignment). Now I must create Static variables for the sandwich class:
Add two static variables to the Sandwich class to count how many sandwiches are sold and how many slices of tomato are used. Initialize each to 0.Where do you add code to increment the sandwich counter? Determine this and then add code.
public class Sandwich { static int numOfSold = 0; static int slicesUsed = 0; private String meat; private int numOfSlicesOfTomato; private boolean lettuce;