用eclipse调试的时候无法看到final修饰的变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用eclipse调试的时候无法看到final修饰的变量相关的知识,希望对你有一定的参考价值。

图上这个parent肯定是有值得 但是watch的时候又显示不出来 这是为什么呢 怎么才能看到?

参考技术A 当你运行过去这一行的时候,在variables里可以看到,也可以把鼠标移到这个变量名上,这时候就能看到值了

final修饰的类,其属性和方法默认是被final修饰的吗?

在论坛上,看到一个问题,当然,各位聪明的客官想必已经知道问题是什么了,嘿嘿,没错就是文章的标题:final修饰的类,其属性和方法默认是被final修饰的吗?

老实说,刚开始看到这个问题的时候,有点懵...(现场捕获懵比一只:),嘻嘻),之前学习的语法什么的,隔了太久忘记了。。。既然忘记了,就写个程序进行测试下吧

嘻嘻,以下是测试的程序:(小程序中用到了反射机制,还没学习到的客官,可以先去了解下哈:) )

技术分享
/**
 * DateAndTime: 2016-12-13下午10:38:08
 */
package question;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 测试final修饰的类,其属性和方法是不是final的?
 * ------使用String类进行测试------
 * ---------利用反射机制获取属性和方法的修饰符,得到结果
 * @author Administrator
 *
 */
public class Question1 {
    
    public static void reflection(Class clazz) {

        System.out.println("------属性------");
        Field[] fields = clazz.getDeclaredFields();
        for(Field f : fields) {
            int iModifiers = f.getModifiers();
            String sModifiers = Modifier.toString(iModifiers);
            //打印所有属性的修饰符及属性名
            System.out.println(sModifiers+" "+f.getName());
        }
        
        System.out.println("------方法------");
        Method[] methods = clazz.getMethods();
        for(Method m: methods) {
            int iModifiers = m.getModifiers();
            String sModifiers = Modifier.toString(iModifiers);
            //打印所有方法修饰符及方法名
            System.out.println(sModifiers+" "+m.getName());
        }
    }
    
    public static void main(String[] args) {
        reflection(Person.class);
    }
    
}

final class Person {
    
    private String name;
    private String age;
    private final String idCard;
    
    Person(String idCard) {
        this.idCard = idCard;
    }
    
    public static void m(){};
    public void m1(String s){};
    public final void m2(){};
    
}
View Code

下面是程序的输出结果

------属性------
private name
private age
private final idCard
------方法------
public static m
public m1
public final m2
public final wait
public final native wait
public final wait
public equals
public toString
public native hashCode
public final native getClass
public final native notify
public final native notifyAll

结果显示,final修饰的类,其属性和方法不是被final修饰的。

final定义的类,其中的属性、方法不是final的。
其实,可以做个假设: 如果,final定义的类,其中的属性和方法默认是final的,那结合生活,举个例子
例如:
假设,房子 中 有一个 家具类 的对象作为属性(很合理哈...),现在假设,一旦住进了房子,以后不会搬家,那么这个
房子类就应该定义成final的,那么根据上面的假设:家具一旦被初始化后,也是不能更改指向的引用(家具一旦被确定后,就不能换新的)。

但是,如果说某天,家里的家具坏了,必须要换一个(很正常...),(换新家具,相当于变量引用了一个新对象,

而final修饰的变量一旦被赋值,则引用不能被修改),很明显不符合情理,形成了悖论... 家里的家具明明可以换的,不然坏了,不能换新的怎么用。。。

到此结束了,客官请回吧 :)





以上是关于用eclipse调试的时候无法看到final修饰的变量的主要内容,如果未能解决你的问题,请参考以下文章

final修饰的类,其属性和方法默认是被final修饰的吗?

用final修饰类,方法和变量的区别

在Java中,为什在定义常量中要加修饰符final?到底起啥作用呢,能不能不加?

final可以修饰类属性方法

通过Final修饰的String真的不可以修改嘛??

浅谈final修饰的变量