java中的static,private,this关键字

static关键字
特点:

  • 随着类的加载而加载(不需要创建对象,内存就开辟了)
  • 优先于对象存在
  • 被类中的所有对象共享(也就是说如果某个成员变量在被所有对象共享时,那么它就应该定义为静态的)
  • 静态变量存储在方法区内存中的静态区

通过类名调用,不需要创建对象。当然也是可以通过对象名调用不建议。
注意事项

  • List item在静态方法中是没有this关键字的,静态是随着类的加载而加载,this是随着对象的创建而存在,静态比对象现存在。
  • 静态方法只能访问静态的成员变量和静态的成员方法。(静态的只能访问静态的,非静态可以访问静态的也可以访问非静态的)

静态变量和成员变量的区别

  • 所属不同
       静态变量是属于类,所以也成为类变量
       成员变量属于对象,所以也成为实例变量(对象变量)

  • 内存中的位置不同
       静态变量存储在方法区内存的静态去
       成员变量存储在堆内存

  • 内存出现时间不同
       静态变量随着类的加载而加载,随着类的消失而消失
       成员变量随着对象的创建而存在,随着对象的消失而消失

  • 调用不同
       静态变量可以通过类名调用,也可以通过对象调用
       成员变量只能用过对象名调用


package org.westos.demo5;

public class Person {
    String name;
    static String country;
    public void show(){
        System.out.println(name+"........"+country);
    }
}

package org.westos.demo5;

public class Mytest {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.name = "小明";
        person1.country = "加拿大";
        person1.show();

        Person person2 = new Person();
        person2.name = "小花";
        //person2.country = "日本";
        person2.show();
        person2.country = "日本";

        person1.show();
        person2.show();
    }
}

运行结果为:

小明........加拿大
小花........加拿大
小明........日本
小花........日本

java中的static,private,this关键字

package org.westos.demo6;

public class Person {
    int a = 19;
    static int b =29;
    public static void show(){
        System.out.println("这是一个静态的show方法");
    }
}

package org.westos.demo6;

public class Mytest {
    public static void main(String[] args) {
        //静态变量直接通过类名调用
        Person.show();//静态方法直接用类名调用
        Person.b = 99;
        int c = Person.b;
        System.out.println(c);
        //通过对象名.共享变量名去访问共享变量
        Person person = new Person();
        System.out.println(person);
        person.b = 23;
        int d = person.b;
        person.show();
        System.out.println(d);

    }
}

运行结果为:

这是一个静态的show方法
99
[email protected]
这是一个静态的show方法
23

private关键字及其特点
     private是一个权限修饰符,可以修饰成员变量和成员属性,被修饰的成员只能在本类中被访问。
private常见的用法
     用private来修饰成员变量
     提供对应的**getxxx()和setxxx()**来设置成员变量和获取成员变量。
this关键字机及其应用
     当成员变量与局部变量相同的时候,就会导致局部变量隐藏了成员变量的问题,用了this就可以解决这个问题。

this关键字的特点
     this是当前类的对象引用,它代表当前类的一个对象,谁调用这个方法,那么该方法内部的this就代表谁。
this用来解决局部变量隐藏成员变量的问题。

//private 和this的用法
package org.westos.demo4;

public class Student {
    private String name;
    int age;
    double weight;

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

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public int calc(int a, int b){
        return a+b;
    }
    public void sleep(){
        System.out.println("sleep");
    }
}

package org.westos.demo4;

public class Mytest {
    public static void main(String[] args) {
        Student student = new Student();
        student.setAge(12);
        student.setName("小花");
        student.setWeight(51.1);
        int a = student.getAge();
        System.out.println(a);
        System.out.println(student.getName());
        System.out.println(student.getWeight());
        System.out.println(student.calc(12, 23));
        student.sleep();
    }
}

运行结果为:
12 小花 51.1 35 sleep在student 类中如果对name进行赋值的时候不适用this.name = name;那么在给name赋值为“小花”的时候显示的是null.这是因为局部变量隐藏了成员变量。