类、构造函数、属性、堆和栈
来源:互联网 发布:java小游戏开发实例 编辑:程序博客网 时间:2024/06/09 17:01
一、类
1、类的定义类中的成员:数据成员和函数成员
数据成员:字段、常量和事件的成员
函数成员:方法、属性、构造方法和终结器(析构方法),运算符和索引器
(1)、类的字段和方法
字段的声明
访问修饰符 类型 字段名称;
方法的声明
访问修饰符 返回值类型 方法名称(参数)
{
方法体;
}
(2)、使用这个类
要在主函数中使用这个类,首先要先定义这个类的一个变量!
Person p1;
要是用这个p1需要初始化!
p1 = new Person();
然后才能给类中的字段赋值或使用类中的方法
(3)、set方法
在类中定义一个 public 的字段可能会被恶意赋值,所以一般都用 private;
class Vector3
{
private float x;
public void SetX(float x)
{
this.x = x;
}
}
要在主函数中给x赋值,就需要定义一个 public 的方法,this.x表示 private中的x
static void Main(string[] args)
{
Vector3 v1 = new Vector3;
v1.SetX(1);
}
在主函数中调用方法,在括号中赋值
二、构造函数
构造函数是用于初始化数据的函数!1、声明
声明基本的构造函数就是声明一个和所在类同名的方法,但没有返回值
public class MyClass{
public MyClass()
{
这个构造函数的函数体;
}
}
注意:当使用 new 创建类的时候,就会调用构造方法
一般使用构造方法进行初始化数据的一些操作
构造函数可以重载
不写构造函数时,编译器会提供一个默认的无参的构造函数,定义了就不提供
class Vector3
{
private float x;
private float y;
private float z;
public Vector3()
{
this.x = x;
this.y = y;
this.z = z;
}
}
定义一个构造函数为私有变量x,y,z初始化
static void Main(string[] args)
{
Vector3 v1 = new Vector3(1,1,1);
定义构造函数后就能直接在用 new 创建类的时候赋值;
三、属性
1、声明class Vector3
{
public int MyIntProp
{
get{return 100;}
set{Console.WriteLine(value);}
}
}
当取得属性的值时,就会调用属性中的get块,所以get块需要一个返回值
当给属性设置值时,就会调用属性中的set块,可以在set块中通过value访问设置的值
Vector3 v1 = new Vector3
v1.MyIntProp = 600;
int temp = v1.MyIntProp;
Console.WriteLine(temp);
输出结果:value = 600; temp = 100;
设置值调用set,设置多少,value就是多少。调用时返回get中的返回值
set 和 get 可以只存在一个
没有get块就不能取值 int temp = v1.MyIntProp; 就会报错
没有set块就不能给它赋值,v1.MyIntProp = 600; 会报它是只读的
2、用法
(1)、 可以通过属性访问会修改私有字段的值
private double x;
public double X 也可以叫做get set方法
{
get { return x; }
set { x = value; }
}
v1.X = 100;
Console.WriteLine(v1.X);
(2)、通过 set 在设置值前做一些校验的工作
private int age;
public int Age
{
set{
if(value >= 0)
{
age = value;
}
}
}
(3)、设置属性的只读和只写
private double x;
public double X
{
get { return x; }
private set { x = value; }
}
在 get 或 set 前单独加 private , private set 不能赋值,只读
private get 不返回值,只写
3、自动实现属性
private string name;
public string Name{get;set;}
编译器会自动给我们提供一个字段,来存储name
四、匿名类型
不指定对象的类型叫匿名类型关键字: var
使用 var 声明的变量,当初始化时,这个变量的类型就被创建下来,以后都不能改变!
var i = 1000; i现在就是 int 类型的,无法改变
五、程序运行时的内存区域:堆和栈
内存:堆空间 和 栈空间栈空间比较小,但是读取速度快
堆空间比较大,但是读取速度慢
1、栈(先进去的最后一个出!)
数据只能从栈的顶端插入和删除
把数据放入栈叫入栈 (push)
从栈顶删除数据叫出栈 (pop)
2、堆
堆是一块内存区域,堆里的数据能以任意顺序存入和移除
3、GC Garbage Collector 垃圾回收器
CLR的GC就是内存管理机制
4、值类型和引用类型
值类型(整数、bool、struct、char、小数)
引用类型(string 数组、自定义的类、内置的类)
值类型只需要一段单纯的内存,用于存储实际的数据(单独定义时放在栈中)
引用类型需要两端内存:(1)存储实际的数据,放在堆中
(2)是一个引用(地址),指向数据在堆中存放的位置
例子1:
string num1 = "siki";
string num2 = "monkey";
num1 = num2;
num1 = "add";
描述:
当两个引用类型的变量相互赋值时,其实改变的是它的引用地址!
把num2赋值给num1时,其实给的是一个地址,num1不在指向siki,指向monkey
给num1重新赋值add时,num1不指向monkey指向add
例子2:
Vector3 v = new Vector3();
v.x = 100;
v.y = 100;
v.z = 100;
vector3 v2 = new vector3();
v2.x = 200;
v2.y = 200;
v2.z = 200;
v2 = v;
v2.x = 300;
描述:
把v赋值给v2时,传递的是一个引用地址,v和v2都指向v中的堆空间中的数据
所以无论哪个对象修改值,都是同一个 ,所以v.x也等于300
阅读全文
0 0
- 类、构造函数、属性、堆和栈
- 重温堆和拷贝构造函数
- 拷贝构造函数和堆内存
- 函数的属性、方法和构造函数
- Javascript 的构造函数和constructor属性
- oc构造函数和@property属性
- javascript中构造函数和prototype属性
- Bean属性和构造函数参数(ref)
- 关于JavaScript中的构造函数和对象中的构造属性
- 堆和拷贝构造函数--深拷贝与浅拷贝,用于类型转换的构造函数
- 类和对象(字段=变量、方法=函数、方法重载、静态成员、属性、构造函数)
- Javascript 函数中的属性、方法和构造函数
- 属性,构造函数,枚举
- 属性、构造函数
- Lesson_for_java_day08--类的属性和方法、类的封装性、构造函数和this的使用
- 学习总结:拷贝构造函数、常量折叠、堆\栈
- Spring依赖属性注入和构造函数注入
- spring + maven 属性注入和构造函数注入(1)
- divcss写一个页面
- NOIP提高组2004 合并果子(优先队列排序)
- 数据结构总结
- ionic 上啦加载和下刷新
- DragGrid频道管理
- 类、构造函数、属性、堆和栈
- 【面试题】实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
- Linux学习笔记2
- 关于time_t要注意的一个问题
- GitHub上11月份最热门的Java项目
- 差评近一半,用 Python 分析胡歌的《猎场》到底值不值得看?
- ionic选项卡操作
- Android 弹幕的实现DanmakuFlameMaster
- hive数据的加载与导出