1、static变量:
首先我们要明确,java程序是一个一个类构成的,每创建一个类的对象,就会开辟一块以类为模版的内存空间,这个空间中包括成员变量与成员函数,那么类中静态成员变量与普通的成员变量的区别我们可以依据于上述原理,用图来进行表示。
假设有一个学生类如下
public class Student{
private String name; //学生的名字
public static String school; //学生的学校
public void display(){ //定义一个显示信息的方法
System.out.println(“学生姓名:”+name+”所在学校”+school);
}
}
当创建两个不同的对象时stu1和stu2时有:
我们知道,每个学生的姓名在对象中可以单独开辟一块内存,但是同一个学校的学生的学校名字可以同时用一块内存来存储。因此在这里用到了static关键字。这种用法有两种好处:一、节约内存,如果一个学校的人数比较多并且每个人都要开辟一块存储完全相同内容的内存空间的话那么就会早成浪费。二、便于维护,当该学校需要更改名字的时候只要该一个学生中school变量的名字就可以了,从途中可以看出,它们公用了一块内存空间。这就使得维护变得方便了许多。这便是static变量的优异性。三、在另一个类中要引用该类的static变量时只需要类名加上变量名即可,比如说Student.school这样的话使得不同的类之间沟通就变得方便许多。
2、this关键字:
对与java的初学者来说this关键字是一个比较难以理解的内容,我们通过一下两个例子来看
(1)public class Student{
private String name //定义一个名字变量
public void setName(String name){ //定义一个设置名字的方法
this.name = name;
}
}
在这里,由于类中变量同方法中的形参变量的名字相同,因此在赋值时必须区分哪一个是成员变量,哪一个是形参变量。而this在这里是指调用该方法(即setName())的对象,就是说我现在定义一个对象stu并调用setName()方法,此时this指的就是stu。
(2)public class Student{
private String name;
public Student(){ //无参构造器
this(“zhangsan”);
}
public Student(String name){ //重载构造器
this.name = name;
}
}
如果我们创建一个Student stu = new Student()时,调用的是无参构造器来创建的这一个对象,在构造器中他又会根据参数匹配原则调用另一个构造器。将name变量的初始值设为zhangsan。因此this关键字的第二个意思是指该类的构造器。在这里我们必须注意一点就是通过this调用构造器的话一定要将其放到该方法的第一行中。否则会报错。如
public Student(){
system.out.println(“将this放在第二行”);
this(“zhangsan”); //没有将其放在第一行是错误的
}
3、public 、protected、private
在eclipse中,文件的层次是project àpackageàclass,因此这几个关键字所修饰的变量以及方法的作用域可以用如下的表格来表示
| 不同project | 不同package | 不同class |
public | × | √ | √ |
protected | × | × | √ |
private | × | × | × |
我们可以看出他们的封装程度是依次加深的。还有两点需要注意,一是除了在接口中,其他类里如果没有规定这几个关键字,那么变量或者方法会有一个默认值,它是介于protected和private之间的,而在接口当中默认设置是public static的。二是如果在子类中重写父类的方法,那么该方法的可见程度一定要比父类中的方法高。否则编译时便会出错。
以上是我对这几个关键字的一个小结,如果想真正掌握的话还必须在写程序中多加使用。