IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 头歌 C# 专题四 类与对象第5节 -> 正文阅读

[Java知识库]头歌 C# 专题四 类与对象第5节

?

第5关:static静态对象

  • 任务要求
  • 评论28

任务描述

大学校园内有各种各样的社团,一般每个社团都会不定期举办一些大型活动,活动的时间和地点可能会有所差异。例如某摄影社团2018年上半年活动表:

 
  1. 次数统计 时间 地点
  2. 1 2018-03-22 北京大学
  3. 2 2018-05-01 中国人民大学
  4. 3 2018-06-01 清华大学

本关任务:根据编程要求编写一个大型活动类,要求能够统计举办活动的次数。

相关知识

static

使用static修饰符声明一个静态成员。我们刚学习过类class,类是以对象为基础,而静态变量是与类类型同一级别的类型,不属于任何对象。

staitc修饰符可用于修饰类、方法、属性、操作符、事件或是构造函数,但不可用来修饰索引、Finalize()(即析构函数)等。

使用方法如下:

 
  1. static <修饰对象>

例如,我们使用static修饰类:

 
  1. staitc class Person{
  2. //类成员
  3. }

静态变量的声明和使用

使用static修饰类成员变量将不会被对象实例引用。相反,该成员变量可通过变量类型名称直接使用。 例如:

 
  1. class Person
  2. {
  3. public static string name; //使用static修饰
  4. public int age;
  5. }
  6. class myCaller {
  7. public static void Main() {
  8. Person p = new Person();
  9. p.age = 20; //此处仅能使用age
  10. }
  11. }

以上这段代码,在类myCaller中实例化类Person对象p,该对象无法调用成员变量name

使用类名称调用name: 具体如下代码:

 
  1. class Person
  2. {
  3. public static string name;
  4. public int age;
  5. }
  6. class myCaller {
  7. public static void Main() {
  8. Person p = new Person();
  9. p.age = 20; //此处仅能使用age
  10. Person.name = "Jackie"; //直接使用类型Person调用
  11. }
  12. }

由于name为静态变量,所以每一次赋值都会更改name的值,而不是像类Person实例化多个对象的属性值,类成员变量对应的对象属性值可互不相同,例如:

 
  1. class Person
  2. {
  3. public static string name;
  4. public int age;
  5. }
  6. class myCaller {
  7. public static void Main() {
  8. Person p1 = new Person(); //创建三个实例
  9. Person p2 = new Person();
  10. Person p3 = new Person();
  11. p1.age = 10; //三个实例互不相同
  12. p2.age = 20;
  13. p3.age = 30;
  14. Person.name = "Jackie"; //共同拥有属性name
  15. }
  16. }

在调用类myCaller中实例化三个对象p1p2p3,三个对象age属性分别为102030,而name有且仅有一个值"Jackie"

实际中,对于静态成员可以这样理解:我们定义一个类employee来表示公司员工,假定employee包含一个方法用来计算员工数量,包含一个属性用来保存员工数量。当我们使用empliyee实例化一个员工对象的时候,员工对象自身和计算、存储员工数量的方法、属性并无太大关联,相对的,该方法、属性更适用于创建一个新的公司company类。因此,在employee类中,该方法和属性被声明为静态类型最为合适。

我们需要注意:

  • 使用this无法引用使用static定义的成员变量。
  • 如果使用static修饰类,那么这个类的所有成员皆是静态的。
  • 类和静态类可以包含静态构造函数,静态的构造函数会在程序启动到实例化类之间调用。

一个实例

我们将员工类实现,如下:

 
  1. namespace J5
  2. {
  3. public class Emlployee {
  4. public string name; //员工属性:姓名
  5. public Emlployee(string name) {
  6. this.name = name;
  7. }
  8. public static int employeeNum; //非员工属性:员工数量
  9. public static void updateEmployeeNum() {
  10. employeeNum++;
  11. }
  12. }
  13. public class myCaller {
  14. public static void Main(string[] args) {
  15. Console.Write("Enter the new employee's name:");
  16. string name = Console.ReadLine();
  17. Emlployee e = new Emlployee(name);
  18. Console.Write("Enter the current number of employee:");
  19. string num = Console.ReadLine();
  20. Emlployee.employeeNum = Convert.ToInt32(num);//获取并更新员工数量
  21. Emlployee.updateEmployeeNum();
  22. Console.WriteLine("Name:"+e.name);
  23. Console.WriteLine("Number of Employee:"+Emlployee.employeeNum);
  24. }
  25. }
  26. }

该实例读取一个新员工对象姓名,然后通过函数updateEmployeeNum()对员工数加一更新员工数量,之终显示员工数量的最新状态。此段代码使用键盘输入员工名字及员工数量初始值。

运行结果如下:

特别实例

此段代码显示了静态变量之间赋值过程:

 
  1. namespace J5
  2. {
  3. class Test {
  4. static int x = y;
  5. static int y = 4;
  6. public static void Main() {
  7. Console.WriteLine(x);
  8. Console.WriteLine(y);
  9. x = 100;
  10. Console.WriteLine(x);
  11. Console.WriteLine(y);
  12. }
  13. }
  14. }

其中静态变量x声明的初始值为未定义变量y,运行结果如下:

结果表明,当变量x未被显示赋值之前,其值是未定义的。

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全大型活动类BigEvent,使用static关键字定义一个int类型静态变量counter,使之随着BigEvent类实例对象的创建而自增。
  • 程序运行正常,实际输出与测试中的预期输出相符。

测试说明

测试过程:

  • 平台将编译用户补全后的代码,并根据程序的输出判断程序是否正确。

以下是测试样例:

测试输入: 预期输出: 3


以中有足乐者,不知口体之奉不若人也。 --宋濂 开始你的任务吧,祝你成功!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace J5
{
    public class BigEvent
    {
        private string time;
        private string location;
        /********** Begin *********/
        public static int counter=0;
        public BigEvent()
        {
            counter++;
        }
        /********** End *********/
    }

    public class myCaller
    {
        public static void Main(string[] args)
        {
            BigEvent b1 = new BigEvent();
            BigEvent b2 = new BigEvent();
            BigEvent b3 = new BigEvent();

            Console.WriteLine(BigEvent.counter);
        }
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:27:55  更:2022-02-01 20:28:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:18:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码