第十一章 static和this关键字
1.1 static引入
static:
1、static翻译为“静态的”
2、所有static关键字修饰的都是类相关的,类级别的。
3、所有static修饰的,都是采用“类名.”的方式访问。
4、static修饰的变量:静态变量
5、static修饰的方法:静态方法
变量的分类:
变量根据声明的位置进行划分:
在方法体当中声明的变量叫做:局部变量。
在方法体外声明的变量叫做:成员变量。
成员变量又可分为:
实例变量
静态变量
class VarTest{
// 以下实例的,都是对象相关的,访问时采用“引用.”的方式访问,需要先new对象。
// 实例相关的,必须先有对象,才能访问,可能会出现空指针异常。
// 成员变量中的实例变量
int i;
// 实例方法
public void m2(){
// 局部变量
int x = 200;
}
// 以下静态的,都是类相关的,访问时采用“类名.”的方法访问,不需要new对象。
// 不需要对象的参与即可访问,没有空指针异常的发生。
// 成员变量中的静态变量
static int k;
// 静态方法
public static void m1(){
// 局部变量
int x = 100;
}
}
1.2 什么时候变量定义为静态变量
/*
什么时候变量声明为实例的,什么时候声明为静态的?
如果这个类型的所有对象的某个属性值都是一样的,不建议定义实例变量,浪费内存空间。建议定义为类级别特征,定义为静态变量,在方法区中只保留一份,节省内存开销。
*/
/*
public class StaticTest02{
public static void main(String[] args){
Chinese c1 = new Chinese("111111", "张三", "中国");
System.out.println(c1.idCard);
System.out.println(c1.name);
System.out.println(c1.country);
Chinese c2 = new Chinese("222222", "李四", "中国");
System.out.println(c2.idCard);
System.out.println(c2.name);
System.out.println(c2.country);
}
}
// 定义一个类:中国人
class Chinese{
// 身份证号
// 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。
String idCard;
// 姓名
// 姓名也是一个人一个姓名,姓名也应该是实例变量。
String name;
// 国籍
// 对于“中国人”这个类来说,国籍都是“中国”,不会随着对象的改变而改变。
// 显然国籍并不是对象级别的特征。
// 国籍属于整个类的特征,整个族的特征。
// 假设声明为实例变量,内存图是怎样的?
// 假设声明为静态变量,内存图又是怎样的呢?
String country;
// 无参
public Chiense(){
}
// 有参
public Chinese(String s1, String s2, String s3){
idCard = s1;
name = s2;
country = s3;
}
}
*/
public class StaticTest02{
public static void main(String[] args){
/*
Chinese c1 = new Chinese("111111", "张三", "中国");
System.out.println(c1.idCard);
System.out.println(c1.name);
System.out.println(c1.country);
Chinese c2 = new Chinese("222222", "李四", "中国");
System.out.println(c2.idCard);
System.out.println(c2.name);
System.out.println(c2.country);
*/
Chinese c1 = new Chinese("111111", "张三");
// 访问中国人的国籍
// 静态变量应该使用“类名.”的方式访问
System.out.println(c1.idCard);