Java学习感悟

Posted dthebest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:表示由空字符组成,[ xf]

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表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。在学习的过程中一定要动手做、试着写代码,而不是抱一本书看看就行。很多东西和体会必须自己动手才能真正属于自己。

以上是关于Java学习感悟的主要内容,如果未能解决你的问题,请参考以下文章

java视频课学习感悟

Java初学感悟

201671010146 2017-2《第九周java学习感悟》

java OO学习后的感悟

201671010142 2017-2 《java第十章学习感悟》

String源码学习感悟