一、前言
一个学期,java从陌生到现在渐渐熟悉,整个学期学到了很多java知识,从无到有,整个过程是精彩的。虽然在写PTA时会遇到困难但是还是努力解决了,我自认为这门课程应该掌握的还不错,也挺喜欢这门课程的。下面是我这个学期学习java的一些感受和一些遇到的问题的总结。
二、问题和总结
1、刚开始从面向过程转变成面向对象着实有点难,刚开始有点找不到头绪,这么多对象怎么把他们联系在一起呢?后来通过每次的大作业练习才慢慢理解了。java程序有很多个对象,可以通过它们的属性方法把各个对象联系起来。
2、刚开始接触java时,看不太懂类图,不知道这些箭头是什么意思,不知道怎么通过类图把它们联系在一起。
这是我碰到的第一个类图,因为是第一次接触,难免有些陌生,好在这时的类图不算复杂,然后通过我不断思考终于是理解了类图的意思,并且写出了代码。虽然现在想想是挺蠢的,但是整个过程是难忘的,尤其是尝试了自己之前不曾尝试过得东西,并且通过自己的努力终于成功了,那种高兴和自豪只有自己能懂。
3、第一次接触正则表达式 是在第四次大作业水文校验那里,当时老师并没有讲过,只是要我们自己到百度上自学,当时第一次在菜鸟教程学习正则表达式时,给我的第一感觉就是看不懂,很难。当时觉得很神奇,用一些奇怪的符号就能验证自己想要的字符串。
当时看的就是这个,还有很多就不列举了,正则表达式真的是一个很强大的工具,使用正则表达式能够准确提取,查找,匹配,分割,替换目标字符串,相当快速、准确、简洁,而且也是一种可以用于模式匹配和替换的规范。一个正则表达式就是由普通的字符(如字符 a~z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串,在编写程序时有着很大的用处。
下面列举一下一些常用的字符
\d:匹配数字
\D:匹配非数字
. 匹配除换行符\n之外的任何单字符。要匹配.字符本身,则使用\\.
*前面的子表达式出现零次或多次;+出现一次或多次;?出现零次或一次
?前面子表达式可以出现零次或一次。要匹配 ?字符本身,使用\\?
[0-9]是匹配数字0-9。
正则表达式在String 类里提供了如下几个特殊的方法。
matches:判断该字符串是否匹配指定的正则表达式。
replaceAll(String regex, String replacement):将该字符串中所有匹配 regex 的子串替换成 replacement。
replaceFirst:将该字符串中第一个匹配 regex 的子串替换成 replacement
。
split:以 regex 作为分隔符,把该字符串分割成多个子串。
Pattern 和 Matcher 两个类也用于正则表达式,非常具有实用性,可以用以一些目标子字符串的匹配和提取。
4、面向对象设计的原则理解
单一原则:对象的方法和属性,都有自己的职责,并借只能实现做自己的一个职责。
“开-闭”原则:针对可复用性的,对于扩展时开放的,对于修改确实关闭的,在职责和功能改变时,扩展是可以的,但是没有必要进行改动。
里氏替换原则:所有基类出现的地方,都保证子类也可以在这出现。
依赖倒置原则:由于抽象类的存在,使高层的对象不依赖于低层,细节变化的同时保持抽象稳定,使得程序更为稳定。
接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口,避免程序显得臃肿。
迪米特法则:一个对象类应该尽可能少的与其他对象类有关联,使得对象更加独立,减少了耦合。
5、对面向对象三大技术特性之间关系的理解
面向对象三大技术特性分别是封装性、继承性、多态性,封装性就是把对象的进行封装,变量属性都设为私有,其他对象只能通过get和set方法来获取相关属性。继承性就是类与类之间的关系,子类可以继承父类的属性和方法,同时也可以增加自己的属性。多态性就是从字面理解就是多种形态,在不同的对象中相同的方法会做不同的事,三者之间是有联系的,封装性和继承性几乎是为多态性而准备的,三者共同构成了java的技术特性。
6、Math类
System.out.println(Math.E);
System.out.println(Math.PI);
System.out.println(Math.pow(2, 3));
System.out.println(Math.min(2.4, 5.6));
System.out.println(Math.max(5, 3));
System.out.println(Math.sin(Math.PI / 2));
System.out.println(Math.exp(5));
System.out.println(Math.log(Math.E));
System.out.println(Math.log10(10));
System.out.println(Math.sqrt(2));
System.out.println(Math.ceil(3.5));
System.out.println(Math.floor(3.5));
System.out.println(Math.rint(3.6));
System.out.println(Math.round(3.5));
System.out.println(Math.abs(-4));
System.out.println(Math.random());
这些都是math的一些常用的方法。
7、JavaFx
它可以支持我们设计出很多好看的图形界面,是一个很使用的工具,通过这个可以设计出很多各色各样的界面,其中要用到很多java自带类,有Stage,Pane,FlowPane,Scene,Button等等,下面分享一下界面:
三、学习感想
一个学期学习java学习到了很多,遇到了很多问题,但是还是坚持下来了,在学习过程中也总结了一些自己编程的心得,比如在设计类前,自己要明确这个类要干什么,哪些类跟它有关系(方便与其他类联系起来,比如继承),这个类要实现什么功能,这些功能将由哪些方法实现,再写方法是怎么设计算法来实现这个功能,一定要考虑到单一原则,类一定要独立,提高复用性,使得在下一次使用该类时能够心安理得的遵守开闭原则。自我感觉学习java比学习C语言更加轻松,编写java代码也比C语言更加方便便捷,因为java库里有很多能直接用的东西,不用想C语言一样什么都得自己申明,自己写好。
一个学期时间也渐渐学会了使用正则表达式,抽象类,接口等等很多OO知识,并且对面向对象设计的基本原则理解更加深了,面向对象三大技术特性封装性、继承性、多态性理解也深了,从开始的看到复杂的类图不知所措,到现在能够有自己的独力思考能力,但是也发现了自己的很多不足之处,比如在写大作业时,代码写的很复杂,冗余,并且OO的基本原则也没有严格遵守,特别是单一原则,有时候一个方法会执行好几个职责,开闭原则也是没有严格遵守,不过经过这段时间的打磨,自我感觉进步还是蛮大的。
虽然java课程快结束了,但是我对学习java不会截止,这种热情不会熄灭,之后的学习就得完全靠自己了,我们现在的能力还不能支撑我们成为一个合格的程序员,所以还得继续学习,继续努力,始终坚持一句话“活到老,学到老”,才能不被社会淘汰。
原文:https://www.cnblogs.com/HNJBK/p/13052334.html