面向對象編程(中)

1.構造方法
定義:方法名稱和類名一致,不能有void,也不能有return,構造方法還不能被
static ,
作用:
創建對象
對成員變量進行初始化.
語法:
[訪問修飾符] 類名(){
}
分類:
一、無參數的構造方法
step1:顯示的無參數的構造方法
step2:隱式的無參數的構造方法
注意:如果一個類中,沒有提供任何形式的構造方法,那麼jvm會爲當前
類,提供一個無參數的隱式的構造方法。
二、有參數的構造方法
注意:當調用有參數的構造方法,創建對象時,傳遞的實際參數要和形式參數類型和順序相匹配。
一個類中可以有多個構造方法:如果類中有一個自己編寫的構造方法時,編譯器就不會爲我們再提供那個默認構造方法。此時又希望還可以用默認構造方法來創建類的實例時,那就必須在類中明確添加這個默認構造方法。
注意:在任何沒有被static修飾的方法中,都可以直接使用成員變量。

示例1:

/**
構造方法 給成員變量初始化
*/
public class Test1{
String name;
int age;
public Test1(){
name="zhangsan";
age=20;
}
public static void main(String[]args){
Test1 t=new Test1();
System.out.println(t.name+t.age);
}
}

示例2:

/**
隱式的無參數的構造方法
*/
public class Test2{
String name;
public void display(){
System.out.println("ok");
}
public static void main(String[]args){
Test2 t=new Test2();
t.name="zhangsan";
System.out.println(t.name);
t.display();
}
}

示例3:

/**
多個構造方法 示例
*/
public class Test3{
String name;
int age;
public void display(){
System.out.println("ok");
}
public Test3(String s,int a){
name=s;
age=a;
}
public Test3(){
name="王五";
age=28;
}
public Test3(int a){
age=a;
}
public static void main(String[]args){
Test3 t=new Test3("lisi",20);
System.out.println(t.name+t.age);
Test3 t1=new Test3();
System.out.println(t1.name+t1.age);
Test3 t2=new Test3(20);
System.out.println(t2.age);
}
}


2.多態
定義:同一種事物,在不同的環境下,有不同的展現方式。
多態的表現形式:
方法重載
方法重寫
方法重載:
同一個類中,有多個方法名稱相同,但是參數列表不同(參數個數,類型,順序的不同)這就是方法的重載。
注意:類中定義的普通方法、構造方法都可以重載。
返回值類型不同不算重載!!!(條件:其他條件都一致)

示例:

/**
方法重載  示例
*/
public class Test4{
public void display(){
System.out.println("無參數的方法");
}
public void display(int num){
System.out.println(num);
}
public void display(int num1,int num2){
System.out.println(num1+num2);
}
public void display(String s,int num){
System.out.println(s+num);
}
public void display(int num,String s){
System.out.println(num+s);
}
public static void main(String[]args){
Test4 t=new Test4();
t.display(10,"20");
}
}


3.this關鍵字
在類中每個非靜態方法中(也就是沒有被static修飾的方法中),實際上都隱含着
一個this的對調用當前方法對象的引用。
作用:this可以看作當前類的某個對象。
當方法中的局部變量和成員變量一致時,以局部變量爲主。
用法一:
當類中某個非靜態方法的參數名跟類的某個成員變量名相同時,爲了避免參數的 作用範圍覆蓋了成員變量的作用範圍,必須明確地使用this關鍵字來指定成員變量.
(用this關鍵字區分成員變量和方法中的參數名稱)
用法二:
當類中構造方法的第一句代碼是this(參數列表)的形式出現,表示該構造方法調用了當前類中,其它的構造方法。
注意:this關鍵字只能在沒有被static修飾的方法中使用。

示例:

/**
this關鍵字  示例
*/
public class Test5{
String name;
int age;
public Test5(String name,int age){
this.name=name;
this.age=age;
}
public Test5(){
this("張三",29);
}
public void display(){
String name="王五";
System.out.println(name+age);
System.out.println(this.name+this.age);
}
public static void main(String[]args){
Test5 t=new Test5("李四",20);
t.display();
Test5 t2=new Test5();
System.out.println(t2.name+t2.age);
}
}


4.代碼執行的順序
代碼在執行期間,以main方法開始,並且以main方法結束。

注意:普通方法之間的調用,直接寫:方法名稱(參數列表)。

示例:

/**
代碼執行的順序
*/
public class Test6{
public void display(){
System.out.println("方法1");
display2();
System.out.println("ok");
}
public void display2(){
System.out.println("方法2");
}
public static void main(String[]args){
Test6 t=new Test6();
t.display();
System.out.println("over!");
}
}


5.方法中參數的傳遞
1.在Java中進行參數傳遞時,無論基本數據類型還是引用數據類型都是採用的傳值的方式。(所謂的傳值:就是指傳遞的是具體的數據,只是數據的表現形式不一樣)。
2.基本數據類型進行參數傳遞時,傳遞的是數據的本身。
基本數據類型在進行參數傳遞時,實際上傳遞的是本身的副本。
3.引用數據類型進行參數傳遞時,傳遞的是對象所在的內存地址。

示例1:

/**
基本數據類型 參數的傳遞
*/
public class Test7{
public void display(int x){
System.out.println("x傳遞過來的值是:"+x);
x=1000;
System.out.println("x重新賦值後是:"+x);
}
public static void main(String[]args){
Test7 t=new Test7();
int x=100;
System.out.println("在調用display方法之前x的值是:"+x);
t.display(x);
System.out.println("在調用完display方法之後x的值是:"+x);
}
}

示例2:

/**
引用類型參數的傳遞
*/
import java.util.Arrays;
public class Test8{
public void display(int[]num){
System.out.println("num的值是:");
for(int a:num){
System.out.println(a);
}
Arrays.sort(num);
System.out.println("排序以後數組的值是:");
for(int a:num){
System.out.println("-->"+a);
}
}
public static void main(String[]args){
int[]num={5,10,2,30,4,100,1};
Test8 t=new Test8();
System.out.println("在調用display方法之前數組num的值是:");
for(int a:num){
System.out.print(a+" ");
}
t.display(num);
System.out.println("在調用完display方法之後數組num的值是:");
for(int a:num){
System.out.println("****>"+a);
}
}
}

示例3:

/**
引用類型參數傳遞 示例2
*/
public class Test9{
String name;
public void display(Test9 t){
t.name="lisi";
}
public static void main(String[]args){
Test9 t=new Test9();
t.name="張三";
//System.out.println(t.name);
//t.display(t);
//System.out.println(t.name);
Test10 t0=new Test10();
t0.display(t);
System.out.println(t.name);
}
}
class Test10{
public void display(Test9 t){
t.name="王五";
}
}

綜合例題:

/**
封裝一個學生(Student)類:
學生應該有姓名(name)、年齡(age)、性別(sex),班級號(classNum),座位號(sno)。
提供一個參數化構造化方法以便能很方便的創建一個學生對象。
提供一個方法(displayInfo())用來顯示這個學生的姓名、年齡、性別、所在的班級和他的座位號。
寫一個main方法創建兩個學生對象,分別調用displayInfo()方法顯示各自的信息。
*/
public class Student{
String name;
int age;
String gender;
String classNum;
String sno;
public Student(String s,int a,String g,String c,String sn){
name=s;
age=a;
gender=g;
classNum=c;
sno=sn;
}
public void displayInfo(){
System.out.println(name+age+gender+classNum+sno);
}
public static void main(String[]args){
Student stu1=new Student("張三",20,"男","java2014","110");
Student stu2=new Student("李四",22,"女","java2015","120");
stu1.displayInfo();
stu2.displayInfo();
}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章