C# - 习题05_写出程序的输出结果o1.count
- 时间: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的更多相关文章
- C# - 习题02_写出程序的输出结果a.Fun()
时间:2017-08-23 整理:byzqy 题目:写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview1 4 { 5 pu ...
- 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 ...
- 【Java面试题】30 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。
题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次 思路如下: 子线程语主线程为互斥,可用SYNCHRONIZED.很容易想 ...
- 设计四个线程,其中两个线程每次对j增加1,另外两个线程对j每次减1,写出程序
/* * 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.写出程序. */ public class ThreadTest { private int j; public sta ...
- 设计四个线程,当中共两个线程每次对j添加1,另外两个线程每次对j降低1。循环100次,写出程序。
package cn.usst.DataTest6; /** * 设计四个线程,当中共两个线程每次对j添加1,另外两个线程每次对j降低1.循环100次,写出程序. * @ * */ public cl ...
- 设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 。写出程序。
题目:设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 .写出程序. 代码实现 public class ThreadTest{ private int j; c ...
- 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
本题并不难,实现方式有很多种,有很多种结构. 方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程. 代码: public class ManyThreads { ...
- 设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。写出程序。
先设计一个类处理加减这一行为: public class ManyThread { private int j = 0; public synchronized void inc(){ j++; Sy ...
- C# - 习题03_分析代码写出结果A.X、B.Y
时间:2017-08-23 整理:byzqy 题目:分析代码,写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview2 4 { ...
随机推荐
- IO流之节点流(字节流)
节点流可以分为:字节节点流和字符节点流 数据源直接到程序的成为节点流(低级流) 字节流 输入流----InputStream InputStream 是输入流的抽象父类,若创建对象,需new它的子类 ...
- CF1032G Chattering
CF1032G Chattering 题意 思路 对于每一个位置,它转移的范围是确定的. 对于一段可以走到的区间,我们可以求出区间中所有点再能走到区间范围. 于是这个就可以倍增进行转移. 如何快速求出 ...
- Odoo的附件大小限制
Odoo使用binary类型来保存附件数据,可以直接支持附件数据的上传.但是在实际使用中,有可能遇到附件文件大小超过限制的情况,如下图: 但是ERP定制过程中难免会遇到客户确实需要上传超大附件,那么怎 ...
- 搭建MySQL主从实现Django读写分离
一.MySQL主从搭建 主从配置原理: 主库写日志到 BinLog 从库开个 IO 线程读取主库的 BinLog 日志,并写入 RelayLog 再开一个 SQL 线程,读 RelayLog 日志,回 ...
- Maven国内仓库
由于国外的官方Maven仓库比较慢,所以寻找国内的代理仓库. 网上找了一些博客,内容都是一模一样,并且不贴代理官方的说明. 我在阿里云的Maven仓库找到了官方说明. 下面直接贴配置指南: 配置指南 ...
- ECMAScript 2020(ES11)新特性简介
目录 简介 动态imports import.meta export加强 BigInt matchAll() globalThis Promise.allSettled() ??操作符 ?.操作符 总 ...
- S7-200通过以太网模块,使用kepware与ifix建立通讯连接要点
在前阵子项目改造中,需要利用先前的S7-200 PLC与ifix进行通讯,故而,在做好上位机后,在现场实际测试了下.通过CP243-1以太网模块,顺利与KEPWARE建立连接,其中当然也有些要点要注意 ...
- sqli-labs靶机
第一关 1' 第二关 1 第三关 1') 第四关 1'') 第五关 1' + extractvalue报错注入 第六关 1 " + ...
- Nacos 自动更新配置不生效问题
版本 Nacos 1.4.1 SpringCloud 2020.0.3 解决方案 bootstrap.properties 增加应用名配置即可 spring.application.name=serv ...
- 自学linux——19.TFTP服务器的搭建
TFTP服务器的搭建 1.TFTP的认识 TFTP(Trivial File Transfer Protocol)简单文件传输协议,是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议,不需 ...