• 时间: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. 简单快速安装Apache+PHP+MySql服务环境(三)—— 下载安装phpmyadmin

    为了方便在Linux上操作mysql数据库,打算安装一个phpmyadmin,不过在下载安装的过程中出现了一些坑,特此记录. 1. 在官网上下载phpmyadmin https://files.php ...

  2. SQlL 中 where 1=1

    提升某种执行效率? 其实,1=1 是永恒成立的,意思无条件的,也就是说在SQL语句中有没有这个1=1都可以. 这个1=1常用于应用程序根据用户选择项的不同拼凑where条件时用的. 如:web界面查询 ...

  3. Linux执行source /etc/profile报错“:command not found”

    修改完 /etc/profile中的内容后,执行"立即生效"命令 "source /etc/profile"报错: :command not found :co ...

  4. 01.泛型Generic

    1. 基本了解 1.1 什么是泛型? 字面意思:不确定的类型 泛型常用:泛型方法,泛型类,泛型接口,泛型委托 1.2 泛型 T(熟悉) T 的作用,其实就是一个通用的容器,制造它的人开始不指定它是用来 ...

  5. 基于ifix组态软件研究控制按钮权限

    背景: 在前阵子做基于ifix生成电力监控平台时,遇到业主提出的一个需求.关于如何在控制弹窗中,点击相应的合分闸按钮时,优先弹出登录界面,当输入相应的有权限用户名和密码后,才能操作这一要求.后实现如下 ...

  6. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件

    精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文 ...

  7. JS的FileSaver在Chrome上保存失败

    在使用JavaSript的FileSaver保存文件时,IE11上好的,chrome上反没响应,不能保存文件.寻找了半天,最好发现是因为在FileSaver之外还有一个自定义的全局URL变量,把这个U ...

  8. 双非本科Android开发,如何逆袭拿到大厂 Offer?

    从2020年3月18日投出第一份暑期实习简历至今,已经过去400多天.我也尘埃落定,即将去CVTE做Android开发. 休息了很长时间,如今已经能够很平静地回首这段历程,写下这篇文,致敬曾经走过的漫 ...

  9. 删除EFI系统分区(ESP)后Windows无法启动,重建引导分区并修复启动的过程

    @ 目录 一.开机故障描述 二.工具: 三.什么是EFI系统分区 四.如何查看EFI系统分区 五.删除后如何重建系统分区 1.建立未分配空间 2.建立ESP分区 3.按下图,ESP分区的大小200M即 ...

  10. 基于SpringBoot的药店管理系统java药房管理系统(源码+数据库文件+文档)

    注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SpringBoot 前端技术:HTML+CSS+JavaScript+Bootstrap+jQue ...