在Java中使用最终和非最终变量的无法访问的语句
Java中无法访问的语句是指那些语句集 在程序执行期间不会被执行的语句称为不可访问语句。由于以下原因,这些语句可能无法访问:
- 在他们面前有一个退货声明
- 在他们面前有一个无限循环
- 执行在他们面前被强行终止
示例 1
Java
// Java program to Illustrate Unreachable Statement
// Throwing Exception
// Using Final Variable
// Class 1
// Main class
class UnreachableUsingFinal {
// Declaring and initializing final variable
final int a = 14, b = 16;
// Method of this class
void compare()
{
// Checking if number is lesser or not
while (a < b) {
// First print statement
System.out.println(
"Hello i am in infinite loop");
// last print statement, in this case
// unreachable
System.out.println("Unreachable statement");
}
}
}
// Class 2
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating object of class 1 inside main()
UnreachableUsingFinal uuf
= new UnreachableUsingFinal();
// Calling the method of class 1
uuf.compare();
}
}
Java
// Java program to Illustrate Unreachable Statement
// Running Into Infinite Loop
// Using Final Variable
// Class 1
// Main class
class UnreachableUsingFinal {
// Declaring and initializing final variable
final int a = 14, b = 16;
// Method of this class
void compare()
{
// Checking if number is lesser or not
while (a < b) {
// First print statement
System.out.println(
"Hello i am in infinite loop");
}
}
}
// Class 2
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating object of class 1 inside main()
UnreachableUsingFinal uuf
= new UnreachableUsingFinal();
// Calling the method of class 1
uuf.compare();
}
}
Java
// Java program to Illustrate unreachable Statement
// Without using final variable
// Class 1
// Helper class
class UnreachableWithoutUsingFinal {
// Initialisation of variable
int a = 14, b = 16;
// Method of this class
void compare()
{
// Checking if two numbers are equal or not
while (a < b) {
// First print statement
System.out.println(
"Hello i am in infinite loop");
}
// Last print statement, in this case reachable
System.out.println("Unreachable statement");
}
}
// Class 2
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating object of class 1
UnreachableWithoutUsingFinal uwuf
= new UnreachableWithoutUsingFinal();
// Calling method of class 1
uwuf.compare();
}
}
输出:
输出说明:
这是因为语句'System.out.println(“Unreachable statement”)'永远不会被执行,并且Java不支持 unreachable 语句。使这些变量成为 final 也使它们成为常量变量,并且在Java或任何其他编程语言中,常量变量的值不能更改。因此,在程序的整个生命周期中,不会有任何条件退出 while 循环。
这反过来又使第二个语句无法访问,即 JVM 在程序生命周期内无法访问该语句。因此,它给出了“无法访问的语句”错误。在这里,如果从编码的角度来看,程序是正确的,但实际上 JVM 的想法是,如果在任何情况下都没有执行语句,那么使用该语句有什么需要呢?所以,尽量避免这种情况。
如果上面的syso语句被注释了怎么办?
极客你一定想知道如果它被注释掉或删除,那么预期的输出将会是什么。是的,您是对的,请考虑一下,因为所需的代码也将满足包含无法访问语句的条件。在程序中如下图所示:
示例 2
Java
// Java program to Illustrate Unreachable Statement
// Running Into Infinite Loop
// Using Final Variable
// Class 1
// Main class
class UnreachableUsingFinal {
// Declaring and initializing final variable
final int a = 14, b = 16;
// Method of this class
void compare()
{
// Checking if number is lesser or not
while (a < b) {
// First print statement
System.out.println(
"Hello i am in infinite loop");
}
}
}
// Class 2
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating object of class 1 inside main()
UnreachableUsingFinal uuf
= new UnreachableUsingFinal();
// Calling the method of class 1
uuf.compare();
}
}
输出:
如果 final 关键字本身被删除了怎么办?
示例 3
Java
// Java program to Illustrate unreachable Statement
// Without using final variable
// Class 1
// Helper class
class UnreachableWithoutUsingFinal {
// Initialisation of variable
int a = 14, b = 16;
// Method of this class
void compare()
{
// Checking if two numbers are equal or not
while (a < b) {
// First print statement
System.out.println(
"Hello i am in infinite loop");
}
// Last print statement, in this case reachable
System.out.println("Unreachable statement");
}
}
// Class 2
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating object of class 1
UnreachableWithoutUsingFinal uwuf
= new UnreachableWithoutUsingFinal();
// Calling method of class 1
uwuf.compare();
}
}
输出:
输出说明:
在这里,发生了一件有趣的事情。删除 final 关键字会打印输出。但在这种情况下,最后一个 print 语句也是不可访问的。
因此,它在程序中成为可能 变量被声明为非最终的。因此,可以在程序中更改这些变量的值。 JVM认为在任何时间点都有可能改变a和b的值,最后一条语句可能会被执行,所以第二个程序不会出错。这意味着第二个程序遇到了无限循环,但有可能(因为变量被声明为非最终的)循环可能会终止并且最后一条语句可能会被执行。
Note: In the second program, while executing, the output will be TLE as the while loop is not terminating.