成员变量

C++关键字static的用法

孤人 提交于 2020-01-14 08:52:07
转载: https://www.cnblogs.com/songdanzju/p/7422380.html 四个作用: 1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可) 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。 2.static的第二个作用是保持变量内容的持久。(static变量中的记忆功能和全局生存期) 存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见 PS:如果作为static局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。 3.static的第三个作用是默认初始化为0(static变量) 其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作

[Serializable]在C#中的作用-NET 中的对象序列化

瘦欲@ 提交于 2020-01-14 00:55:42
简介 序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进 行。例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化。以下各部分将探讨 .NET 框架提供的可靠的序列化机制,并着重介绍使您可以根据需要自定义序列化过程的一些重要功能。 持久存储 我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易 出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码, 以便将字段和属性保存至磁盘以及从磁盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。 公共语言运行时 (CLR) 管理对象在内存中的分布,.NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。对象通常用成员变量来存储对其他 实例的引用。类序列化后

面向对象练习题-第十三天

泄露秘密 提交于 2020-01-13 21:19:46
练习1(基础): 建立一个学生类,其中成员变量为学号、姓名、及三门课的成绩(数组),另建立一个包含主方法的类,定义2个学生类的对象 1.Student package com . hpe . java ; import java . util . Arrays ; /** * 建立一个学生类,其中成员变量为学号、姓名、及三门课的成绩(数组),另建立一个包含主方法的类,定义2个学生类的对象 * @author yang * */ public class Student { private int no ; private String name ; private double score [ ] ; public int getNo ( ) { return no ; } public void setNo ( int no ) { this . no = no ; } public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public double [ ] getScore ( ) { return score ; } public void setScore ( double [ ] score ) { this .

Java学习笔记

回眸只為那壹抹淺笑 提交于 2020-01-13 21:02:16
为什么JAVA文件中只能含有一个Public类?    java 程序是从一个 public 类的 main 函数开始执行的,(其实是main线程),就像 C 程序 是从 main() 函数开始执行一样。 只能有一个public 类是为了给类装载器提供方便。 一个 public 类只能定义在以它的类名为文件名的文件中。   java因强制要求类名(唯一的public类)和文件名统一,因此在引用其它类时无需显式声明。在编译时,编译器会根据类名去寻找同名文件。 java import package (不同与Python) import java.io.*;   package 的作用就是 c++ 的 namespace 的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到 ./aaa/bbb/ccc/ 这个目录。   import 是为了简化使用 package 之后的实例化的代码。假设 ./aaa/bbb/ccc/ 下的 A 类,假如没有 import,实例化A类为: new aaa.bbb.ccc.A(),使用 import aaa.bbb.ccc.A 后,就可以直接使用 new A() 了

反射初学

眉间皱痕 提交于 2020-01-13 18:45:02
目录 概述 获取字节码文件的三种方式: Class对象功能: 获取功能: 示例: Constructor:构造方法 示例: Method:成员方法 示例 案例 概述 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码。 反射:将类的各个组成部分封装为其他对象,这就是反射机制。 好处: 可以在 程序运行过程中 ,操作这些对象。 可以 解耦 ,提高程序的可扩展性。 Java代码在计算机中的三个阶段 获取字节码文件的三种方式: static Class<?> forName(String className) :将字节码文件加载进内存,返回Class对象。 多用于配置文件,将类名定义在配置文件中。读取文件,加载类。 类名.class:通过类名的属性 class获取。 多用于参数的传递。 对象.getClass():getClass()在Object类中定义着。 多用于对象的获取字节码的方式。 结论 :同一个字节码文件( * .class)在一次程序的运行过程中,只会被加载一次,不论通过哪一种方式获取 Class对象都是同一个。 示例: package com.my.reflect; import com.my.domain.Person; public class ReflectDemo1 { /* 获取Class对象的三种方式: 1.Class.forName("全类名");

转:C#[Serializable]在C#中的作用-NET 中的对象序列化

别说谁变了你拦得住时间么 提交于 2020-01-13 02:22:53
为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在 ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域。本文简要介绍了 Microsoft .NET 中使用的序列化。 一.简介 序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行。例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化。以下各部分将探讨 .NET 框架提供的可靠的序列化机制,并着重介绍使您可以根据需要自定义序列化过程的一些重要功能。 二.持久存储 我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂

Serializable序列化

☆樱花仙子☆ 提交于 2020-01-11 07:39:26
为什么要使用序列化?最重要的两个原因是: 将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。 例如,序列化可用于在 ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域。本文简要介绍了 Microsoft .NET 中使用的序列化。 一.简介 序列化是指 将对象实例的状态存储到存储媒体的过程。 在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行。例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化。以下各部分将探讨 .NET 框架提供的可靠的序列化机制,并着重介绍使您可以根据需要自定义序列化过程的一些重要功能。 二.持久存储 我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂

C/C++中的const、static、inline、friend、template、virtual、异常机制等特性

徘徊边缘 提交于 2020-01-11 07:16:46
一、const const关键字的作用 (1)作用: 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值; 4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。 const修饰变量 变量的值不能改变 const修饰指针 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量 指针常量:不能通过指针来修改变量的值。 常量指针:一直指向该变量,不能给该指针赋予其他地址 函数中使用const const修饰函数参数 表示参数不可变 若参数为引用,可以增加效率 const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效 const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响

java07 类与对象&封装&构造方法

大憨熊 提交于 2020-01-11 02:01:56
1.类与对象 1.1面向对象的特点 面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即 封装、继承和多态 。 1.2 类和对象 什么是类 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物。 现实中,描述一类事物: 属性:就是该事物的状态信息。 行为:就是该事物能够做什么。 举例:小猫。 属性:名字、体重、年龄、颜色。 行为:走、跑、叫。 什么是对象 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。 现实中,一类事物的一个实例:一只小猫。 举例:一只小猫。 属性:tom、5kg、2 years、yellow。 行为:溜墙根走、蹦跶的跑、喵喵叫。 类与对象的关系 类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。 1.3 类的定义 类的定义格式 public class ClassName { //成员变量 //成员方法 } 定义类 :就是定义类的成员,包括成员变量和成员方法。 成员变量 :和以前定义变量几乎是一样的。只不过位置发生了改变。 在类中,方法外。 成员方法 :和以前定义方法几乎是一样的。只不过把static去掉

设计模式@第7章:原型模式

浪尽此生 提交于 2020-01-10 22:49:58
第7章:原型模式 克隆羊问题 现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10 只羊。 二、传统方式解决克隆羊问题 思路分析(图解) 看老师代码的演示 首先是 Sheep 实体类 package com.gjxaiou.prototype; public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { super(); this.name = name; this.age = age; this.color = color; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getColor() { return color; } public void setColor