朋友面试被问到---静态构造函数
原文:朋友面试被问到---静态构造函数

事情是这样的

朋友是一个一年多经验的.Net开发人员

在面试新公司的时候,被面试官问到什么是"静态构造函数"

朋友回来告诉我,

"构造函数还有静态的吗,看来这次面试要黄了"

"对的,构造函数是有静态的啊,不过也难怪,很少人会用到,看来面试官是要看你的基础有多深啊!"

静态构造函数


我们知道,所有的静态成员,包括静态字段和静态方法,当程序运行遇到这些静态成员所在的类

在创建对象或者调用静态成员的时候,所有的静态成员会加载到内存的静态存储区,这个存储区

与栈、堆分开,所以我们可以直接用

类名.静态成员的方式对静态成员进行访问,不受对象控制.

同理.静态构造函数也是当程序运行到这个静态构造函数所在的类在创建对象或者调用静态成员的时候,这个静态构造函数就被"执行"

 1 //声明一个Person类
 2     class Person
 3     {
 4         static Person()
 5         {
 6             Console.WriteLine("这里是静态构造函数");
 7         }
 8         public Person()
 9         {
10             Console.WriteLine("这里是无参构造函数");
11         }
12     }

调用Main()方法

1 static void Main(string[] args)
2         {
3             Person p=new Person() ;
4
5             Console.ReadKey();
6         }

结果:


所以,静态构造函数是先于任何构造函数执行的

静态构造 函数不允许有访问修饰符如:public

那么,我们可以利用静态构造函数做什么呢?

1.利用静态构造函数对静态字段初始化,或调用静态方法

 1 //声明一个Person类
 2     class Person
 3     {
 4         private static readonly int age;
 5
 6         static Person()
 7         {
 8             age = 18;
 9             Console.WriteLine("这里是静态构造函数");
10             SayHi();
11         }
12         static void SayHi()
13         {
14             Console.WriteLine("你好,我是静态方法,年龄是"+age);
15         }
16     }

这里,将方法和字段私有化,外部不能直接用类名.  出来,所以很好的利用的静态构造函数的作用   (虽然也可以封装成一个公共方法来访问)

还是调用上面的Main()函数


2.利用静态构造函数实现单例模式

由于涉及设计模式,这里只介绍静态构造函数所发挥的作用,读者有兴趣可以自行查阅相关资料了解单例模式

 1 //声明一个Person类
 2     class Person
 3     {
 4         private static readonly Person per;
 5
 6         public static int age;
 7         static Person()
 8         {
 9             per = new Person();
10             Console.WriteLine("这里是静态构造函数");
11         }
12         private Person()
13         {
14             Console.WriteLine("这里是无参构造函数");
15         }
16     }

1 static void Main(string[] args)
2         {
3             Person.age=18 ;
4
5             Console.ReadKey();
6         }

结果:

①把默认的构造函数私有化private,因此外部不能再new出一个对象,若要创建对象,只能由自己创建自己

②为了触发静态构造函数来创建对象. 外部调用了一个静态字段,由此静态构造函数被触发

③由于静态构造函数只能被发动一次,所以创建的对象也只有一个

最后,如果我们要在外部访问这个被静态构造函数初始化的对象,那么我们可以在Person类中加入这个方法

1         public static Person GetInstance()
2         {
3             return per;
4         }


其实静态构造函数的用途并不广,我们不能为了用它而用它,

使用static之前要考虑清楚,因为它会提前占用系统资源,

虽说这里将静态构造函数,大家觉得可能对业务没什么帮助,的确

但是,我们更要做一名专业的程序员\软件工程师  起码被问到也可以自信地回答


本人对C#语法有浓厚的兴趣,欢迎大家关注我一起讨论C#语法

posted on 2014-08-30 22:24 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/3946996.html

朋友面试被问到---静态构造函数相关推荐

  1. java中的静态、动态代理模式以及Spring中的CgLib动态代理解读(面试必问)

    java中的静态.动态代理模式以及Spring中的CgLib动态代理解读(面试必问) 静态代理 动态代理 CgLib动态代理     基础知: 反射知识 代理(Proxy)是一种设计模式,提供了对目标 ...

  2. 谎言的重灾区 面试官问我有无男女朋友我该怎么回答

    前言 有个姑娘说最近面试被问到一个特别奇葩的问题.面试官现场问她,有没有男朋友? 面试结束后,她就和小伙伴们分享当时的心理活动: 是不是面试官看上她了?offer是不是就妥了? 虽说是个玩笑话,但是在 ...

  3. 谎言的重灾区!面试官问我有无男女朋友我该怎么回答!

    有个姑娘说最近面试被问到一个特别奇葩的问题.面试官现场问她,有没有男朋友? 面试结束后,她就和小伙伴们分享当时的心理活动: 是不是面试官看上她了?offer是不是就妥了? 虽说是个玩笑话,但是在面试过 ...

  4. 2020java面试必问,找不到工作你找我(一)

    Java 面试宝典 第一章 内容介绍 20 第二章 JavaSE 基础 21 一. Java 面向对象 21 1.面向对象都有哪些特性以及你对这些特性的理解 21 2.访问权限修饰符 public.p ...

  5. 看完946页“JAVA高级架构面试必问”,金九银十社招全拿下

    前言 我本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时 ...

  6. 大叔手记(10):别再让面试官问你单例

    大叔手记(10):别再让面试官问你单例(暨6种实现方式让你堵住面试官的嘴) ... 2012-2-19 09:03| 发布者: benben| 查看: 283| 评论: 0 摘要: 引子经常从Recr ...

  7. 面试官问:JS的继承

    原文作者若川,掘金链接:https://juejin.im/post/5c433e216fb9a049c15f841b 写于2019年2月20日,现在发到公众号声明原创,之前被<前端大全> ...

  8. servlet面试常问问题_50个Servlet面试问答

    servlet面试常问问题 Servlet是Java EE的一个非常重要的主题,所有Web应用程序框架(例如Spring和Struts)都建立在它之上. 这使servlet成为Java访谈中的热门话题 ...

  9. 面试常问问题: 剖析ArrayList源码还不会? 看这篇就够啦 !

    点击上方"java大数据修炼之道",选择"置顶公众号" 关键时刻,第一时间送达! 每晚9点,我们不见不散 每日英文 take control of your o ...

最新文章

  1. Aveva Marine C# 二次开发入门001
  2. 有点小激动-Index Condition Pushdown Optimization
  3. 【Python】吐槽SQLAlchemy
  4. php spl_autoload_register() 函数
  5. java程序员的发展之路和职业规划
  6. 定义一个泛型为String类型的List集合,统计该集合中每个字符 (注意,不是字符串)出现的次数。例如:集合中有”abc”、”bcd”两个元素, 程序最终输出结果为:
  7. 2020年计算机一级B押题,2021年全国计算机一级选择题真题押题.doc
  8. Python学习笔记之函数(四)
  9. 2014年5月30日
  10. 当汽车工业遇见 AI,开发者的时代到来
  11. 使用idea将本地项目上传至github及clone
  12. 【BZOJ1150】数据备份(堆/优先队列)
  13. 部署 - 前端部署https服务,并配置安全证书
  14. 基于Websocket协议的即时通讯系统设计与实现
  15. TIA protal与SCL从入门到精通(5)——函数终止跳转处理
  16. 一道关于SVM的机器学习作业题
  17. jquery引入外部CDN,失效后则引入本地jq库
  18. Chrome-设置鼠标手势
  19. 经验分享:计算机专业求职面试,这 5 句自我介绍模板记好了!
  20. 蓝桥杯嵌入式国赛模块训练之数码管

热门文章

  1. pytorch实战案例-手写数字分类-全链接模型——深度AI科普团队
  2. YOLO:实时目标检测
  3. 自动驾驶路径轨迹规划(三阶曲线spline)
  4. 公众号向特定用户主动推送消息_公众号助手——消息不仅可以群发,还不限制次数!...
  5. 好的领导应该是什么脾气
  6. Centos 系统添加/删除用户和用户组
  7. 00038oracle,ORACLE错误一览表
  8. SpringBoot官方提供的starter pom
  9. 「雕爷学编程」Arduino动手做(22)——8X8 LED点阵MAX7219屏
  10. Python 进阶 之 socket模块