Static静态字段,静态方法,静态代码块

  简介

一些场景下会要求一个类的多个实例共享一个成员变量;有时候想定义一些不和具体对象关联、不需要new就调用的方法

举例:Console类的WriteLine,MessageBox的Show。这个时候就要使用静态。

所谓静态方法、静态成员是类的方法、类的成员,他不归属于任何一个对象。因此不用new出来,直接类型.静态方法()就能用了。

  特征

1、static变量不需要new就可以直接通过类名调用。static变量是共享的内存空间,非static变量则是对象隔离的。

2、static 方法中无法使用this关键字,因为static独立于对象存在,不是任何人的唯一。

3、static成员中只能访问static成员,不能直接访问非static成员。非static成员可以访问static成员。

  静态代码块

1. 示例

class MyTest
{
    static MyTest()
    {
        Console.WriteLine("静态代码块");
    }
    public MyTest()
    {
        Console.WriteLine("构造方法");
    }  
}
MyTest t1 = new MyTest();          
MyTest t2 = new MyTest();
 
2. 说明
1.静态代码块,在类第一次被使用的时候执行一次,只要用到类,哪怕没new对象(比如只是声明变量)也会被执行,且只执行一次。
2.静态代码块,在构造函数执行之前执行。
 
3. 试题
 public class MyJingTaiDaimaKuai
    {
        public static int i = test1();//最开始执行
        public int age = test2();//new的时候先执行成员变量的初始化,再执行构造函数
 
        static MyJingTaiDaimaKuai()
        {
            Console.WriteLine("静态代码块");//再执行
        }
        public MyJingTaiDaimaKuai()
        {
            Console.WriteLine("构造函数");
        }
 
        public static int test1()
        {
            Console.WriteLine("test1");
            return 3;
        }
 
        public static int test2()
        {
            Console.WriteLine("test2");
 
            return 333;
        }
    }
 
MyJingTaiDaimaKuai a1 = new MyJingTaiDaimaKuai();
Console.WriteLine(a1.age);
 
MyJingTaiDaimaKuai a2 = new MyJingTaiDaimaKuai();
Console.WriteLine(a2.age);
/* 对以上代码描述如下*/
/*
* 1.只要接触类,最先执行的是类中的静态的成员变量。
* 2.其次执行的是静态代码块。
* 3.静态成员变量的声明和定义仅在首次加载的时候执行一次。
* 4.“动态”成员变量在构造函数之前执行。
* 5.“动态”成员变量在每次实例化对象时候都执行。
*/

你不知道的Static的更多相关文章

  1. 你不知道的JavaScript--Item1 严格模式

    本文转自[阮一峰博客]:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 一.概述 除了正常运行模式,ECMAscr ...

  2. 你不知道的JavaScript(下卷) (Kyle Simpson 著)

    第一部分 起步上路 第1章 深入编程 1.1 代码 1.2 表达式 1.3 实践 1.3.1 输出 1.3.2 输入 1.4 运算符 1.5 值与类型 1.6 代码注释 1.7 变量 1.8 块 1. ...

  3. Java你不知道的那些事儿—Java隐藏特性(上)

    每种语言都很强大,不管你是像我一样的初学者还是有过N年项目经验的大神,总会有你不知道的东西.就其语言本身而言,比如Java,也许你用Java开发了好几年,对其可以说是烂熟于心,但你能保证Java所有的 ...

  4. 从头认识java-特辑-你不知道的main函数

    这一章节我们来讨论一下main函数. 对于这个函数大家都不陌生,并且都习以为常.可是当中有一些东西,还是值得我们去总结的. 1.普通的main package com.ray.test; public ...

  5. Java你不知道的那些事儿—Java隐藏特性

    转载自:http://www.cnblogs.com/lanxuezaipiao/p/3460373.html 每 种语言都很强大,不管你是像我一样的初学者还是有过N年项目经验的大神,总会有你不知道的 ...

  6. Java并发编程 - Runnbale、Future、Callable 你不知道的那点事(二)

    Java并发编程 - Runnbale.Future.Callable 你不知道的那点事(一)大致说明了一下 Runnable.Future.Callable 接口之间的关系,也说明了一些内部常用的方 ...

  7. Java优先队列PriorityQueue的各种打开方式以及一些你不知道的细节

    目录 Java优先队列PriorityQueue的各种打开方式以及一些你不知道的细节 优先队列的默认用法-从小到大排序 对String类用优先队列从大到小排序 通过自定义比较器对自定义的类进行从小到大 ...

  8. static,你还敢用吗?(二)

    为了压系统,昨天小组在测试环境模拟了一大批订单数据.今天上午查看记录的账单计息日志,发现了一大堆的MySqlException MySql.Data.MySqlClient.MySqlExceptio ...

  9. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

随机推荐

  1. 关于解决乱码问题的一点探索之二(涉及Unicode(utf-16)和GBK)

        在上篇日志中(链接),我们讨论了utf-8编码和GBK编码之间转化的乱码问题,这一篇我们讨论Unicode(utf-16编码方式)与GBK编码之间转换的乱码问题.     在Windows系统 ...

  2. 【beta】Scrum站立会议第5次....11.7

    小组名称:nice! 组长:李权 成员:于淼  刘芳芳韩媛媛 宫丽君 项目内容:约跑app(约吧) 时间:2016.11.7   12:00——12:30 地点:传媒西楼220室 本次对beta阶段的 ...

  3. 爬虫学习之-urlparse之urljoin()

    首先导入模块,用help查看相关文档 >>> from urlparse import urljoin >>> help(urljoin) Help on func ...

  4. 规则引擎之easyRules

    规则引擎听起来是蛮高深的一个词语,但透过现象看本质,Martin Fowler 有如下言: You can build a simple rules engine yourself. All you ...

  5. Django之ORM其他骚操作

    Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=None, ...

  6. shit Rap & mock api

    shit Rap & mock api https://thx.github.io/RAP/study.html https://github.com/thx/RAP/wiki/quick_g ...

  7. Using the command line to manage files on HDFS--转载

    原文地址:http://zh.hortonworks.com/hadoop-tutorial/using-commandline-manage-files-hdfs/ In this tutorial ...

  8. java利用poi读取excel异常问题

    最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直 ...

  9. QT 主窗口和子窗口相互切换示例

    QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...

  10. windows2016上如何通过攻击ETERNALBLUE获得meterpreter反弹

    windows2016上如何通过攻击ETERNALBLUE获得meterpreter反弹 译:by  backlion 0x00前言 当微软发布MS17-010漏洞的补丁时,该漏洞影响的范围是从Win ...