• 时间: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. python调用接口方式

    python中调用API的几种方式: - urllib2- requests 一.调用别人的接口 案例1.urllib2 import urllib2, urllib github_url ='htt ...

  2. HSDB工具类使用探索jvm

    本文是引用https://club.perfma.com/article/2261053 有人问了个小问题,说: public class Test { static Test2 t1 = new T ...

  3. 版本号是通过import合并而来的,不是继承来的

  4. GitHub秘钥(SSH Key)

    一.公钥的作用 公钥一般给服务器,别人权限中加入我给的公钥,当我们从远地仓库中下载项目(git clone xxx)的时 那个服务器通过他的绑定的公钥来匹配我的私钥,如果匹配,则就可以正常下载,如果不 ...

  5. centos 服务

    1,开机开启服务 #  chkconfig vsftpd on

  6. React Hooks的理解

    一.是什么 Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使 ...

  7. js--class类、super和estends关键词的学习笔记

    前言 JavaScript 语言在ES6中引入了 class 这一个关键字,在学习面试的中,经常会遇到面试官问到谈一下你对 ES6 中class的认识,同时我们的代码中如何去使用这个关键字,使用这个关 ...

  8. Java 在Word中创建多级项目符号列表和编号列表

    本文分享通过Java程序代码在Word中创建多级项目符号列表和编号列表的方法.程序运行环境如下: IntelliJ IDEA 2018(JDK 1.8.0) Word 2013 Word Jar包:F ...

  9. laod

    https://iiio.io/download/20170120/ https://laod.cn/hosts/2017-google-hosts.html Copyright (c) 老D博客:h ...

  10. 2020年最新阿里、字节、腾讯、京东等一线大厂高频面试(Android岗)真题合集,面试轻松无压力

    本文涵盖了阿里巴巴.腾讯.字节跳动.京东.华为等大厂的Android面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行发展的标杆,很多公司的面试官同样会研 ...