java的關鍵字 this、super、final、static、
1、this關鍵字
(1)成員變量和局部變量同名
可以在成員變量名前面加上this.來區別成員變量和局部變量
package com.oracle.demo03; public class person { private String name; private int age; public person(String name, int age) { super(); 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(intage) { this.age = age; } }
(2)調用構造方法
在構造方法中調用本類的其他構造方法this()【根據參數列表區分】
必須放在本構造方法的第一行
package com.oracle.demo01; public class Demo02 { private String name; private int age; public Demo02(String name,int age){ this.name = name; this.age = age; } public Demo02(){ //在構造方法中調用本類的其他構造方法this() //必須放在本構造方法的第一行this("zhangsan",18); } 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; } }
測試類:
package com.oracle.demo01; public class Demo01 { public static void main(String[] args) { Demo02 d = new Demo02(); System.out.println(d.getName()+".."+d.getAge()); } }
2、super關鍵字
(1)子父類中構造方法的調用
隱式語句:super(); 【默認】
調用父類中的有參數構造方法:super(實參列表);
子類會繼承父類中的內容,所以子類在初始化時,必須先到父類中去執行父類的初始化動作。
當父類中沒有空參數構造方法時,子類的構造方法必須有顯示的super語句,指定要訪問的父類有參數構造方法。
package com.oracle.demo02; public class person { public person(String name,int age){ System.out.println("父類構造"); } }
package com.oracle.demo02; public class teacher extends person{ String name; int age; public teacher(){ super("zhangsan",12); /*this("lisi",12);*/ System.out.println("子類構造"); } public teacher(String name,int age){ super( name, age); } }
package com.oracle.demo02; public class test { public static void main(String[] args) { teacher t = new teacher(); } }
效果如下:
(2)子類對象創建過程的細節
只要是構造方法默認第一行都是super();
如果第一行調用了this()構造方法,顯示的super()語句可以間接調用。
package com.oracle.demo02; public class person { public person(String name,int age){ System.out.println("父類構造"); } }
package com.oracle.demo02; public class teacher extends person{ String name; int age; public teacher(){ //super("zhangsan",12); this("lisi",12); System.out.println("子類構造"); } public teacher(String name,int age){ super( name, age); } }
package com.oracle.demo02; public class test { public static void main(String[] args) { teacher t = new teacher(); } }
效果如下:
(3)super應用
package com.oracle.demo03; public class person { private String name; private int age; public person(String name, int age) { super(); 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; } }
package com.oracle.demo03; public class student extends person{ public student(String name, int age) { super(name, age); } }
package com.oracle.demo03; public class worker extends person{ public worker(String name, int age) { super(name, age); } }
package com.oracle.demo03; public class ceshi { public static void main(String[] args) { student s = new student("小明",2); System.out.println(s.getAge()+s.getName()); worker w = new worker("小紅",80); System.out.println(w.getAge()+w.getName()); } }
效果如下:
3、final關鍵字
(1)final修飾的類不能被繼承,但可以繼承其他類
package com.oracle.demo04; //final 修飾類(太監類) //不能被繼承,但可以繼承其他類 public final class fu extends Object{ }
(2)final修飾的成員方法不能重寫,但是不修飾的重寫的可以加final修飾
package com.oracle.demo04; public class fu2 { //被final修飾的方法 public final void xiuche(){ System.out.println("修車"); } public void maiche(){ System.out.println("賣車"); } }
package com.oracle.demo04; public class son extends fu2{ /*public void xiuche(){ System.out.println("車"); }*/ public final void maiche(){ System.out.println("車"); } }
(3)被final修飾的成員變量沒有系統默認初始值,需要在創建對象前賦值,否則報錯.
package com.oracle.demo04; public class zi2 { public void eat(){ final int i = 2; //i = 2; 哪怕是原來的值也不行。 } }
註意:
(4)被final修飾的局部變量是常量,不能改變,如果是引用數據類型,可以對其屬性進行修改。
package com.oracle.demo04; public class fu2 { String name; //被final修飾的方法 public final void xiuche(){ System.out.println("修車"); } public void maiche(){ System.out.println("賣車"); } }
package com.oracle.demo04; public class zi2 { public void eat(){ final fu2 f= new fu2(); //f=null; f.name = "lisi"; } }
4、static關鍵字
(1)被static修飾的成員變量屬於類,不屬於這個類的某個對象【清華大學】
package com.oracle.demo05; public class student { String name; int age; static String schollname; }
package com.oracle.demo05; import javax.print.attribute.Size2DSyntax; public class test { public static void main(String[] args) { student s = new student(); s.name = "小紅"; s.schollname = "北京大學"; student s1 = new student(); s1.name = "小明"; s1.schollname = "清華大學"; System.out.println(s.schollname+s1.schollname); } }
效果如下:
(2)靜態成員只能調用靜態成員,不能調用非靜態成員,非靜態成員可以調用靜態成員。
package com.oracle.demo05; public class ceshi { static int a = 1; int b = 2; public static void main(String[] args) { //靜態成員可以調用靜態成員方法 eat(); //靜態成員不可以調用非靜態成員方法 //study(); /*Cannot make a static reference to the non-static method study() from the type ceshi*/ //靜態成員方法可以調用靜態成員變量 System.out.println(a); //靜態成員方法不可以調用非靜態成員變量 //System.out.println(b); } public static void eat(){ } public void study(){ //非靜態成員方法可以調用靜態成員方法 eat(); //非靜態成員方法可以調用靜態成員變量 System.out.println(a); } }
(3)不能使用this/super【this、super屬於對象,而靜態屬於類】
(4)定義靜態常量:public static final 修飾變量 【接口】
java的關鍵字 this、super、final、static、