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 ...
随机推荐
- Laravel5.8自定义函数存放位置
1. 创建文件 app/helpers.php <?php // 示例函数 function foo() { return "foo"; } 2. 修改项目 composer ...
- logging模块及日志框架
logging模块及日志框架 logging模块 一.导入方式 import logging 二.作用 写日志 三.模块功能 3.1 经常使用 # V1 import logging logging ...
- 如何将Numpy加速700倍?用 CuPy 呀
如何将Numpy加速700倍?用 CuPy 呀 作为 Python 语言的一个扩展程序库,Numpy 支持大量的维度数组与矩阵运算,为 Python 社区带来了很多帮助.借助于 Numpy,数据科学家 ...
- UEditor之斜线表头表格的定制
效果图: 图1: 图2:
- leetcode34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...
- 工具使用——VMware安装及使用
一.VMware的安装 本文使用VMware 14 pro,双击打开安装包,点击下一步: 选中我接受许可协议中的条款,点击下一步: 选择安装路径,点击下一步: 点击下一步: 点击下一步: 点击安装: ...
- Jmeter插件介绍
JMeterPlugin可以把JMeter生成的jtl文件做出很好的统计图,同时还支持机器的cpu.memory.swap.disk io和network的监控. 插件可分四类: 用于服务器性能监视的 ...
- 【CF461B】Appleman and Tree
题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,每个点有两种颜色(黑.白),现给出树上每个节点的颜色,求有多少种分割树的方式,使得分割出的每个联通块中有且仅有一个黑点. 题解:树形dp 由 ...
- 一个web应用的诞生(5)
下面把角色分为两种,普通用户和管理员用户,至少对于普通用户来说,直接修改DB是不可取的,要有用户注册的功能,下面就开始进行用户注册的开发. 用户表 首先要想好用户注册的时候需要提供什么信息:用户名.密 ...
- java课堂作业4
第一题 字符串加密问题 1.程序设计思想 读入字符串,然后获取其长度,利用charAt()获取每个位置字符并且对字符加3实现加密处理,并存入新字符串中.如果遇到xyz则减26存入. 2.程序流程图 3 ...