• 时间:2017-08-24 整理:byzqy

题目:写出下列程序的输出结果:

//原题程序如下:

class Class1
{
private static int count = 0;
static Class1()
{
count++;
} public Class1()
{
count++;
}
} Class o1 = new Class1();
Class o2 = new Class2(); //请问,o1.count的值是多少?

将代码录入到 IDE(VisualStudio2015)中,将 o1.count 输出:

文件:Class1.cs

using System;

namespace Interview5
{
class Class1
{
static void Main(string[] args)
{
Class1 o1 = new Class1();
//Console.WriteLine(o1.count);
//编译报错:无法使用实例引用来访问成员"Class1.count";请改用类型名来限定它
Console.WriteLine("o1:count= " + count);
//输出结果为:2
Console.WriteLine("o1:Class1.count= " + Class1.count);
//输出结果为:2
Class1 o2 = new Class1();
Console.WriteLine(count);
//输出结果为:3 Class1 o3 = new Class1();
Console.WriteLine(count);
//输出结果为:4
Class1 o4 = new Class1();
Console.WriteLine(count);
//输出结果为:5
Console.ReadKey();
} private static int count = 0;
static Class1()
{
count++;
} public Class1()
{
count++;
}
}
}

输出结果如下:

考题意图猜测:

1、分别对 public 和 static 修饰的构造方法,判断实例化时使用的是哪一个创建的对象,那么这样的话,如果将其中一个的 count++ 改为 count-- 会怎么样?

2、考实例化多次,对 count 值的影响 o2 的 count 值会覆盖掉 o1 的 count 值?

验证猜想1:

将 static Class1 构造方法中的 count++ 改为 count-- :

using System;

namespace Interview5
{
class Class1
{
static void Main(string[] args)
{
Class1 o1 = new Class1();
Console.WriteLine("o1: " + count);
//输出结果为:0
Class1 o2 = new Class1();
Console.WriteLine("o2: " + count);
//输出结果为:1
Class1 o3 = new Class1();
Console.WriteLine("o3: " + count);
//输出结果为:2
Class1 o4 = new Class1();
Console.WriteLine("o4: " + count);
//输出结果为:3
Console.ReadKey();
} private static int count = 0;
static Class1()
{
count--;
//修改为:count--
} public Class1()
{
count++;
}
}
}

将 public Class1 构造方法中的 count++ 改为 count-- :

using System;

namespace Interview5
{
class Class1
{
static void Main(string[] args)
{
Class1 o1 = new Class1();
Console.WriteLine("o1: " + count);
//输出结果为:0
Class1 o2 = new Class1();
Console.WriteLine("o2: " + count);
//输出结果为:-1
Class1 o3 = new Class1();
Console.WriteLine("o3: " + count);
//输出结果为:-2
Class1 o4 = new Class1();
Console.WriteLine("o4: " + count);
//输出结果为:-3
Console.ReadKey();
} private static int count = 0;
static Class1()
{
count++;
} public Class1()
{
count--;
//修改为:count--
}
}
}

实验1:

using System;

namespace Interview5
{
class Class1
{
static void Main(string[] args)
{
Class1 o1 = new Class1();
Console.WriteLine("o1: " + count_a); //输出:1
Console.WriteLine("o1: " + count_b); //输出:1 Class1 o2 = new Class1();
Console.WriteLine("o2: " + count_a); //输出:1
Console.WriteLine("o2: " + count_b); //输出:2 Class1 o3 = new Class1();
Console.WriteLine("o3: " + count_a); //输出:1
Console.WriteLine("o3: " + count_b); //输出:3 Class1 o4 = new Class1();
Console.WriteLine("o4: " + count_a); //输出:1
Console.WriteLine("o4: " + count_b); //输出:4 Console.ReadKey();
} private static int count_a = 0;
private static int count_b = 0;
static Class1()
{
count_a++;
} public Class1()
{
count_b++;
}
}
}

实验2:

using System;

namespace Interview5
{
class Class1
{
static void Main(string[] args)
{
Class1 o1 = new Class1();
Console.WriteLine("o1: " + count_a); //输出:-1
Console.WriteLine("o1: " + count_b); //输出:-1 Class1 o2 = new Class1();
Console.WriteLine("o2: " + count_a); //输出:-1
Console.WriteLine("o2: " + count_b); //输出:-2 Class1 o3 = new Class1();
Console.WriteLine("o3: " + count_a); //输出:-1
Console.WriteLine("o3: " + count_b); //输出:-3 Class1 o4 = new Class1();
Console.WriteLine("o4: " + count_a); //输出:-1
Console.WriteLine("o4: " + count_b); //输出:-4 Console.ReadKey();
} private static int count_a = 0;
private static int count_b = 0;
static Class1()
{
count_a--;
} public Class1()
{
count_b--;
}
}
}

实验3:

C# - 习题05_写出程序的输出结果o1.count的更多相关文章

  1. C# - 习题02_写出程序的输出结果a.Fun()

    时间:2017-08-23 整理:byzqy 题目:写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview1 4 { 5 pu ...

  2. C# - 习题01_写出程序的输出结果a.Fun2(b)、b.Fun2(a)

    时间:2017-08-23 整理:byzqy 题目:请写出下列程式的结果: 文件:A.cs 1 using System; 2 3 namespace InterView 4 { 5 public c ...

  3. 【Java面试题】30 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。

    题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次 思路如下: 子线程语主线程为互斥,可用SYNCHRONIZED.很容易想 ...

  4. 设计四个线程,其中两个线程每次对j增加1,另外两个线程对j每次减1,写出程序

    /* * 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.写出程序. */ public class ThreadTest { private int j; public sta ...

  5. 设计四个线程,当中共两个线程每次对j添加1,另外两个线程每次对j降低1。循环100次,写出程序。

    package cn.usst.DataTest6; /** * 设计四个线程,当中共两个线程每次对j添加1,另外两个线程每次对j降低1.循环100次,写出程序. * @ * */ public cl ...

  6. 设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 。写出程序。

    题目:设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 .写出程序. 代码实现 public class ThreadTest{ private int j; c ...

  7. 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

    本题并不难,实现方式有很多种,有很多种结构. 方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程. 代码: public class ManyThreads { ...

  8. 设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序。

    先设计一个类处理加减这一行为: public class ManyThread { private int j = 0; public synchronized void inc(){ j++; Sy ...

  9. C# - 习题03_分析代码写出结果A.X、B.Y

    时间:2017-08-23 整理:byzqy 题目:分析代码,写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview2 4 { ...

随机推荐

  1. 【Java基础上】一、简述Java

    一.简述Java ​ Java是一种高级的面向对象的程序语言,在此处,不需要了解什么叫做面向对象,因为后面的文章中自然会谈到这方面的论述.那么,Java就是一个计算机的编程语言. 1.1 Java的历 ...

  2. Java逻辑运算符&与&&

    & 和&&的区别 && 短路与 ,一个条件不成立,跳出判断 & 与 , 全部判断 boolean b1 = false; int num = 9; if ...

  3. linux 之awk--格式化文本信息

    https://www.cnblogs.com/xudong-bupt/p/3721210.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常 ...

  4. 理清 UT、UTC、GMT和CST

    平时各种时间标准简写绕得不明不白,查一下整理在这里. IAT: International Atomic Time, 原子时.又称国际原子时,是一种通过原子钟得到的时间标准,原子钟是世界上已知最准确的 ...

  5. 工业互联网之微信小程序整体解决方案总结

    随着工业互联网的快速发展,以及微信小程序的成熟,将两者结合实现对工况数据的查看和存储方案变得简单.以下方式为本人尝试过的整体解决方案,可以顺利实现无缝对接. 1.采集方式 1.ifix/intouch ...

  6. 数据库建模、面向对象建模>从零开始学java系列

    目录 数据库建模 前置知识 使用PowerDesigner数据库建模设计 一对多CDM概念数据模型设计 多对多的PDM物理数据模型设计(针对mysql) PowerDesigner将不同的模型进行转换 ...

  7. 官宣 .NET MAUI 预览版 6

    最近,我们发布了.NET 多平台应用程序UI (MAUI)的最新进展. 在此版本中,我们全力支持Visual Studio 2022 预览版2.这也标志着我们首次将.NET MAUI 作为工作负载安装 ...

  8. Android面试中多说这么一句话,薪水直接涨5k

    小鱼同学最近很难受,明明获得了人人羡慕的大厂Offer,走在路上都能被熟人祝贺,学弟学妹争着抢着求他进行经验分享. 但有件事一直让他很介意.其实这件事起因很简单,是关于这份Offer的薪资问题,面试的 ...

  9. small-spring 代码贡献者3个月,敢说精通Spring了,分享我的总结!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.为什么手写Spring 这个与我们码农朝夕相处的 Spring,就像睡在你身边的媳妇,你知 ...

  10. 【笔记】F1 score

    F1 score 关于精准率和召回率 精准率和召回率可以很好的评价对于数据极度偏斜的二分类问题的算法,有个问题,毕竟是两个指标,有的时候这两个指标也会产生差异,对于不同的算法,精准率可能高一些,召回率 ...