Java Interface 是常量存放的最佳地点吗?
由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量。因而interface通常是存放常量的最佳地点。然而在java的实际应用时却会产生一些问题。
由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量。因而interface通常是存放常量的最佳地点。然而在java的实际应用时却会产生一些问题。
问题的起因有两个,第一,是我们所使用的常量并不是一成不变的,而是相对于变量不能赋值改变。例如我们在一个工程初期定义常量∏=3.14,而由于计算精度的提高我们可能会重新定义∏=3.14159,此时整个项目对此常量的引用都应该做出改变。第二,java是动态语言。与c++之类的静态语言不同,java对一些字段的引用可以在运行期动态进行,这种灵活性是java这样的动态语言的一大优势。也就使得我们在java工程中有时部分内容的改变不用重新编译整个项目,而只需编译改变的部分重新发布就可以改变整个应用。
讲了这么多,你还不知道我要说什么吗?好,我们来看一个简单的例子:
有一个interface A,一个class B,代码如下:
//file A.java
public interface A{
String name = "bright";
}
//file B.java
public class B{
public static void main(String[] args){
System.out.println("Class A's name = " + A.name);
}
}
够简单吧,好,编译A.java和B.java。
运行,输入java B,显然结果如下:
Class A's name = bright
我们现在修改A.java如下:
//file A.java
public interface A{
String name = "bright sea";
}
编译A.java后重新运行B class,输入java B,注意:结果如下
Class A's name = bright
为什么不是"Class A's name = bright sea"?让我们使用jdk提供的反编译工具javap反编译B.class看个究竟,输入:javap -c B ,结果如下:
Compiled from B.java
public class B extends java.lang.Object {
public B();
public static void main(java.lang.String[]);
}
Method B()
0 aload_0
1 invokespecial #1 <Method java.lang.Object()>
4 return
Method void main(java.lang.String[])
0 getstatic #2 <Field java.io.PrintStream out>
3 ldc #3 <String "Class A's name = bright">
5 invokevirtual #4 <Method void println(java.lang.String)>
8 return
注意到标号3的代
相关文档:
最近看到一个有意思的树形结构,为每个节点添加了lft和rgt两个属性。这样查找该节点的子节点、查找该节点所有父节点,就不用去递归查询,只需要用between、and语句就可以实现。下面以创建一个栏目树为例,以下是我的理解。
一般来讲,我们创建栏目树的时候,大多只需要一个外键parentid来区分该节点属于哪个父节点。数 ......
准备工作
首先,操作系统中安装好SQL Server 2000/2005,如果系统中都装有2000和2005版,记得停用一个,只开一个行了。
然后,到微软网站下载Microsoft SQL Server 2005 JDBC Driver 1.1
,也可以使用这个地址直接下载
。
解压sqljdbc_1.1.1501.101_chs.exe,把sqljdbc_1.1复制到%ProgramFiles%(如果系统在C盘则为C:\ ......
通常在用JAVA开发软件的过程中,我们常常会遇到需要把一些系统的配置参数保存到数据库中以防止丢失,传统的方法是将每个配置参数作为对象来建立数据库模型,相当于把模型中的对象绑定到数据表的每个字段上,但这样做的话灵活度太低,当需要添加配置参数时先得往数据表添加字段,再修改数据库模型和相关的映射文件。能否 ......
项目中有的文件夹原来是svn版本控制的,现在不想控制了,就像把这个文件夹传给别人或者自己备份,但是看到那么多.svn文件夹实在不舒服,写了下面的简单程序用来删除这些文件,以后需要删除的话,设置好文件夹路径和要删除的文件夹名字跑一下就行了。
import java.io.File;
/*
* To change this template, choose Tools ......
JCheckBox:
复选框;
JComboBox:
下拉列表;
JTextField:
允许编辑单行文本;
JTextArea:
允许编辑的多行文本区域;
JTextPa ......