最近写程序发现关键字对程序影响很大,希望对大家有所帮助。
第一种,返回对当前对象的引用
public class Person { ....... public Person getPerson(){ ...... return this; } }
public class Person{ private int i; Persorn(int i){ this.i = i; } }
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; } }
第一种情况,final修饰类,表示最终类,不可以被继承,final类里的方法默认为final方法,不可以被覆写
第二种情况,final修饰方法,方法不能被覆写,private方法默认为final方法。java早期为效率问题引出final方法,但现在发现存在诸多毛病,不推荐使用
第三种情况,final修饰域,final修饰域又分为修饰基本类型域和修饰对象
final修饰基本类型域,一旦初始化,数值保持不变
final修饰引用类型域,一旦初始化,则引用对象的地址不再发生变化,但是对象的内容可以改变
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++; } }
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 } }