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学习感悟的主要内容,如果未能解决你的问题,请参考以下文章
201671010146 2017-2《第九周java学习感悟》