同一包中的类不必存放在同一位置,只要将CLASSPATH分别指向这两个位置即可
使用import导入静态成员:
package com.lzw;
import static java.lang.Math.max;
import static java.lang.System.out;
public class importTest{
public static void main(String[] args){
out.println("1和4的较大值为:"+max(1,4));
}
}
final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。被定义为final的常量定义时需要使用大写字母命名、并且中间使用下划线进行连接,这是java的编码规则。
被定义为final的对象引用只能指向唯一一个对象,不可以将它指向其他对象,但是一个对象本身的值却是可以改变的,为了使一个常量真正做到不可更改,可以将常量声明为static final。
public class FinalDataTest{
final int VALUE_ONE=6; //final成员变量不可更改
final int BLANK_FINALVALUE; //在声明final成员变量时没有赋值,称为空白final
public FianlDataTest(){
BLANK_FINALVALUE=8; //在构造方法中为空白final赋值
}
int doIt(final int x){ //设置final参数,不可以改变参数x的值
return x+1;
}
void doSomething(){
final int i=7; //局部变量定义为final,不可以改变i的值
}
}
在java中定义全局常量,通常使用public static final修饰,这样的常量只能在定义时被赋值。
import java.util.Random;
import static java.lang.System.out;
public class FinalStaticData{
private static Random rand = new Random();
private final int a1 = rand.nextInt(10);
private final int a2 = rand.nextInt(10);
public static void main(String[] args){
FinalStaticData fdata = new FinalStaticData();
out.println("重新实例化调用a1的值:"+fdata.a1);
out.println("重新实例化调用a2的值:"+fdata.a1);
FinalStaticData fdata2 = new FinalStaticData();
out.println("重新实例化调用a1的值:"+fdata2.a1);
out.println("重新实例化调用a2的值:"+fdata2.a1);
}
}
final类型可以防止子类修改该类的定义与实现方式。当父类中被定义为private final的方法似乎可以被子类覆盖(其实是生成一个新的方法),覆盖的条件如下:
class Parents{
public void doit3(){
System.out.println("父类.doit3()");
}
}
class Sub extends Parents{
public void doit3(){
System.out.println("子类.doit3()");
}
}
public class FinalMethod{
public static void main(String[] args){
Sub s = new Sub();
Parents p = s;
p.doit3();
}
}
输出结果是:子类.doit3()
覆盖的条件是:必须满足一个对象向上转型为它的基本类型并调用相同方法这样一个条件。
final类不允许任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为final形式。
final类怂的所有方法都被隐式设置为final形式,但是final类中的成员变量可以被定义为final或非final形式。