0
点赞
收藏
分享

微信扫一扫

private关键字,this关键字,static关键字,及构造方法概念

紫荆峰 2022-03-30 阅读 154
java

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;
    }
}
举报

相关推荐

0 条评论