java中同一個類中元素的相互關係
java中同一個類中元素的相互關係
1.同一類中方法和變數的呼叫關係
1.1.在同一個類中只能由方法來呼叫變數,不能用變數來呼叫方法。
1.2.在構造方法中呼叫變數。
可以訪問本類中的例項變數,預設是this.例項變數名稱,可以省略this.
可以訪問本類中的類變數,預設是類名.類變數名稱,可以省略類名,也可以使用this,可以省略this。
可以訪問本方法中的區域性變數,只能變數名稱訪問。
例如:
package com.click369.test.demo1;
public class StudentBean {
int stuid=1001; //例項變數
static String stuname="zhangsan"; //靜態成員變數[類變數]
/**
* 無引數構造方法
*/
public StudentBean(){
System.out.println("構造方法訪問例項變數stuid=="+this.stuid);
System.out.println("構造方法訪問例項變數stuid=="+stuid);
System.out.println("構造方法訪問類變數stuname=="+StudentBean.stuname);
System.out.println("構造方法訪問類變數stuname=="+stuname);
System.out.println("構造方法訪問類變數stuname=="+this.stuname);
char sex='男'; //區域性變數
//System.out.println("構造方法訪問區域性變數sex=="+this.sex);
//System.out.println("構造方法訪問區域性變數sex=="+StudentBean.sex);
System.out.println("構造方法訪問區域性變數sex=="+sex);
}
}
1.3.例項方法中呼叫變數
可以訪問本類中的例項變數,預設this.例項變數名稱,可以省略this.
可以訪問本類中的類變數,預設是類名.類變數名稱,可以省略類名,也可以使用this,可以省略this。
可以訪問本方法中的區域性變數,只能變數名稱訪問。
例如:
package com.click369.test.demo1;
public class StudentBean {
int stuid=1001; //例項變數
static String stuname="zhangsan"; //靜態成員變數[類變數]
/**
* 例項方法
*/
public void testMethod(){
System.out.println("例項方法訪問例項變數stuid=="+this.stuid);
System.out.println("例項方法訪問例項變數stuid=="+stuid);
System.out.println("例項方法訪問類變數stuname=="+StudentBean.stuname);
System.out.println("例項方法訪問類變數stuname=="+stuname);
System.out.println("例項方法訪問類變數stuname=="+this.stuname);
char sex='男'; //區域性變數
//System.out.println("構造方法訪問區域性變數sex=="+this.sex);
//System.out.println("構造方法訪問區域性變數sex=="+StudentBean.sex);
System.out.println("構造方法訪問區域性變數sex=="+sex);
}
}
1.4.類方法【靜態方法】中呼叫變數
不能出現this關鍵字。
不能訪問本類中的例項變數。
可以訪問本類中類變數,預設類名.變數名稱,可以省略類名。
可以訪問本方法中的區域性變數,只能變數名稱訪問。
例如:
package com.click369.test.demo1;
public class StudentBean {
int stuid=1001; //例項變數
static String stuname="zhangsan"; //靜態成員變數[類變數]
/**
* 類方法【靜態方法】
*/
public static void testStaticMehtod(){
//System.out.println("類方法【靜態方法】訪問例項變數stuid=="+this.stuid);
//System.out.println("類方法【靜態方法】訪問例項變數stuid=="+stuid);
System.out.println("類方法【靜態方法】訪問類變數stuname=="+StudentBean.stuname);
System.out.println("類方法【靜態方法】訪問類變數stuname=="+stuname);
//System.out.println("類方法【靜態方法】訪問類變數stuname=="+this.stuname);
char sex='男'; //區域性變數
//System.out.println("類方法【靜態方法】訪問區域性變數sex=="+this.sex);
//System.out.println("類方法【靜態方法】訪問區域性變數sex=="+StudentBean.sex);
System.out.println("類方法【靜態方法】訪問區域性變數sex=="+sex);
}
}
2.同一類中方法和方法的呼叫關係
2.1.構造方法呼叫其他的方法.
可以訪問本類中其他的構造方法,new + 構造方法。
可以訪問本類中的例項方法,預設this.例項方法 ,可以省略this.
可以訪問本類中的類方法,預設類名.類方法,可以省略類名,也可以this.類方法,可以省略this.
例如:
package com.click369.test.demo1;
public class PersonBean {
/**
* 無引數構造方法
*/
public PersonBean(){
//new PersonBean();//錯誤
new PersonBean("test");
this.testMethod();
testMethod();
PersonBean.testStaticMethod();
testStaticMethod();
this.testStaticMethod();
}
/**
* 有引數的構造方法
* @param canshu
*/
public PersonBean(String canshu){
System.out.println("有引數的構造方法");
}
/**
* 例項方法
*/
public void testMethod(){
System.out.println("例項方法");
}
/**
* 類方法
*/
public static void testStaticMethod(){
System.out.println("類方法");
}
}
2.2 例項方法呼叫其他方法
可以訪問本類的構造方法,預設是new + 構造方法;
可以訪問本類中的例項方法,預設this.例項方法,可以省略this.
可以本類中的類方法,預設類名.類方法,可以省略類名,也可以this.類方法,可以省略this
例如:
package com.click369.test.demo1;
public class MyClass {
public MyClass(){
System.out.println("無引數構造方法");
}
public MyClass(String value){
System.out.println("有引數構造方法引數是=="+value);
}
public void testMehtod(){
System.out.println("例項方法");
}
public static void testStaticMehtod(){
System.out.println("類方法");
}
/**
* 例項方法
*/
public void method(){
//new MyClass();
new MyClass("Zhangsan");
this.testMehtod();
testMehtod();
MyClass.testStaticMehtod();
testStaticMehtod();
this.testStaticMehtod();
}
}
2.3 類方法訪問其他方法
可以訪問本類中的構造方法,new + 構造方法。
不可以訪問本類中的例項方法。
可以訪問本類中的其他類方法,預設類名.類方法,可以省略類名。
不能出現this
例如:
package com.click369.test.demo1;
public class TestClass {
public TestClass(){
System.out.println("無引數的構造方法");
}
public void tesrtMehtod(){
System.out.println(" 例項方法");
}
public static void testStaticMethod(){
System.out.println("類方法");
}
/**
* 類方法
*/
public static void method(){
new TestClass();
// this.tesrtMehtod();
// tesrtMehtod();
TestClass.testStaticMethod();
testStaticMethod();
// this.testStaticMethod();
}
}
3.方法的過載
在同一個java類中,出現的方法名稱相同,但是方法的引數不同,這種現象就是方法的過載。
- 構造方法,例項方法,類方法都可以過載。
2.方法的過載一個方法型別和方法的返回值沒有關係,只看名稱和引數。
例如:
package com.click369.test.demo1;
public class DoxClass {
//構造方法過載
public DoxClass(){
}
public DoxClass(String value){
}
//例項方法過載
public int testMethod(int num){
return 100;
}
public double testMethod(double num){
return 100;
}
//類方法過載
public static int getInt(int num){
return num;
}
public static double getInt(int num ,double num2){
return num+num2;
}
}
4.this關鍵字
1.不能識別符號
2.this表示本類物件【出現在哪一個類,就代表哪一個類的物件】
3.this不能出現在類方法中。
this用法===[Java程式=物件+訊息]
我們在本類中本類自己定義的變數和方法時,也需要物件訪問,而這個時候this就可以用來充當訪問變數/方法的物件使用。
1. 在構造方法中訪問例項變數/例項方法預設是this.例項變數/例項方法,this是可以省略。
2.在例項方法中訪問其他的實變數/例項方法,預設是this.例項變數/例項方法,this是可以省略。
3.this不能出現在類方法中
4.如果需要強制使用被區域性變數隱藏的成員變數的資料值的時候,一定不能省略this.
5.static關鍵字
static---靜態的
用static關鍵修飾的變數叫靜態成員變數
用static關鍵修飾的方法叫靜態方法
在程式執行的時候static關鍵字,表示為static修飾的java元素【變數/方法】,提前分配好執行所需的記憶體空間。
通常情況下沒有使用static修飾的變數和方法會在程式執行的時候分配記憶體空間,而使用static修飾的變數和方法則是要早於程式執行的時候分配記憶體空間,程式被載入的時候就已經分配好記憶體空間,這就是提前分配好執行所需的記憶體空間的意思。
靜態成員變數、靜態方法的記憶體分配時機要早於例項變數和例項方法的記憶體分配時機。當我們靜態方法訪問例項變數/例項方法時,此時例項變數和例項方法不存在,因此上我們地靜態方法中是不能訪問例項變數/例項方法。
作業:例項變數與靜態成員變數有什麼區別?【思考總結一下】