Java學習感悟


  至此已經學習了一個學期的Java,我在這里總結一下學習內容,過程,和感悟。

  從面向過程到面向對象,這是從學習C語言到學習Java最大的不同。面向過程就是分析出解決問題所需要的步驟,然后調用函數把這些步驟一一實現,使用的時候一個一個依次調用就可以了;而面向對象是把構成問題的事物分解成各個對象,建立對象來描敘某個事物在整個問題的步驟中的行為。這個本質區別相信大家早已有所體會。而Java的單一職責原則,開閉原則,封裝和繼承,多態思想則是學好Java所必須掌握的。(1)單一職責是應該有且只有一個原因引起類的變更,即一個職責一個接口,但是划分職責時並沒有一個標准,最終都是需要從實際的項目去考慮。因此我們在設計的時候,盡量單一,然后對於其實現類就要多方面的考慮。如果死套單一職責原則,則會增加很多類,給維護帶來不便。(2)開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,盡量不去修改原有的代碼,實現一個熱插拔的效果,為了使程序的擴展性好,易於維護和升級。(3)封裝是指將類的某些信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問。它能隱藏類的實例細節,方便修改代碼和實現功能。將實例變量標記為私有private變量,提供共有的getter與setter來控制存取動作,這樣能維持安全性(4)繼承則是子類繼承父類,子類擁有父類的所有屬性和方法(除了private修飾的屬性不能擁有),在父類中只定義一些通用的屬性和方法。子類自動繼承父類的屬性和方法,子類中可以定義特定的屬性和方法。或子類重新定義父類的屬性、重寫父類的方法可以獲得與父類不同的功能。從而實現了實現代碼的復用,使程序看起來更加簡潔。(5)多態就是對象的多種形態,父類的引用可以指向本類的對象,父類的引用可以指向子類的對象。創建本類對象時,調用的方法為本類方法;創建子類對象時,調用的方法為子類重寫的方法或者繼承的方法;且可向上或向下類型轉換。

 

  學習的內容由淺入深,過程也越發困難。從一開始的掌握輸入輸出:Scannner sc=new Scanner(System.in); double a=sc.nextdoulbe();System.out.println(“a=”+a);完成簡單的java程序的編寫;到數據類型轉換,再到一些簡單方法的編寫:

double area(double r1) {

      double S1=Math.PI*Math.pow(r1, 2);

      return S1;

}這個很像C語言,也不難

再到類的調用:Cirle cirle=new Cirle();

         double S1=cirle.area(a1);

         System.out.println("該圓的面積為:"+S1);

class Cirle{

   double area(double r1) {

      double S1=Math.PI*Math.pow(r1, 2);

      return S1;

   }

   double girth(double r1) {

      double C=2*Math.PI*r1;

      return C;

   }

}本質上也很像C語言的函數調用

再到類的繼承:

abstract class Shape{

   public Shape() {

 

   }

   public abstract double getArea();

   public abstract boolean validate();

   public String toString() {

     return String.format("%.2f",getArea()).toString()+" ";

   }

}

class Circle extends Shape{

   private double radius;

   public Circle() {

 

   }

   public Circle(double radius) {

      this.radius = radius;

   }

   public double getRadius() {

      return radius;

   }

   public void setRadius(double radius) {

      this.radius = radius;

   }

   public double getArea() {

      return Math.PI*Math.pow(radius, 2);

   }

   public boolean validate() {

      if(radius<0)

         return false;

      else

         return true;

   }

}父類一般是abstract抽象類,子類要有關鍵字extends 繼承父類,使用super 關鍵字繼承父類屬性,訪問父類變量

再到多態:

public class Goods {

   String name;

   boolean p;

   public void crossRiver() {

      p=!p;

      System.out.println(name+"在過河");

   }

}

public class Vegetable extends Goods{

   boolean p;

   Vegetable(){

      super.name="vegetable";

   }

}

public static void main(String[] args) {

      Farmer farmer=new Farmer();

      Goods vegetable=new Vegetable();

      farmer.crossRiver();

      crossRiver(farmer,vegetable);

   }一個類定義總的方法和屬性,其他的類再根據需要進行細化

再到字符串的相關使用:

StringBuffer sb = new StringBuffer();

sb.append("haha"); //添加字符串

sb.insert(2, "it");//在指定位置插入

sb.delete(1, 4);//刪除

sb.replace(1, 4, "cast");//替換指定范圍內的內容

 String str = sb.toString();

再到正則表達式的相關使用:

1.[abc] : 表示可能是a,可能是b,也可能是c。

2.[^abc]: 表示不是a,b,c中的任意一個

3.[a-zA-Z]: 表示是英文字母

4.[0-9]:表示是數字

簡潔的字符表示

.:匹配任意的字符

\d:表示數字

\D:表示非數字

\s:表示由空字符組成,[ \t\n\r\x\f]

\S:表示由非空字符組成,[^\s]

\w:表示字母、數字、下划線,[a-zA-Z0-9_]

\W:表示不是由字母、數字、下划線組成

數量表達式

1.?: 表示出現0次或1次

2.+: 表示出現1次或多次

3.*: 表示出現0次、1次或多次

4.{n}:表示出現n次

5.{n,m}:表示出現n~m次

6.{n,}:表示出現n次或n次以上

使用Pattern p = Pattern.compile("a*b");進行實例化

Matcher類的實例化依賴Pattern類的對象Matcher m = p.matcher("aaaaab");按我的感受來說,正則表達式這一類的題目是最難的,因為往往涉及到很多類,計算,還要分很多情況,不僅僅是寫一個表達式,為了完成一項功能你還要去做很多別的添加。

再到界面基礎設計:

public void start(Stage stg) throws Exception{//Stage舞台

      Button ok=new Button("OK");

      Scene scene=new Scene(ok,200,200);//scene場景

      stg.setTitle("My java Fx");

      stg.setScene(scene);

      stg.show();

      stage.setTitle("new stage");

     stage.setScene(newScene(newButton("cancle"),100,100));

      stage.show();

   }這些都不難,有點像規定死板的東西,你按照需要去設定就好了

再到在界面的基礎上設置動畫:

Button b1=new Button("roll");

Button b2=new Button("pause");

Button b3=new Button("stop");

b1.setOnAction(new EventHandler<ActionEvent>() {

         public void handle(ActionEvent args) {

             t.setCycleCount(Timeline.INDEFINITE);

                   t.play();

         }

      });

      b2.setOnAction(e->{

            if(t.getStatus()==Animation.Status.PAUSED) {

                t.play();

            }else {

                t.pause();

            }

        });

        b3.setOnAction(e->{

            t.stop();

        });

簡單動畫設計也很難,你要事先想好動畫的每一步,例如偏轉的角度,移動范圍,形狀,顏色,位置等,需要較嚴謹的數學思維。

  總的來說,java語言的優點有簡單性、面向對象、分布式、解釋型、可靠、安全、平台無關、可移植、高性能、多線程、動態性等。但學起來Java比C語言難的多,功能也更強大,在學習Java的語法時發現Java的語法是類似c語言的,所以語法學習的比較輕松。但有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什么時候用,為什么要用,怎么用一直都是個問題。編程時還有很多細節需要注意,那種少打了括號,符合中英文的問題還算小事,如果犯了邏輯錯誤則要花費大量時間調試。在學習的過程中,最好不是僅僅停留在java表層,不是抄書上的例子運行出結果就可以。要注意,即便對一個簡單的例子也要有耐心去琢磨、調試、改動。在學習的過程中一定要動手做、試着寫代碼,而不是抱一本書看看就行。很多東西和體會必須自己動手才能真正屬於自己。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM