• 时间: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. Springboot+Mybatis+小程序

    思维导图: 项目效果图 一览界面: 新增界面:

  2. python3中文件/IO编程

    python3的文件操作可谓是我见过所有语言中最舒服的,那我们来一起看一下py3中的文件操作. 1:文件的打开方式有以下几种: 注:以上图表参考菜鸟教程 2:定位读写文件  f = open(&quo ...

  3. Capture One 21 Pro 14.0.2.36中文版安装教程

    Capture One 21 Pro 14.0.2.36 for windows是一款由丹麦PHASE ONE飞思公司推出的.非常专业强大的图像处理编辑工具. 下载 Capture One 21 Pr ...

  4. 跳转页面携带数据方法 js

    跳转页面 代码 function returnParent() { var arrReturn = new Array(); var tSel = LAAccountsGrid.getSelNo(); ...

  5. Django GIS SQL注入漏洞(CVE-2020-9402)

    影响版本 Django 1.11.29之前的1.11.x版本.2.2.11之前的2.2.x版本和3.0.4之前的3.0.x版本中存在SQL注入漏洞 提示有admin.vuln.vuln2,3个页面,存 ...

  6. C++ //构造函数的分类及调用 //分类 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 //按照类型分类 普通构造 拷贝构造

    1 //构造函数的分类及调用 2 //分类 3 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 4 //按照类型分类 普通构造 拷贝构造 5 6 #include <iostream ...

  7. 我所学的c语言

    c语言结构 #include <stdio.h> int main(){    /* 我的第一个 C 程序 */    printf("Hello, World! \n" ...

  8. 安装MySQL详细说明

    安装MySQL详细说明 下载后得到zip压缩包 解压到自己的安装目录 添加环境变量 我的电脑->属性->高级->环境变量 选择PATH,在其后面添加:你的mysql安装文件下面的bi ...

  9. 定制bash命令提示符

    使用shell时经常要知道当前路径,如果将它写在提示符里很节省很多敲pwd的动作,方法是在启动文件(.bash_profile, .bashrc)里加上: export PS1="[\u@\ ...

  10. 过去,我买漫画看;现在,我用Python爬虫来看

    原标题:运用Python多线程爬虫下载漫画 前言: 以前,我都是买漫画书看的,那个时候没有电脑.今天,我到网上看了一下,发现网上提供漫画看,但是时时需要网络啊!为什么不将它下载下来呢!  1.怎样实现 ...