Java中的this,final,static关键字

最近写程序发现关键字对程序影响很大,希望对大家有所帮助。

1,this关键字:this关键字只能在方法内部使用,有三种使用方式

     第一种,返回对当前对象的引用

public class Person {
     .......
      public Person getPerson(){
          ......
            return this;
      }
}

      第二种情况,利用this去调用方法或者域,表示调用该方法的对象,此时,this等同于其他引用对象
public class Person{
       private int i;
       Persorn(int i){
              this.i = i;
       }
}

       第三种情况,   利用this在构造器中调用构造器方法,
public class Person{
      
      private int i;
      private String s;
       Person(int i){
           this.i = i;
        }
       Person(int i,String s){
            this(i);
            this.s = s;
      }
}

2,final关键字,可用来修饰域,方法,和类

   第一种情况,final修饰类,表示最终类,不可以被继承,final类里的方法默认为final方法,不可以被覆写

   第二种情况,final修饰方法,方法不能被覆写,private方法默认为final方法。java早期为效率问题引出final方法,但现在发现存在诸多毛病,不推荐使用

   第三种情况,final修饰域,final修饰域又分为修饰基本类型域和修饰对象

           final修饰基本类型域,一旦初始化,数值保持不变

           final修饰引用类型域,一旦初始化,则引用对象的地址不再发生变化,但是对象的内容可以改变


3,static关键字,可用来修饰域,方法,代码块和类

static:可修饰域,方法,代码块和类

    第一种情况,static修饰内部类,成为静态内部类

    第二种情况,static修饰代码块,这与初始化有关,在初始化时总是先初始化静态域

    第三种情况,static修饰域,表示一个类中只存在一份这样的静态域,不论该类创建了多少个对象,静态域只有一份,没有拷贝

     第四种情况,static修饰方法,在static修饰的方法中只能调用静态域,静态方法中不能出现this,和super关键字,而且静态方法和静态域可以使用类名或者对象去调用,而非静态的只能使用对象去调用


在代码中验证this,static,final,关键字

Person.java文件

public class Person {
    
    //展示了this的三种用法

    public int age;
    public String name;

    public Person(int age) {
        this.age = age;
    }
    public Person(int age,String name){
        this(age);
        this.name = name;
        
    }
    
    public Person getPerson(int age ,String name){
        this.changAge();
        return this;
    }
    
    private void changAge(){
        age++;
    }
    
}

MainActivity.Java文件,final修饰的域和final修饰的对象,以及static修饰的域和static修饰的变量
public class MainActivity extends Activity {


    private int i = 1;
    private final int j = 2;
    private static final int k = 3;

    private Person person1 = new Person(1,"June");
    private final Person person2 = new Person(3,"Nay");
    private static final Person person3 = new Person(4,"Saly");


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private void changField(){
        i++;//Correct,没有任何关键字修饰的基本类型数据,数值可以改变
//        j++;//Error,final修饰的基本类型数据,一经初始化,数值不能再发生改变
//        k++;//Error,同上,与域j不同处在于,k为static修饰,只有一份,不进行拷贝
        person1 = new Person(4,"Tom");//Correct
        person1.age++;//Correct
        person1.name = person1.name+"j";//Correct
//        person2 = new Person(5,"Jane");//Error,final修饰的对象地址不能发生改变
        person2.age++;//Correct,final修饰的对象内容可以发生改变
        person2.name = person2.name + "h";//Correct,final修饰的对象内容可以发生改变
        person3.age++;//Correct
        person3.name = person3.name + "h";//Correct

    }

}





你可能感兴趣的:(java,关键字)