---------------------- 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)中用this(name);代替
但是有一点需要注意的的是:
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