static JAVA
static 关键字:
使用static修饰的变量是类变量,属于该类本身,没有使用static修饰符的成员变量是实例变量,属于该类的实例。
由于同一个JVM内只对应一个Class对象,因此同一个JVM内的一个类的类变量只需要一块内存空间,但对应实例变量而言,该类每创建一次实例,就需要为实例变量分配一块内存空间.
实例变量的初始化时机:
1.定义实例变量时进行初始化;2,非静态初始化块中对实例变量指定初始值;3,构造器总对实例变量指定初始值。
非静态初始化块将先获得执行的机会,在构造器执行之前执行。
1 public class InitTest
2 {
3
4 public static void main(String[] args)
5 {
6 Cat cat = new Cat("Kitty",2);
7 System.out.println(cat);
8 Cat c2 = new Cat("Jatfield",3);
9 System.out.println(c2);
10 }
11 }
12
13 class Cat
14 {
15 String name;
16 int age;
17
18 public Cat(String name,int age)
19 {
20 System.out.println("执行构造器!");
21 this.name =name;
22 this.age= age;
23 }
24
25 //非静态初始化块总是在构造器执行之前获得执行。
26 {
27 System.out.println("执行非静态初始化块");
28 weight=2.0;
29 age =0;
30 //System.out.println("weight =:"+weight);
31 }
32
33 double weight = 2.3;
34 public String toString()
35 {
36 return "cat [name = "+name+" age = "+age+" ,weight = "+weight+"]";
37 }
38
39 }
运行:
执行非静态初始化块
执行构造器!
cat [name = Kitty age = 2 ,weight = 2.3]
执行非静态初始化块
执行构造器!
cat [name = Jatfield age = 3 ,weight = 2.3]
隐式调用和显式调用:
当调用某个类的构造器来创建JAVA对象时,系统总是会先调用父类的非静态初始化块进行初始化,这个调用是隐式执行的,而且父类的静态初始化块总是会先执行,接着会调用父类的一个或多个构造器执行初始化,这个调用既可以通过super显式调用,也可以隐式调用。
类的继承关系: Object <---Parent<----Mid<---- Sub
程序会按如下步骤进行初始化:
1),执行Object类的非静态初始化块(如果有的话)
2),隐式或显式调用Object类的一个或多个构造器进行初始化,
3),执行Parent累非静态初始化块(如果有的话)
4),隐式或显式调用Parent类的一个或者多个构造器进行初始化,
5),执行Mid类非静态初始化块(如果有的话)
6),隐式或显式调用Mid类的一个或多个构造器执行初始化,
7),执行Sub类非静态初始化块(if have)
8),隐式或显式调用Sub类的一个或多个构造器执行初始化。
只要在程序创建java对象,系统总会先调用最顶层父类的初始化操作,包括初始化块和构造器,然后依次向下调用所有父类的初始化操作,最终执行本类的初始化操作返回本类的实例。对于调用父类的哪个构造器进行初始化,则分:
1),子类构造器执行体的第一行代码使用super显式调用父类的 构造器,系统将根据super调用里出传入的实参列表来确定调用父类的哪个构造器;
2),子类构造器中使用this显式调用本类中重载的构造器,系统将根据this调用里传入的实参列表来确定本类的另一个构造器;
3),子类构造器中 既没有super 也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。
static JAVA的更多相关文章
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- java中的static关键词
以下来自:http://www.cnblogs.com/codc-5117/archive/2011/12/04/2275298.html Static基本规则: (1)一个类 ...
- Java中static的用法
static静态,作为修饰符,最初是由c引入,一开始static表示退出一个块后依然存在的局部变量.随后,static表示不能被其他文件访问的全局变量和函数.到了C++和java,static表示属于 ...
- Java基础知识强化02:import static 和 import
1.import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com..... ...
- java中static关键字的作用
java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...
- Java基础系列--static关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...
- Java关于static的作用
概述 只要是有学过Java的都一定知道static,也一定能多多少少说出一些作用和注意事项.如果已经对static了如指掌的请点击关闭按钮,看下去也只是浪费您宝贵时间而已.这篇随笔只是个人的习惯总结. ...
- Java高阶语法---static
背景:听说static Java高阶语法是挺进BAT必经之路. static: 静态static,很多时候会令我望文生义,但是get到了static最重要的一点,其他的理解都还ok. static最重 ...
- 再议Java中的static关键字
再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...
随机推荐
- ESP32-IDF安装并在VSCode上编译Hello World
ESP32-IDF安装 准备工作 安装python 3 安装方法参考链接:https://blog.csdn.net/hg_qry/article/details/106415252 安装git 安装 ...
- 基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验
1:PWM脉冲宽度调制 STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定 ...
- 数据结构知识总结(STL整理)
重要知识点 1.基础知识 #include<bits/stdc++.h> //万能头文件 #include< algorithm > //包含sort函数 运用sort实现多关 ...
- Go语言核心36讲(Go语言实战与应用五)--学习笔记
27 | 条件变量sync.Cond (上) 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论.实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用. 条件 ...
- [51nod1587]半现串
将s所有长度为d/2的子串放进ac自动机中,直接匹配就可以判定半现串了再对其做一个差分,询问一个前缀的半现串个数,在ac自动机上数位dp,f[i][j][0/1]表示走了i步(i位的字符串),走到节点 ...
- [cf1434E]A Convex Game
暴力求SG,结论:每一个序列的SG上限为$\sqrt{2\max a_{i}}+1$ 证明:将SG的转移看作一张DAG,归纳每一个点的SG值不超过其开始的最长路,显然成立 那么本题中最长路即在$a_{ ...
- RocketMq报错 Java HotSpot(TM) Server VM warning:
Java HotSpot(TM) Server VM warning: Using the DefNew young collector with the CMS collector is depre ...
- 状压DP详解+题目
介绍 状压dp其实就是将状态压缩成2进制来保存 其特征就是看起来有点像搜索,每个格子的状态只有1或0 ,是另一类非常典型的动态规划 举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述 ...
- x86汇编反编译到c语言之——(1)表达式求值及赋值语句
一. 反编译一种可能的实现方式 我们的目的是将多种平台的汇编如x86,ARM,6502反编译为c语言,所以实现时先将多种汇编转化为 特定虚拟机汇编语言,然后只需要将虚拟机汇编语言反编译为c语言.其中多 ...
- 记一次使用 SelectMany 的经历
最近在改造一个功能时为了减少循环的层数,于是想着将List列表映射为一个能直接使用颗粒大小的List列表,这样一层循环就可以解决问题. public class ConflictWordIte ...