private关键字:private(私有的),是一个权限修饰符,可以修饰成员变量,成员方法,而被private修饰的私有成员,只能在本类中访问,无法通过对象名.成员变量名=值来访问,除非我们提供公共的get,set方法来让它访问的这个成员变量
this关键字:可以将它看成类的一个对象,为什么会有它,因为我们定义的局部变量与成员变量同名时,name=name,就近原则匹配时就会导致输出的结果为Null,而使用this就可以区分this.name为成员变量,name为局部变量。this就相当于当前类的一个对象,谁调用这个方法,那么该方法中的this就代表谁
案例:private,私有后,外部类无法访问,所以我们要提供get,set公共方法,让外界可以访问
public class Student {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
//this 代表该类的引用,或者你认为是该类的一个对象,哪个调用这个方法,方法中的this就代表这个对象。this代表的是方法的调用者。
static关键字:static(静态的),被static修饰的变量我们称类变量,被static修饰的方法我们称为静态方法。而被static修饰的变量或者方法都会随着类的加载而加载,会优先于对象而存在,被类中的所有对象所共享,可以通过类名直接进行调用。
这里我们需要了解一下静态变量与成员变量的区别:
静态变量:属于类,是类变量,随着类的加载而加载,随类的消失而消失,可以通过类名直接调用 也可以通过对象调用但不推荐,在jdk1.7后静态变量存放在堆内存中
成员变量:属于对象,是实列变量,随着对象的创建而产生,随着对象的消失而消失,只能通过对象调用,不能通过类名调用,它存放在栈内存中
因为静态代码块是随着类的加载而加载的,所以静态中不能有this,因为this是随着对象的创建而存在的,静态比对象先存在。静态方法只能访问静态的成员变量和静态的成员方法,因为其他的还没有被加载,是访问不到的。
案例:
//写出下面程序的执行结果,如有错误,请指出错误原因
class Demo {
int x;
String s;
float f;
boolean[] b = new boolean[5];
public static void main(String[] args){
System.out.println(x);
System.out.println(s);
System.out.println(f);
System.out.println(b[2]);
}
}
/* 报错,因为主方法为static,在类加载时就会执行,就要输出x,s,f,与b[2],但是int x,String s,float f,数组b[2],定义时它们为成员变量,不是类变量,还没有被加载入内存,故而找不到会报错,可以将成员变量变为类变量,就不会报错*/
构造方法:
构造方法:创建对象,给对象中的成员进行初始化
特点是:方法名与类名相同,没有返回值,连void都没有
注意事项:如果我们没有给有参构造方法,系统会默认给一个无参构造方法,如果我们给了有参构造方法,系统就不会再给一个无参构造方法,如果要使用无参构造方法,就需要自己给出,赋值时候可以通过set方法,还可以通过构造方法赋值。构造方法没有返回值,不可以写return
public class Student {
private String name;
private int age;
//空参构造
public Student() {
}
//一个参数
public Student(String name) {
}
//两个参数
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}