Java静态、final、实例变量《Head First Java》笔记

tech2024-11-17  18

文章目录

写在前面01 | 题目Foo:通过编译。Foo2:编译失败。Foo3:编译失败。Foo4:编译成功。Foo5:编译成功。Foo6:编译成功。

写在前面

《Head First Java》数字与静态一章中,有如下练习题,特写此篇加深印象。

01 | 题目

请问下面哪个程序可以通过编译?

Foo:通过编译。

原因:非静态方法能够调用静态变量。public class Foo{ static int x; public void go(){ System.out.println(x); } public static void main(String[] args){ // Foo.go(); 静态方法不能引用非静态方法 } }

Foo2:编译失败。

原因:静态方法不能调用非静态变量。public class Foo2{ int x; public static void go(){ System.out.println(x); } public static void main(String[] args){ } }

Foo3:编译失败。

原因:非静态方法能够存取final变量,但是此题中final变量没有初始化,因此编译失败。

public class Foo3{ final int x; public void go(){ System.out.print(x); } public static void main(String[] args){} }

final变量初始化的两种方法:

声明时初始化public class Foo3{ final int x = 0; //初始化为0 public void go(){ System.out.print(x); } 在静态初始化程序中初始化:public class Foo3{ final int x ; static { //静态初始化程序 x = 0; } }

Foo4:编译成功。

原因:非静态方法中可以存取静态 static变量和final变量public class Foo4{ static final int x = 12; public void go(){ System.out.print(x); } }

Foo5:编译成功。

原因:非静态方法参数中的final变量能被该方法存取。public class Foo5{ static final int x = 12; //静态final变量, 相当于常数 public void go(final int x){ //方法形式参数, final变量 System.out.print(x); } public static void main(String[] args){ Foo5 foo = new Foo5(); foo.go(5); //传入5 } }

Foo6:编译成功。

原因:静态方法参数中的final变量能被该方法存取。public class Foo6{ int x = 12; public static void go(final int x){ System.out.println(x); } public static void main(String[] args){ //静态方法可以调用静态方法 Foo6 foo = new Foo6(); foo.go(5); } }
最新回复(0)