posts - 1,  comments - 0,  trackbacks - 0
           

          一:習(xí)題講解

          1:撰寫程序,在一個(gè)源文件中寫兩個(gè)類,一個(gè)類是Student,有一個(gè)顯示信息的方法show

          另一個(gè)類是Main,包含有入口方法,在入口方法中調(diào)用另一個(gè)類(Student)

           思考:源文件名叫什么?

                        如果一個(gè)源文件中包含很多類,如果有一個(gè)類中有main方法(入口方法)

                  那么源文件名 就是這個(gè)類名

           package test;

          publicclass Main {

              //類是模版,對(duì)象是模版下的一個(gè)例子

              publicstaticvoid main(String[] args) {

                 //首先要產(chǎn)生類的一個(gè)對(duì)象,也就是說產(chǎn)生一個(gè)學(xué)生對(duì)象

                 Student stu=new Student();

                 //對(duì)象是具體的。也就是說對(duì)象的屬性要賦值的

                 stu.name="張三";

                 stu.sex="";

                 stu.age=20;

                

                 stu.show();

              }

          }

          class Student{

               String name;

               String sex;

               intage;

              //作用就是顯示信息

              publicvoid show(){

                 System.out.println("姓名="+name+",性別="+sex+",年齡="+age);

              }

          }

          這個(gè)例子還有很多可以改進(jìn)的地方

          A:希望在stu.show();這條語句上面,把鼠標(biāo)放上去能夠出現(xiàn)中文注釋。起到說明注釋作用

               推廣,在任何方法上,通過把鼠標(biāo)放上去能夠出現(xiàn)中文注釋。起到說明注釋作用。

              怎么做?在要顯示的方法上面打上/** 回車

              /**

               *顯示信息

               */

              publicvoid show(){

                 System.out.println("姓名="+name+",性別="+sex+",年齡="+age);

              }

                 /**

               *得到姓名

               *@return字符串

               */

              public String getName(){

                 returnname;

              }

           總結(jié),java的注釋有3   //    /**/ /**

          B:顯示信息的方法,java 最好采用一個(gè)固定的方法 toString 不要使用什么showprint等其他方法,雖然說其他方法沒有錯(cuò)

                 toStirng 是固定寫法

          /**

               *用來顯示信息

               */

              public String toString() {

                 // TODO Auto-generated method stub

                 return"姓名="+name+",性別="+sex+",年齡="+age;//return 后面就是格式化信息

              }  

           toString 這種方法 怎么調(diào)用呢?

                     Student stu=new Student();

                 //對(duì)象是具體的。也就是說對(duì)象的屬性要賦值的

                 stu.name="張三";

                 stu.sex="";

                 stu.age=20;

                

                 //stu.show();

                 System.out.println(stu);//輸出學(xué)生信息會(huì)自動(dòng)調(diào)用toString

          C:改進(jìn)第3個(gè)

              Student類的屬性 name,sex,age 我們希望不能夠隨便被別的類修改,要進(jìn)行限制

              stu.name="張三";

              stu.sex="";

              stu.age=20;

           為什么限制,如果能夠被隨便修改的話,會(huì)導(dǎo)致name,sex,age 不符合現(xiàn)實(shí)要求.

           比如 sex=ssss”,age=-100

           那么怎么做,才能夠限制呢?就是面向?qū)ο蟮?/span>3大特征之一:封裝!

          2:有一個(gè)賬戶,賬戶中有存款余額,您可以對(duì)賬戶進(jìn)行存款與提款的動(dòng)作,

          并可以查詢以取得存款余額。使用面向?qū)ο蟮姆绞椒治觯?/span>

          說明其中的類,對(duì)象并列舉他的屬性和方法。

          面向?qū)ο蟮姆治觯趺捶治?/span>

          賬戶

          靜態(tài)特征:余額

          動(dòng)態(tài)特征:存款,提款,查詢

          package test;

          publicclass Account{

              floatye=10f;

              /**

               *存錢

               *@paramc存多少錢

               */

              publicvoid cunkuan(float c){

                 ye=ye+c;

              }

              /**

               *取錢

               *@paramc取多少錢

               *@return得到多少錢

               */

              publicfloat qukuan(float c){

                 if(c>=ye){

                  System.out.println("余額不足");

                  return 0;

                 }else{

                  ye=ye-c;

                  return c;

                 }

              }

              public String toString(){

                 return"余額為="+ye;

              }

          }

          package test;

          publicclass Test {

              /**

               *@paramargs

               */

              publicstaticvoid main(String[] args) {

                 // TODO Auto-generated method stub

                 /*

                  *從第1句代碼到最后一句,都是面向?qū)ο蟮?/span>

                  *a.cunkuan(100f);只告訴做什么事,具體怎么做交給了cunkuan的方法了

                  */

                 Account a=new Account();

                 a.cunkuan(100f);

                 System.out.println(a);

                

                 a.qukuan(1000f);

                 System.out.println(a);

                

                 a.qukuan(10f);

                 System.out.println(a);

              }

          }

          變量的作用域!

          面向?qū)ο笥?/span>3大特征:封裝,繼承,多態(tài)

          1:為什么需要封裝

                 對(duì)于

              stu.name="張三";

              stu.sex="";

              stu.age=20;

           3行代碼,可以推廣,對(duì)于任何類的屬性,都是需要賦值。賦值是不是有含義

           比如age 可以賦值為有含義,也可以賦值為-100 這種沒有含義的值。

           所以我們希望 能夠?qū)傩再x值的時(shí)候,進(jìn)行限制。!!!

           這就是為什么需要封裝的原因

          2:封裝是什么意思 就是隱藏細(xì)節(jié)。目的是 不能直接看到,或者訪問到

          為什么需要封裝 做個(gè)例子

          package test2;

          publicclass YgTeacher1 {

              public String name;

              //String name 前面寫public

              //意味著這個(gè)name賦值可以在任意類下的YgTeacher1類的對(duì)象賦值

              publicintage;

             

              /**

               *返回自我介紹的內(nèi)容

               */

              public String introduction() {

              return "大家好!我是" + name + ",我今年"+ age+"";

              }

          }

          package test2;

          publicclass YgTeacher1Test {

              publicstaticvoid main(String[] args) {

                 YgTeacher1 teacher = new YgTeacher1();

                 teacher.name = "李芳";

                 teacher.age = -10;

                 System.out.println(teacher.introduction());

              }

          }

          對(duì)于teacher對(duì)象 我們賦值為李芳與-10,這樣才語法角度是沒有問題,因?yàn)槟軌虺稣_結(jié)果

          但是從現(xiàn)實(shí)角度,是不符合現(xiàn)實(shí) 所以我們要改進(jìn),要限制屬性的賦值!!!

          那么怎么給屬性賦值有含義,我們通過封裝去解決

          3:怎樣才能夠給屬性封裝

                 A:屬性私有化 也就是說在屬性前面加上private 關(guān)鍵字 private 私有的

          private 含義就是只能在這個(gè)類中訪問(賦值與取值) 在別的類中是不能直接賦值的!teacher.name = "李芳";

                 teacher.age = -10; 會(huì)報(bào)錯(cuò)

                 B:提供公有方法訪問私有屬性

                    公有方法 就是在方法前面加上public

                 我們這種公有方法的作用就是 對(duì)私有屬性進(jìn)行賦值 與取值。所以把這類

                        公有方法叫做 setters方法和getters方法

                        package test2;

          //應(yīng)該來說改進(jìn)后的代碼

          publicclass YgTeacher2 {

              //第一步在所有屬性前加私有關(guān)鍵字 private

              private String name;

              privateintage;

             

              //第二步設(shè)置所有私有屬性的set get方法

              //set方法就是以set開頭的方法,就是就是賦值

              //get方法就是以get開頭的方法,就是返回值取值

              //可以采用快捷方式

              //source -->generate getters and setters方法

              public String getName() {

                 returnname;

              }

              publicvoid setName(String name) {

                 //this 是個(gè)關(guān)鍵字

                 //this 表示哪個(gè)對(duì)象調(diào)用方法,那么this就是哪個(gè)對(duì)象

                 //this 可以區(qū)別屬性與參數(shù)的

                 this.name = name;

              }

              publicint getAge() {

                 returnage;

              }

              publicvoid setAge(int age) {//可以通過if 來限制屬性賦值必須有含義

                 this.age = age;

                 if(age<22){

                     System.out.println("賦值太小");

                     this.age=22;

                 }

          }

              public String toString() {

                 // TODO Auto-generated method stub

                 return"name="+name+",age="+age;

              }

                 

                 

          }

          package test2;

          publicclass YgTeacher2Test {

              publicstaticvoid main(String[] args) {

                 // TODO Auto-generated method stub

                 YgTeacher2 gjy=new YgTeacher2();

                 gjy.setName("gjy");

                 gjy.setAge(23);

                 System.out.println(gjy);

                

                 YgTeacher2 w=new YgTeacher2();

                 w.setName("w");

                 w.setAge(19);

                

                 System.out.println(w);

              }

          }

          4:給屬性賦值,難道只有一個(gè)封裝嗎?沒有別的方法嗎?

           肯定不止,還有構(gòu)造方法也可以給屬性賦值!!!

          封裝通過set方法給屬性賦值

          創(chuàng)建對(duì)象時(shí),通過構(gòu)造方法給屬性賦值

          構(gòu)造方法的語法:

                 名字與類名一樣,還有沒有返回類型

          package test2;

          publicclass YgTeacher3 {

              private String name;

              privateintage;

              public String getName() {

                 returnname;

              }

              publicvoid setName(String name) {

                 this.name = name;

              }

              publicint getAge() {

                 returnage;

              }

              publicvoid setAge(int age) {

                 this.age = age;

              }

             

              //沒有參數(shù)的構(gòu)造方法

              //構(gòu)造方法的作用就是給屬性賦值

              //構(gòu)造方法什么時(shí)候調(diào)用:在創(chuàng)建對(duì)象的時(shí)候調(diào)用

              public YgTeacher3(){

                 this.name="yg1";

                 this.age=22;

              }

             

             

              public String toString() {

                 returnname+","+age;

              }

          }

          package test2;

          publicclass YgTeacher3Test {

              publicstaticvoid main(String[] args) {

                 // TODO Auto-generated method stub

                 //new YgTeacher3();這句代碼執(zhí)行,會(huì)自動(dòng)調(diào)用沒有參數(shù)的構(gòu)造方法

                 //因?yàn)?/span>YgTeacher3()括號(hào)中沒有參數(shù)

                 YgTeacher3 yg=new YgTeacher3();

                 System.out.println(yg);

              }

          }

          構(gòu)造方法的分類

                 構(gòu)造方法可以分2 1是沒有參數(shù)的構(gòu)造方法

                                                    2是有參數(shù)的構(gòu)造方法

             2類構(gòu)造方法可以寫在一個(gè)類中

          package test2;

          publicclass YgTeacher3 {

              private String name;

              privateintage;

              public String getName() {

                 returnname;

              }

              publicvoid setName(String name) {

                 this.name = name;

              }

              publicint getAge() {

                 returnage;

              }

              publicvoid setAge(int age) {

                 this.age = age;

              }

             

              //沒有參數(shù)的構(gòu)造方法

              //構(gòu)造方法的作用就是給屬性賦值

              //構(gòu)造方法什么時(shí)候調(diào)用:在創(chuàng)建對(duì)象的時(shí)候調(diào)用

              public YgTeacher3(){

                 this.name="yg1";

                 this.age=22;

              }

              public YgTeacher3(String name,int age){

                 this.name=name;

                 this.age=age;

              }

             

              public String toString() {

                 returnname+","+age;

              }

          }

          package test2;

          publicclass YgTeacher3Test {

              publicstaticvoid main(String[] args) {

                 // TODO Auto-generated method stub

                 //new YgTeacher3();這句代碼執(zhí)行,會(huì)自動(dòng)調(diào)用沒有參數(shù)的構(gòu)造方法

                 //因?yàn)?/span>YgTeacher3()括號(hào)中沒有參數(shù)

                 YgTeacher3 yg=new YgTeacher3();

                 System.out.println(yg);

                

                 YgTeacher3 yg2=new YgTeacher3("yg",34);

                 System.out.println(yg2);

              }

          }

          方法的分類

                 1:實(shí)例方法 或叫成員方法 (除了構(gòu)造方法外的都是實(shí)例方法)

                        實(shí)例方法就是類產(chǎn)生實(shí)例(對(duì)象)后調(diào)用的方法,有幾個(gè)對(duì)象,那么就可以調(diào)用實(shí)例方法

                     實(shí)例方法的語法呢,

                 2:構(gòu)造方法

                 3:靜態(tài)方法

                        語法:在方法中有static 這個(gè)關(guān)鍵字!就是靜態(tài)方法 static 就是靜態(tài)

                        最典型的static 方法

                        public static void main(String []args){

                        }

                        作用:從內(nèi)存上說,靜態(tài)方法和靜態(tài)變量都是屬于類的。無論產(chǎn)生多少個(gè)對(duì)象

                                靜態(tài)方法和靜態(tài)變量都只有一個(gè)。

          package test;

          publicclass Test {

              staticinti=1;//在變量前面加一個(gè)static 就是靜態(tài)變量

              intj=1;//一般的變量也叫實(shí)例變量

              publicstaticvoid main(String[] args) {//靜態(tài)方法

              //靜態(tài)方法中只能放靜態(tài)方法和靜態(tài)變量和實(shí)例變量

                 Test t=new Test();//當(dāng)運(yùn)行new Test()的時(shí)候

                            //要自動(dòng)分配內(nèi)存,i 靜態(tài)變量會(huì)分配內(nèi)存,并且只分配一次

                            //無論后面產(chǎn)生多少個(gè)對(duì)象,靜態(tài)變量只分配一次

                            //j 實(shí)例變量也會(huì)分配內(nèi)存但是是產(chǎn)生一個(gè)對(duì)象就分配一次內(nèi)存

                 t.i++;//2

                 //靜態(tài)變量和方法的調(diào)用可以是t.i 對(duì)象名.靜態(tài)方法或變量

                 //也可以類名.靜態(tài)變量或方法

                 t.j++;// 2

                

                 Test t2=new Test();

                 t2.i++;//3

                 t2.j++; //2

                

                 System.out.println("i="+t.i);//t.i t2.i 都是3 也就是說i是屬于類的

                                          //跟對(duì)象無關(guān)

                 System.out.println("j="+t.j);

                

                 System.out.println("i="+t2.i);

                 System.out.println("j="+t2.j);

              }

          }

          為什么要使用封裝?!

                 因?yàn)槲覀円獙?duì)屬性賦值要進(jìn)行限制。使屬性值要有含義

          屬性賦值 :有2種方式

                 第一個(gè)就是封裝

                        A:給屬性私有化

                        B:產(chǎn)生settersgetters方法

                 第二個(gè)就是構(gòu)造方法

                        一般在類中提供幾個(gè)構(gòu)造方法,可以根據(jù)不同的要求,調(diào)用不同參數(shù)的構(gòu)造方法

          方法重載!!!

                 什么是方法重載

                  有幾個(gè)方法(無論是實(shí)例方法還是構(gòu)造方法),它們的方法名一樣,但是參數(shù)的類型或個(gè)數(shù)不一樣。跟修飾符與返回類型無關(guān)。并且這幾個(gè)方法在一個(gè)類中。這就是方法重載

                 生活中有很多方法重載的例子

                        比如說  吃這個(gè)方法,我們可以隨便定義2個(gè)

                               Public void eat(){

                                      Syso(“吃飯”);

                               }

                            Public int eat(String type){

                                      If(type==”筷子”){

                                      }

                                      If(type=”叉子”){

                                      }

                               }

          Java 語言 本身提供了很多方法重載的例子

                 package test;

          publicclass Test {

              publicstaticvoid main(String[] args) {

                 double d=10.0;

                 //println 就是典型的方法重載

                 System.out.println("s");

                 System.out.println(d);

                

                 System.out.println(Math.abs(-10));//-10的絕對(duì)值

                 System.out.println(Math.random());//0-1之間的隨機(jī)數(shù),是double類型

                

                

                 //Math 這是一個(gè)數(shù)學(xué)類,是java本身提供的。在java.lang這個(gè)包下

                 //Math.abs 這是類名.方法名這是方法必須是靜態(tài)方法下才能夠使用

                

              }

          }

          構(gòu)造方法也可以重載

                 public YgTeacher3(){

                 this.name="yg1";

                 this.age=22;

              }

              public YgTeacher3(String name,int age){

                 this.name=name;

                 this.age=age;

              }

          posted on 2010-06-04 15:12 gjy 閱讀(51) 評(píng)論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 岑溪市| 涡阳县| 兰考县| 岳池县| 禹城市| 河津市| 綦江县| 台江县| 拉孜县| 赣州市| 彭山县| 桓台县| 揭西县| 象州县| 全州县| 东阿县| 泰来县| 五常市| 成安县| 库尔勒市| 吉林省| 文水县| 隆子县| 蓬莱市| 凉城县| 道孚县| 丹阳市| 莎车县| 昭通市| 黑河市| 衡南县| 即墨市| 福泉市| 彰化县| 奉新县| 潞西市| 荔波县| 呼图壁县| 汽车| 梅河口市| 柘荣县|