this关键字
为什么用this?
区分局部变量和成员变量同名的情况。
用this标识的是成员变量。
例:
public void setName(String name)
{
this.name = name;
}
this到底是指谁?
this其实就代表对象,代表哪个对象呢?
哪个对象调用了this所在的函数。this就指向哪个对象。
(this就代表着当前这个对象)
static关键字
特点:
1,静态的数据被对象所共享。
2,它优先于对象加载并存在。随着类的加载而加载。
3,静态的数据多了一种调用方式:可以直接被类名所调用。
既然静态调用这么方便,是不是可以让所有的成员变量变成静态的呢?
不行,因为数据中有些是对象共享的数据需要静态化,节省内存空间,严谨。
有些数据是对象特有的数据,这些存储到对象中。
这也是成员变量是否要静态的依据!
静态变量和成员变量的区别?
名称(所属):
静态变量所属于类,也称为 类变量。
成员变量所属于对象,也称为 实例变量。
内存位置:
静态变量存储于方法区中的静态区中。
成员变量存储于堆内存的对象中。
加载先后:
静态变量随着类的加载而加载,随着类的消失而消失。
成员变量随着对象的加载而加载,随着对象的消失而消失。
静态方法:
1,静态方法只能访问静态成员,不能直接访问非静态成员。非静态的方法可以访问静态和非静态。
原因:就是加载的先后顺序问题。先加载的不能访问后加载。
2,静态方法中不可以出现this,super关键字。
什么时候方法静态?
当方法中如果没有访问对象的特有数据,或者说没有调用过非静态的内容。该方法就静态化。虽然不静态也可以使用,但是创建调用它的对象没有意义。
例:
public class StaticDemo
{
public static void main(String[] args)
{
Person p=new Person();
P.show();
Person.sleep();
}
}
class Person
{
int age;
String name;
public void show()
{
System.out.println("name="+this.name+",age="+this.age);
}
public static void sleep()//sleep()并没有使用对象中的数据,该对象的建立没有意义,此时就可以用静态修饰
{
System.out.println("huhu");
}
}
fina关键字
1,final修饰类,函数,变量。
2,final修饰的类不可以被继承。
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量,只能被赋值一次。
程序中不变的数据都用final修饰,提供程序的阅读性。