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(){}; }
下面是程序的输出结果
------属性------
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修饰的变量一旦被赋值,则引用不能被修改),很明显不符合情理,形成了悖论... 家里的家具明明可以换的,不然坏了,不能换新的怎么用。。。
到此结束了,客官请回吧 :)
final修饰的类,其属性和方法默认是被final修饰的吗?的更多相关文章
- final可以修饰类、属性、方法
final可以修饰类.属性.方法. 当用final修饰类的时候,此类不可被继承,即final类没有子类.这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生. 当利用final修 ...
- Java 类、属性、方法修饰符 public、private、protected、default
Java 中修饰类修饰符:public .default (默认) Java 中修饰类中属性.方法修饰符:public.private.protected.default (默认) 通过 IDEA 创 ...
- <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性
设计类
- java基础学习总结六(对象与类、类的属性与方法)
一:面向过程与面向对象的区别 举例:一个人开门的动作,可以分解为开门,人进去,关门. 面向过程:人作为执行者,1:开门 2:进入 3:关门 面向对象:人作为指挥者,将开门,关门的动作都封装到门上 ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数 //字符串分割: Split var reg: TPerlRegEx; List: TStrings; ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(6): EscapeRegExChars 函数
Delphi 正则表达式之TPerlRegEx 类的属性与方法(6): EscapeRegExChars 函数 // EscapeRegExChars 函数可以自动为特殊字符加转义符号 \ var ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile、Study
Delphi 正则表达式之TPerlRegEx 类的属性与方法(5): Compile.Study // Compile.Study var reg: TPerlRegEx; begin re ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(4): Replace
Delphi 正则表达式之TPerlRegEx 类的属性与方法(4): Replace // Replace var reg: TPerlRegEx; begin reg := TPerlRe ...
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(3): Start、Stop
Delphi 正则表达式之TPerlRegEx 类的属性与方法(3): Start.Stop //设定搜索范围: Start.Stop var reg: TPerlRegEx; begin r ...
随机推荐
- 关于float的小奥秘
一. float 存储方式 1.1. float 占四个字节 1.2. 浮点数构成 1.2.1. 无论是单精度还是双精度在存储中都分为三个部分: <1>. 符号位(Sign) : 0代表正 ...
- 第一课 初识Linux(一)
Linux起源 创始人:李纳斯.托瓦兹 Linux简介: Linux是一套免费使用和自由传播的类UNIX操作系统:是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.Lin ...
- 一个Accecc_Token生成和缓存和读取类,微信/小程序开发必须学
Access_Token是调用微信和小程序各种接口的临时凭证,有效期2小时(7200秒),很多接口都需要调用access_token接口生成一个access_token的,例如微信支付,微信分享,公众 ...
- qt tableview里面添加控件
在QStyledItemDelegate的paint方法里面 void MyItemModelDeletage::paint(QPainter *painter, const QStyleOption ...
- 树莓派3b+下一些常用的命令(Debian下)
安装Mysqlsudo apt-get install mysql-server即可 注:第一次登陆是可能出现以下错误,则按顺序输入命令即可: ERROR 1698 (28000):Access de ...
- 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)
链接:https://ac.nowcoder.com/acm/contest/984/J 来源:牛客网 护城河 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- 2019长安大学ACM校赛网络同步赛 J Binary Number(组合数学+贪心)
链接:https://ac.nowcoder.com/acm/contest/897/J 来源:牛客网 Binary Number 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32 ...
- php字符串大小写转换
strtoupper().strtolower().ucfirst().ucfirst().ucwords().mb_strtoupper().mb_strtolower()和mb_convert_c ...
- TCP那些事儿
TCP 的那些事儿(上) TCP 的那些事儿(下)
- 用jquery控制表单提交
可以监听表单submit提交事件给form一个id 吧button的type为submit $(form的id).submit(function(){ if(window.confirm('你确定要取 ...