// blog: Java关键字final、static使用总结
final :
public class TestFinalClass{
//私有方法不被继承
private void f1(){
System.out.println("f1 方法 不被继承");
}
public void f2(){
System.out.println("f2 方法 可被继承");
}
public void f3(){
System.out.println("f3 方法 可被继承");
}
public final void f4(){
System.out.println("f4 方法 不被继承重写");
}
}
public class TestFinalClassSon extends TestFinalClass{
public void f2(){
System.out.println("test Final Class son method: f2");
}
public static void main(String args[]){
TestFinalClass tfc = new TestFinalClassSon();
//tfc.f1(); //父亲私有方法
tfc.f2();
tfc.f3();
tfc.f4();
}
}
public class TestFinalVarAndParam{
private final int a =1;
private final String str; //必须在初始化对象时赋值,默认null
public TestFinalVarAndParam(){
str = " 构造函数中初始化";
}
public void updateIntA(){
//a = 2; //更新错误】
// str = "运行时,赋值。"; //不能在方法里面赋值
System.out.println(str);
}
//测试final局部变量
public void testLocalVar(){
final String str ; //用时才初始化
final int a;
final int b = 2;
System.out.println(b);
str = " final str 局部变量";
System.out.println(str);
}
//测试final 参数变量
public void testClient(TestFinalVarAndParam tp){
//测试参数变量
Person p = new Person();
p.printName();
tp.testClassFinalParam(p);
p.printName();
}
public void testClassFinalParam(final Person person){
//person是final参数,不能被update 。但是 person的属性可以被改变。
person.updateName();
}
public static void main(String args[]){
TestFinalVarAndParam tp = new TestFinalVarAndParam();
tp.updateIntA();
//测试局部变量
tp.testLocalVar();
//调用 测试final参数 方法
tp.testClient(tp);
}
//内部类
class Person{
private String name;
public Person(){
name = "Mark";
}
public void updateName(){
name = "Marcs";
}
public void printName(){
System.out.println(name);
}
}
}
static:
public class TestStatic{
//全局变量
private static int i ;
//全局方法
public static void println(int i){
System.out.println(i);
}
//静态的代码块
static{
TestStatic.i = 1;
System.out.println(" static var i = " + i);
}
public static void main(String args[]){
// TestStatic
}
}
run.bat
@echo off
setlocal
set JAVA_HOME=D:/install/develop_tool/java/jdk1.6.0_11
set path=%JAVA_HOME%/bin
rem set CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
set CLASSPATH=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
rem javac TestStatic.java
java -verbose TestStatic
endlocal