java的静态代码块和类变量的隐式覆盖
静态代码块特点:随着类的加载执行一次,且仅会执行一次
作用:初始化类中的static修饰的变量(static修饰的变量称为类变量。类变量和静态代码块差不多,类变量仅会被初始化一次)
一、静态代码块写法:
static{ }
非静态代码块写法:
{ }
执行顺序:静态代码块->代码块->构造函数
二、那么我们来看一下,如果子类son继承父类people,那么这些代码块执行顺序
public class smile { public static class people{
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public people() {
System.out.println("父类构造函数");
}
}
public static class son extends people{
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类代码块");
}
public son() {
System.out.println("子类构造函数");
}
}
public static void main(String[] args) {
son a = new son();
} }
结果:
父类静态代码块
子类静态代码块
父类代码块
父类构造函数
子类代码块
子类构造函数
三、如果你不相信静态代码块只会执行一次你可以实例化两个son类
public class smile { public static class people{
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public people() {
System.out.println("父类构造函数");
}
}
public static class son extends people{
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类代码块");
}
public son() {
System.out.println("子类构造函数");
}
}
public static void main(String[] args) {
son a = new son();
son b = new son();
} }
/*
* 父类静态代码块
子类静态代码块
父类代码块
父类构造函数
子类代码块
子类构造函数
父类代码块
父类构造函数
子类代码块
子类构造函数
* */
四、类中变量的隐式覆盖:
public class smile { public static class people{
double money;
public people(){
money=10.5;
}
public double get_money() {
return money;
}
}
public static class human extends people{
int money;
public human(){
money=5;
}
}
public static void main(String[] args) {
human a = new human();
System.out.println("现在余额为:"+a.money);
System.out.println("现在余额为:"+a.get_money());
} }
你会发现直接通过实例对象a.money访问不到父类的money
java的静态代码块和类变量的隐式覆盖的更多相关文章
- Java 中静态代码块初始化问题测试
Java 中静态代码块初始化问题测试 原创 情况一:变量是 static final 修饰的"编译期常量",如 public static final String a = &qu ...
- Java的静态代码块是否会在类被加载时自动执行?
JAVA静态代码块会在类被加载时自动执行? 一.先看Java静态方法,静态变量 http://www.cnblogs.com/winterfells/p/7906078.html 静态代码块 在类中, ...
- java中静态代码块,非静态代码块,构造函数
关于静态代码块 静态代码块的写法: static { System.out.println("我是静态代码块"); } 静态代码块的特点: 1.执行优先级高于非静态的初始化块,它会 ...
- (转)java中静态代码块的用法 static用法详解
一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来 ...
- java中静态代码块的用法 static用法详解(转)
(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序 ...
- 【转】java中静态代码块的用法 static用法详解
原文网址:http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html (一)java 静态代码块 静态方法区别一般情况下,如 ...
- java中静态代码块的用法 static用法详解
(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序 ...
- Java误区: 静态代码块,当把类将被载入到自己主动运行?
JAVA静态代码块会在类被载入时自己主动运行? 非常多Java开发人员的思想,被这个思想深深的轮奸了n遍,传播这个错误思想的博客,在网上一堆,越来越多的人被轮奸. 如:http://blog.csdn ...
- [转载] java中静态代码块的用法 static用法详解
一.java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序 ...
随机推荐
- LeetCode232 用栈实现队列
使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. ...
- LeetCode235 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖 ...
- Linux学习笔记 | 配置Samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...
- mysql—make_set函数
使用格式:MAKE_SET(bits,str1,str2,-) 1 返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串.str1对应于位0,str2到第1位 ...
- firewalld原理和基础命令
firewalld防火墙 Firewalld是什么? Firewalld提供了支持网络.防火墙定义网络看见以及接口安全等级的动态防火墙管理工具
- ovs-ofctl命令
用于监控和管理 OpenFlow 交换机. 1. 交换机管理命令 查看交换机信息: ovs-ofctl show s1 查看交换机流表: ovs-ofctl dump-tables s1 查看端口信 ...
- Cisco发现协议
CDP Cisco Discovery Protocol: 思科发现协议 是一个提供关于直接相连的交换机.路由器和其它Cisco设备的综合信息的专有工具 CDP 能够发现直接相邻的设备而不管这些设备所 ...
- .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)
通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .N ...
- DDOS攻击方式总结以及免费DDOS攻击测试工具大合集
若有雷同或者不足之处,欢迎指正交流,谢谢! DoS(Denial Of Service)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提 ...
- Linux性能监测(系统监测统计命令详解)
通过这个命令,可以最简便的看出系统当前基本状态信息,这里面最有用是负载指标,如果你还想查看当前系统的CPU/内存以及相关的进程状态,可以使用TOP命令. TOP 通过TOP命令可以详细看出当前系统的C ...