- 浏览: 39252 次
- 性别:
- 来自: 北京
文章分类
最新评论
一、illegal forward refrence
前天写一个类时遇到一个很眼生的编译错误(问题简化后):
1punlic final class Constants{
2 public static int VAR2 = VAR1 + 1;
3 public static int VAR1 = 1;
4}
2 public static int VAR2 = VAR1 + 1;
3 public static int VAR1 = 1;
4}
编译时出错(第2行):
illegal forward refrence
仔细一想,是因为VAR2引用的VAR1在VAR2之后定义,看来在Java中定义static变量时应遵循“声明先于使用”的原则。
二、static块
还是上一个类,VAR1和VAR2定义成final,值存在一个properties文件中,在使用前必须将值load进来:
System.getProperties().load(new FileInputStream("constants.properties"));
于是将上面的代码放在static块中:
punlic final class Constants{
static{
System.getProperties().load(new FileInputStream("constants.properties"));
}
public static final int VAR2 = System.getProperties().getProperty("var2");
public static final int VAR1 = System.getProperties().getProperty("var1");
}
static{
System.getProperties().load(new FileInputStream("constants.properties"));
}
public static final int VAR2 = System.getProperties().getProperty("var2");
public static final int VAR1 = System.getProperties().getProperty("var1");
}
但在运行时VAR1和VAR2没有被赋值,debug后发现static块根本没有执行。于是顿悟:final变量在编译时便被编译器计算、赋值,因此在运行时没有必要执行static块。
发表评论
-
在Java中使用Oracle blob
2005-02-13 22:27 773Oracle中的lob (Large Object)可以存储非 ... -
java.util.StringTokenization
2005-02-13 22:29 641今天室友老七做数据库大作业,其中要实现一个功能,就是输入一个以 ... -
JBuilder 2005中的Servlet mapping
2005-02-13 22:30 697使用JB进行Servlet好像很方便的样子,但是servlet ... -
使用策略模式(Strategy)实现多关键字排序
2005-08-04 12:37 790“策略模式”的出现,是为了提供一套相互之间可灵活替换的算法, ... -
Alloy
2005-08-04 13:09 655Alloy look and feel(http:// ... -
IDEA
2005-08-04 13:11 922今天在TSS上看到IntelliJ的IDEA 5.0终于rel ... -
原型模式(Prototype)
2005-08-05 10:54 741一、概述 原型模式属于对象创建模式,通过给出一个原型对象来指明 ... -
IDEA破解过程
2005-08-05 19:11 1802开场白就不说了,直接切入正题吧。本破解的前提是安装了IDEA ... -
适配器模式(Adapter)
2005-08-06 19:39 618一、概述 类的适配器模式把被适配的类的API转换成为目标类的A ... -
A beginners guide to Dependency Injection [转载自TSS]
2005-08-08 22:30 816Scope This article presents a h ... -
Alloy破解过程
2005-08-09 15:42 8681package com.incors.plaf. ... -
接口与Object类的关系?
2005-08-19 13:53 1107今天凌晨coding的时候发现一个很有趣的现象。“Object ... -
缺省适配器模式(Default Adapter)
2005-09-06 12:01 777一、概述 当不需要全部实现适配器接口提供的方法时,可先设计一个 ... -
Object Modeling Strategies (I)
2005-09-08 10:12 589Activities and model components ... -
Joshua Bloch咏Tiger诗八首
2005-09-08 16:59 838“Ease of Development”是J2SE 1.5的 ... -
James Gosling
2005-09-14 22:01 769今天是Java China 2005的最后一天,下午没有去各个 ... -
Object Modeling Strategies (II)
2005-09-19 15:23 622Str#1d. "Invest an Hour&qu ... -
Object Modeling Strategies (III)
2005-09-19 15:26 562Identifying system purpose and ... -
Tomcat 5.5.9 不支持switch(<enum>)?
2005-09-19 18:51 809ServiceExceptionType: package p ... -
“软件危机”时总结的坏的编程习惯——我们是否依旧守着古风?
2005-10-09 14:23 7291、乱用GOTO语句(上下跳转看起来非常方便) 2、大量使用 ...
相关推荐
在Java编程语言中,`static`和`final`都是关键字,它们用于定义不同的特性,但同时也有一些相似之处。下面我们将详细探讨这两个关键字的区别和用法。 首先,`static`关键字是用来声明类级别的变量或方法,这意味着...
final 变量的变与不变是一个重要的问题。有人说 final 变量在赋值后就不可变,但这个不变到底指的是什么呢?这个不变指的是引用,是地址,而所引用的对象的内容仍然是可变的。就是说,这个 final 变量的引用是不能...
Java 中的 final 和 static 关键字详解 final 关键字是 Java 中的一种访问...final 和 static 关键字是 Java 中两个重要的访问修饰符,它们可以帮助开发者更好地设计和实现类、方法和变量,提高程序的效率和可维护性。
静态变量与静态方法类似,使用 static 关键字来修饰,例如 static int c = 0;。 class Value{ static int c = 0; static void inc(){ c++; } } class Count{ public static void prt(String s){ System.out....
在Java编程语言中,`final`与`static`是两个非常关键且常用的关键字,它们各自具有独特的功能和用途,可以极大地增强代码的稳定性和可维护性。下面将详细解析这两个关键字的用法及其在Java中的重要性。 ### 一、`...
- **final变量**:一旦赋值后,final变量的值就不能改变。它可以是基本类型或引用类型,但引用类型变量指向的对象的属性仍可修改。 - **final方法**:一旦声明为final,方法就不能被子类重写。这确保了方法的行为...
当 `static` 和 `final` 一起使用时,表示创建了一个全局常量,这类变量在定义时必须赋予初始值,并且在整个程序运行过程中其值不能改变。这种做法常见于定义配置参数等不会改变的值,例如: ```java public class ...
在 Java 编程语言中,final 和 static 是两个非常重要的关键字,它们可以用来修饰类、方法、变量等,了解它们的使用方法和限制非常重要。本文将详细总结 final 和 static 的使用方法和限制。 一、final 关键字 ...
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
// 编译错误, final变量的值一旦给定就无法改变 // t.D = 71; // 编译错误, final变量的值一旦给定就无法改变 System.out.println(t.A); System.out.println(t.B); System.out.println(t.C); // 不推荐用对象...
总结一下,`final`关键字用于创建不可修改的变量,确保数据的不变性,而`static`关键字用于创建类级别的变量和方法,这些变量和方法与类的实例无关,而是与类本身关联。理解并恰当使用这两个关键字是编写健壮、可...
Java 中 final 和 static 的区别 final 关键字在 Java 中有多种用法,包括修饰变量、方法、类等。...final 关键字用于表示不可变的变量、方法、类等,而 static 关键字用于表示静态的成员变量、方法、代码块等。
`final`变量可以是类级别的(静态`static`)或实例级别的。静态`final`变量通常作为类级别的常量使用,例如常量PI、E等,它们在所有类实例间共享同一值。实例级别的`final`变量则属于每个对象实例,它们的值在对象...
1. 修饰变量:如果 Static 修饰的是变量,则 JVM 会将其分配在内存堆上,该变量就与对象无关,所有对该变量的引用都指向同一个地址。因此,我们使用该变量的时候,直接指明类的静态变量,当然修饰符必须是 public。 ...
Java编程中static和final关键字的陷阱.pdf Java编程中static和final关键字的陷阱是Java开发中两个重要的关键字,但是它们的使用也存在一些陷阱,需要开发者注意掌握。 static关键字可以用于修饰属性、方法和类。...
Java中的`static`、`this`、`super`和`final`是四个非常重要的关键字,它们在编程中扮演着至关重要的角色。这篇文章将简要介绍这些关键字的基本用法及其应用场景。 1. **static** `static`关键字用于声明类级别的...
final 变量是值一旦给定就无法改变的变量,final 变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 例如: `private final String S = "final 实例变量 S";` final 变量定义的时候,可以先...
在设计类和接口时,明智地使用`final`和`static`可以帮助实现更好的设计模式,例如单例模式(`static`与私有构造函数结合)和不可变对象(`final`类和属性)。在日常编程中,应根据需求合理选择和应用这两个关键字。
8. **`final`变量的变与不变**: `final`变量的不变性指的是其引用的地址不可变,但所引用的对象内容(如果对象是可变的,如`ArrayList`等)是可以改变的。这意味着你可以改变对象的状态,但不能改变`final`变量...
下面将详细解释`static`关键字的使用以及与之相关的`super`和`final`关键字。 1. **静态方法(static methods)**: - 静态方法是与类相关联而不是与类的实例关联的方法。在示例中,`public static void main...