黑马程序员-面向对象(stati、this关键字)

本文深入探讨了ASP.NET、Android、iOS开发及.NET培训的相关技术细节,包括this关键字的使用和static特性的应用。通过实例代码解释了构造函数中的this关键字作用与次序规则,以及static成员的特性、使用方法与注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

this关键字的使用

 

代码示例: 

Person(String name)
{
//this();
this.name =name;
}
Person(String name,int age)
{
//this(name);
//this.name = name;
this.age = age;
}


 

Person(String name,int age)这个构造函数中,已经包含了

Person(String name)的功能,即给对象赋值,所以可以直接在Person(Stringname,int age)中用thisname;代替

但是有一点需要注意的的是

this(name);   this.name= name; 的先后次序,如果把this(name);写在 this.name= name; 的后面,编译会不通过。

那为什么会这样?

其实这里面this的使用有一个原则,this只能放在构造函数的的第一行,只执行一次,如果在一个初始化的里面还存在另外一个构造函数的初始化,那么必须先执行完另一个的初始化,然后再执行本构造函数的初始化。

 

static的特点和用法

用法:

static是一个修饰符,用于修饰成员(成员变量或成员函数)

当这个成员被静态修饰之后,就多了一个调用方式,除了可以被类调用外,还可以被类名直接调用

特点:

1):随着类的加载而加载,也就是说当我们使用这个含有被静态修饰过的成员的类的时候

(这个时候还没有new这个创建对象),这个static int app;就已经存在了,不同于类中其他的成员变量存在于堆内存中,这个静态的变量不在堆内存当中,而是存在一个全局数据区,相当于另一个内存空间,到目前为止,一共接触了三个内存空间,1:栈内存 2:堆内存 3:数据共享区

2):优先于对象存在,如同 1.所讲,在还没有创建对象的时候,这个静态成员变量已经存在于数据共享区了

3):被所有对象所共享,数据共享区换个说法就是全局共享区,所有对象都能够访问

4):可以直接被类名调用,举个例子

class Person{
static int country = CN;
.....
.....
}
Person p1 = new Person();


 

那么此时可以通过对象名调用country访问属性外,还可以通过类名,即:Person.country

附:java中常用的内存区域

栈内存空间:保存所有对象的名称(即引用的堆内存空间地址)

堆内存空间:保存每个对象的具体属性内容

全局数据区:保存static属性内容

全局代码区:保存所有方法的定义

静态的使用注意事项

因为静态优先于对象存在.静态方法中更不可以出现this

静态方法中,只能调用静态成员(成员变量,成员函数)

这个该如何理解呢!要理解内存

静态方法存在于全局数据区,这里面的成员全部都是优先于对象存在的,而非静态成员,必须要创建对象才会在堆内存中,如果允许静态方法调用非静态成员,那么编译会报错,因为有可能该成员还没被初始化,不存在于内存当中。

而在非静态方法中,则没有限制,静态成员和非静态成员都可以调用

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.youkuaiyun.com 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值