静态的属性、方法等属于类而不是对象。

静态的方法能够由类直接调用,不须要将类实例化。

本篇主要说明:1、态的代码、成员变量要比构造方法先运行。

2、

子类的构造方法会默认去调用父类的不带參数的构造方法,假设父类不提供不带參数的构造方法,则子类的构造方法要显示使用super(param),去调用父类的带參数的构造方法

下面代码,能够将凝视掉的内容放开,或增改參数类型、參数定义的位置等,然后运行main看看打印结果,就会更加明确:静态的代码(块)、成员变量要比构造方法先运行。

/**
* author Ding Chengyun
* 2014-2-23
*/
package test; /**
* @author Ding Chengyun
* 2014-2-23
*/
public class StaticTest {
private static StaticTest instance = new StaticTest();
public static int i;
public static int j = 0;
private StaticTest() {
// System.out.println("static constract");
i++;
j++;
} // static {
// System.out.println("static block");
// i = 2;
// j = 3;
// }
public static StaticTest getInstance() {
return instance;
}
public static void main(String[] args) { StaticTest st = StaticTest.getInstance();
System.out.println(st.i + "," + st.j); //问:输出结果是什么
//答:输出结果是1,0.由于java静态成员变量的载入顺序是从类的開始从上到下顺序载入的。
//从main方法開始,然后运行到第一行代码private static StaticTest instance = new StaticTest();
//此时须要调用构造方法,在构造方法中给两个变量分别++。对于int类型的变量,默认初始化值都为0,因此,构造方法运行完成。i,j的值都为1
//继续运行到第二行代码public static int i;由于构造方法已经赋值过了。此处不再赋值操作。i=1
//运行第三行代码public static int j = 0;此处显示的给j赋值为0。因此覆盖了构造方法中的赋值1。此时,j=0.
//因此运行完成main方法,结果输出 1,0 //同理,假设将代码的书写顺序进行变化将public static int i; public static int j = 0;放到
//private static StaticTest instance = new StaticTest();之前。那么运行结果将会发生变化,
//以此类推,结果输出将是1,1 //假设添加一段静态代码块,如上被凝视的代码,运行结果类推,应为2,3,由于静态代码最后运行的是静态代码块。
//可是假设将静态代码块放到最上面、两句变量定义之后等不同位置,运行结果都会发生变化。
//然则,基本原则是不变的:静态成员变量运行顺序是从类的開始从上往下运行。
} } /**
* author Ding Chengyun
* 2014-2-23
*/
package test; /**
* @author Ding Chengyun
* 2014-2-23
*/
public class OrderStaticTest { /**
* @param args
*/
public static void main(String[] args) {
new Childs();//问题:输出什么?
// parent block
// child block 2
// child block 1
// parent constract
// child constract } } class Parents {
static String name = "hello";
public Parents() {
System.out.println("parent constract");
}
static {
System.out.println("parent block");
} } class Childs extends Parents{
static String childName = "world";
public Childs() {
System.out.println("child constract");
}
static {
System.out.println("child block 2");
}
static {
System.out.println("child block 1");
} }


java基础之static(静态)的更多相关文章

  1. Java 基础之 static 静态

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  2. Java基础系列--static关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...

  3. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量 ...

  4. java基础 -- 关键字static的用法

    static关键字的基本作用就是方便在没有创建对象的情况下调用类的方法/变量, static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static ...

  5. 【JAVA基础&Python】静态/非静态代码块

    /* * * static静态代码块: * 调用静态属性的时候 对应类里面的静态代码块就会被直接执行 * 注意: 只会执行一次,只能调用类内静态结构的(方法/属性) * 作用: 初始化类的属性 * * ...

  6. 【Java基础】static关键字相关

    static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用thi ...

  7. 【Java基础】 static

    static static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念.被 ...

  8. java基础-Map的静态初始化以及Map的遍历等.....................

    1.map的静态初始化,以及map遍历的几种方法: package com.cy.test; import java.util.HashMap; import java.util.Iterator; ...

  9. Java基础(十)--static关键字

    static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存 ...

随机推荐

  1. Oracle优化技巧

    现观察线上系统运行发现,线上某些业务查询存在等待时间长问题,后核查发现,部分问题出现在对数据库操作上Cost大部分时间,后根据网上各位前辈提供的优化技巧解决大部分问题,现写下本篇文章,一来巩固加深自己 ...

  2. 【redis】3.Spring 集成注解 redis 项目配置使用

    spring-data-redis  项目,配合 spring 特性并集成 Jedis 的一些命令和方法. 配置redis继承到spring管理项目,使用注解实现redis缓存功能. 参考:http: ...

  3. linux系统入门一些常用命令解析

    接触IT行业的时候,就使用了ubuntu系统做开发,那个时候是一头雾水,从习惯了window下的界面操作,到终端下的命令行操作,着实一开始让人很不习惯.但是没办法,那个时候公司每个人都用Ubuntu系 ...

  4. js数组去重与性能分析(时间复杂度很重要)

    随着js的深入和实际项目对性能的要求,算法的简单实现已经不能满足需要,在不同的应用场景下,时间复杂度很重要. 首先是创建数组与性能处理函数: // 保证时间差的明显程度,创建不同量级的数组,size为 ...

  5. 移动端二三事【三】:transform的矩阵(matrix)操作、transform操作函数及注意事项

    *每当在DOM浏览器中增加动态效果时,使用强大的transform和transition,总是很酸爽.抛开css,使用js操作transform还真的有点复杂,涉及到线性代数中的矩阵,但是js操作又不 ...

  6. Mysql索引整理总结

    一.索引概述 1. 简介 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过 ...

  7. Android-RemoteView-桌面小部件

    Android-RemoteView-桌面小部件 学习自 <Android开发艺术探索> https://developer.android.google.cn/guide/topics/ ...

  8. vue组件之间通信传值

    原文链接:https://blog.csdn.net/lander_xiong/article/details/79018737 我认为这位博主的这篇文章写的非常详细,通俗易懂, 我们这次的vue项目 ...

  9. 五校联考R1 Day2T2 矩阵matrix(容斥)

    题目链接 容易想到容斥,但是很恶心,因为要对行和列都容斥,然后行+列又要容斥.. 于是得到\(O(nm\log)\)的做法. 就有70分了: #include <cstdio> #incl ...

  10. android 获取系统默认路径

    Environment.getDataDirectory().getPath() : /dataEnvironment.getDownloadCacheDirectory().getPath()  : ...